Instructions to use Suyang99/xlerobot-smolvla-cup-grasp-right with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use Suyang99/xlerobot-smolvla-cup-grasp-right with LeRobot:
# See https://github.com/huggingface/lerobot?tab=readme-ov-file#installation for more details git clone https://github.com/huggingface/lerobot.git cd lerobot pip install -e .[smolvla]
# Launch finetuning on your dataset python lerobot/scripts/train.py \ --policy.path=Suyang99/xlerobot-smolvla-cup-grasp-right \ --dataset.repo_id=lerobot/svla_so101_pickplace \ --batch_size=64 \ --steps=20000 \ --output_dir=outputs/train/my_smolvla \ --job_name=my_smolvla_training \ --policy.device=cuda \ --wandb.enable=true
# Run the policy using the record function python -m lerobot.record \ --robot.type=so101_follower \ --robot.port=/dev/ttyACM0 \ # <- Use your port --robot.id=my_blue_follower_arm \ # <- Use your robot id --robot.cameras="{ front: {type: opencv, index_or_path: 8, width: 640, height: 480, fps: 30}}" \ # <- Use your cameras --dataset.single_task="Grasp a lego block and put it in the bin." \ # <- Use the same task description you used in your dataset recording --dataset.repo_id=HF_USER/dataset_name \ # <- This will be the dataset name on HF Hub --dataset.episode_time_s=50 \ --dataset.num_episodes=10 \ --policy.path=Suyang99/xlerobot-smolvla-cup-grasp-right - Notebooks
- Google Colab
- Kaggle
File size: 4,595 Bytes
c43ad06 e2865b3 c43ad06 e2865b3 c43ad06 e2865b3 c43ad06 e2865b3 c43ad06 e2865b3 c43ad06 e2865b3 c43ad06 e2865b3 c43ad06 e2865b3 c43ad06 e2865b3 c43ad06 e2865b3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | ---
tags: [robotics, lerobot, smolvla, xlerobot, jetson]
library_name: lerobot
pipeline_tag: robotics
license: apache-2.0
base_model: lerobot/smolvla_base
datasets:
- Suyang99/xlerobot-cup-grasp-20260820-0230
---
# SmolVLA — right-arm cup grasp (XLeRobot)
Finetuned from [`lerobot/smolvla_base`](https://huggingface.co/lerobot/smolvla_base) on
[`Suyang99/xlerobot-cup-grasp-20260820-0230`](https://huggingface.co/datasets/Suyang99/xlerobot-cup-grasp-20260820-0230).
| | |
|---|---|
| Task | `Pick up the cup and place it down` — **right arm only** (`arms: 1.0`) |
| Policy | **SmolVLA**, 450 M total / **100 M trainable** (VLM frozen: `freeze_vision_encoder=True`, `train_expert_only=True`) |
| VLM backbone | `HuggingFaceTB/SmolVLM2-500M-Video-Instruct`, 16 layers |
| **Uploaded checkpoint** | **step 16 000** |
| **Training reached** | **step 18 000 of a planned 20 000 — stopped early, see below** |
| Final loss | **0.053** at step 16 000 (0.054 at 18 000) |
| Trained on | Jetson Orin Nano Super, 8 GB unified memory, torch 2.8.0 + CUDA 12.6 |
| Batch size / throughput | 2 · ~1.05 step/s · 4 h 54 m wall clock |
| Cameras | `head` → `camera1`, `right_arm_wrist` → `camera2`, `left_arm_wrist` → `camera3` |
| Action / state | 17-dim (left arm 6 · right arm 6 · head 2 · base 3) |
| `chunk_size` / `n_action_steps` | 50 / 50 |
## Training data: 40 of the 50 episodes
`dataset.eval_split=0.2` held out the last 10 episodes. Because the dataset has a single task,
LeRobot's per-task split (`datasets/factory.py:156`) took the **last** 10 episodes — which, since
cup positions were recorded in order, is **exactly position P5**.
So this model trained on **P1–P4 (40 episodes / 15 866 frames)** and never saw P5.
⚠️ `eval_steps` was left at its default of `0`, and `lerobot_train.py:748` gates evaluation on
`cfg.eval_steps > 0`. **No validation ran during training.** It was measured afterwards instead —
see below.
## Held-out result: no position memorisation detected
Measured after training with `05-training/eval_heldout.py`, 120 frames per group, using the same
loss path as training (uint8→float32/255 → preprocessor → `policy(batch)`):
| | frames | loss |
|---|---|---|
| Train positions P1–P4 | 120 | **0.2348** |
| **Held-out P5 (never trained on)** | 120 | **0.2300** |
| | | **ratio 0.98×** |
The model does as well on a position it never saw as on the ones it trained on. Had it merely
memorised "P3 → this trajectory", the held-out loss would be several times higher. This is the
pretrained prior doing its job.
**This does not replace a real-robot test.** P5 is still the same table, cup and lighting; a low
loss says the predicted actions match the human demonstrations, not that the arm actually grasps.
## Why training stopped at 18 000 instead of 20 000
Not divergence, not a manual interrupt — **the disk filled up** while writing the step-18 000
checkpoint:
```
safetensors._safetensors_rust.SafetensorError: Error while serializing:
I/O error: No space left on device (os error 28)
```
Each SmolVLA checkpoint is 1.26 GB and one was saved every 2 000 steps. The step-18 000 checkpoint
was left half-written, so `checkpoints/last` still points at **016000** — which is what is uploaded
here. Loss had already flattened (0.053 at 16 000, 0.054 at 18 000), so the missing 2 000 steps
make no material difference.
## Loss curve
`training_log.csv` in this repo carries all 27 logged points. Summary:
| step | epoch | loss | grad norm |
|---|---|---|---|
| 100 | 0.01 | 2.366 | 18.683 |
| 200 | 0.03 | 0.936 | 8.605 |
| 16 000 | 2.08 | **0.053** | 1.178 |
| 18 000 | 2.27 | 0.054 | 1.223 |
Loss fell 98% and the gradient norm 93%; the last 2 000 steps vary by less than 0.02. Converged.
## Limitations
1. **Cannot drive the left arm.** The recording ran with `arms: 1.0`, so action dimensions 0–5 hold
one constant across all frames. This policy will not transfer to a left-arm version of the task.
2. **Trained on data from the 68 mm gripper.** The Fin-Ray blade is being replaced with a 90 mm
version; lever arm and compliance both change, so real-world behaviour must be re-measured.
3. **Zero physical trials so far.** Every number here is offline.
## Companion model
[`Suyang99/xlerobot-act-cup-grasp-right`](https://huggingface.co/Suyang99/xlerobot-act-cup-grasp-right)
— ACT trained from scratch on all 50 episodes, for comparison. Loss values are **not** comparable
between the two: ACT's is `l1 + 10 × kld`, SmolVLA's is a different objective. Only real-robot
success rate compares them.
|