How to train SmolVLA on an SO-101

The SO-101 runs the identical software path as the SO-100, so most of this guide is about the one thing that genuinely differs: the revised wrist, and what it does to data you recorded on the older arm. The training run itself is the same 24 GB job that costs a couple of dollars.

35 min · beginner · Last updated 2026-08-09

Trainer key
smolvla
GPU tier
RTX 4090 or any card with 24 GB
Inference
about 245 ms per action step
Batch size
2, gradient accumulation 8
Learning rate
1e-4
Steps
20,000
Dataset format
LeRobot v2.1
Typical run
2 to 5 hours, about 1 to 3 USD
Servos
Feetech STS3215 bus servos
Servo voltage
7.4 V
Short answer

Training SmolVLA on an SO-101 uses exactly the same workflow as on an SO-100: LeRobot v2.1 recordings, batch size 2, learning rate 1e-4, 20 000 steps, gradient accumulation 8, on a 24 GB card for roughly 1 to 3 USD. The one thing that changes is the hardware underneath: the revised wrist alters both the grasp pose and the wrist camera view, so SO-100 episodes are a starting point rather than a drop-in.

What the SO-101 changes, and what it does not

The SO-101 is the SO-100 with a revised wrist. Five joints plus a gripper, six Feetech STS3215 bus servos, 7.4 V, LeRobot v2.1 recordings, the same trainer with the same defaults. If you have already trained SmolVLA on an SO-100, the only genuinely new material on this page is the section about mixing data between the two arms.

The wrist revision matters for two things: where a wrist camera can be mounted, and how the final joint reaches into a grasp. Both are pose-level and pixel-level details, and a policy learned by imitation is made almost entirely of pose-level and pixel-level details. That is the whole reason this page exists separately.

Identical on both armsDifferent on the SO-101
Feetech STS3215 bus servos at 7.4 VRevised wrist geometry, so the approach pose into a grasp is not the same
LeRobot v2.1 recordings, same feature schemaWrist camera sits in a different place, so the close-range image differs
SmolVLA defaults: batch 2, lr 1e-4, 20 000 steps, accumulation 8Joint zero points and usable ranges, which is precisely what calibration records
24 GB GPU tier, roughly 1 to 3 USD per runParts cost, roughly 130 to 170 euro against 110 to 150 for an SO-100

Before the first run

  • An assembled SO-101 registered on /robots and paired with the client, with all six servos answering on the bus.
  • A fresh calibration on this physical arm. Calibration is per unit, not per model, and an SO-100 profile on the same machine does not carry over.
  • A scene camera on a mount that will not move, and a wrist camera if your wrist has a bracket for one.
  • Thirty or more reviewed episodes of a single task, uploaded as LeRobot v2.1.
bash
ay-robots devices
# Confirm six servos respond before you calibrate. Five means a cable,
# not a configuration problem, and no amount of software fixes it.

ay-robots calibrate
# Per physical arm. Zero points differ between units of the same model,
# so an SO-101 next to an SO-100 needs its own pass even on one machine.
Two supplies on one bench is how servos die

The SO-101 uses the same 7.4 V STS3215 servos as the SO-100. If you also own a Koch v1.1, there is a 12 V supply somewhere on that bench, and 12 V into an STS3215 is a few seconds to failure. Label both supplies now, before the evening when you are tired and reaching behind the desk.

Recording for a language conditioned policy

SmolVLA trains on your camera frames, your joint actions and the sentence attached to each episode. That sentence is a real input, not metadata, so it needs the same discipline as the rest of the recording. Keep one sentence per task and keep it byte-identical across episodes. Paste it, never retype it.

There is a habit specific to SO-101 owners here. Most people arrive at this arm from an SO-100 and re-record a task they already had. When you do that, resist the urge to improve the wording of the task string. A better sentence makes the two datasets incomparable, and comparing them is the main reason to re-record in the first place.

Where the language conditioning genuinely pays off is a second task in the same scene. Thirty episodes of one job plus thirty of another, same table, same cameras, trains a single policy you steer at inference by changing the sentence. Plan the scene for both from the start, because moving the tripod later invalidates the half you already recorded.

Thirty is a floor, not a target

SmolVLA is usable from around 30 episodes, which is lower than ACT, GR00T N1.7 and Pi0.5 all of which want 50 or more. That is what makes it the sensible first run on a new arm. It is not a reason to stop at 30 once you know the task is learnable.

Mixing SO-100 and SO-101 episodes

Everyone who owns both arms asks this. The honest answer is that it works and it costs you something. Joint values mean slightly different poses on the two arms even after both are calibrated, and the wrist camera returns a different image of the same grasp. A mixed dataset therefore teaches the model that one observation sometimes implies two slightly different actions, which is the exact ambiguity that flattens a policy into a useless average.

  1. Mix only in substantial blocks. Forty SO-100 episodes plus forty SO-101 episodes is a mixed dataset. Forty plus six is a clean dataset with six pieces of noise in it.
  2. Both arms calibrated, and the scene camera in the same physical position for both recording sessions. If the tripod moved between them, you are not mixing arms, you are mixing scenes.
  3. Keep the task string identical across the two blocks. Different wording turns one mixed dataset into two small single-arm datasets.
  4. Evaluate on both arms afterwards. A mixed policy that works on one and not the other is common, and it tells you which arm dominated the data.
  5. If you only care about the SO-101, thirty fresh SO-101 episodes will beat sixty mixed ones. Mixing is for when you want one policy to run on both.

Starting the run

  1. 1
    Upload and let it finish processing

    Open Datasets and wait until the upload leaves the processing state. The trainer cannot see a dataset that is still being archived, and it will simply not appear in the picker.

  2. 2
    Open Training and select SmolVLA

    Pick the dataset first, then the model. The parameter form is model-specific, so it redraws when you change the model and quietly discards values that do not apply.

  3. 3
    Read the six fields it offers you

    Batch size, learning rate, steps, gradient accumulation, seed and log frequency. That is the whole surface. Chunk size and action steps are ACT parameters and do not appear for SmolVLA.

  4. 4
    Fix the seed and name the run for the arm

    Put so101 in the policy name. When you later have runs from both arms in one list, the model name and the date will not tell you which hardware produced which policy.

  5. 5
    Start it and check the first log lines

    The pool leases a 24 GB card on the spot market, so expect a wait before the first metrics appear. Once loss is printing, confirm it is moving downward before you walk away from a paid GPU.

Defaults and the reasons to touch them

SettingDefaultChange this when
Batch size2You have a specific reason and are willing to lose a run to an out-of-memory error. The default is chosen to fit a 24 GB card, not to be conservative.
Learning rate1e-4The curve spikes and stays high. Halve it once and rerun. A flat curve from the very first step is a data or loading problem, and changing the rate only hides it.
Steps20 000You are probing a new SO-101 dataset and only need a verdict. 5 000 steps answers that question for a fraction of the cost.
Gradient accumulation8Never on a first run. Two times eight is an effective batch of 16, and the learning rate default assumes it.
Seedyours to setYou are comparing SO-100 data against SO-101 data. Without a fixed seed the difference between the two runs includes noise you cannot separate out.
Log frequencyas shippedThe run is short and the loss curve is too sparse to read. Lowering it has no effect on training.

Seed and log frequency are available for the whole lerobot family, meaning ACT, SmolVLA and Pi0.5. GR00T exposes neither, so a reproducibility workflow built around a fixed seed does not survive the move to N1.7.

Cost, and what the cheap run is for

A SmolVLA run rents from the 24 GB tier at roughly 0.30 to 0.60 USD per hour and takes 2 to 5 hours, so about 1 to 3 USD. That price is the actual argument for this model. It lets you treat a training run as a measurement rather than an event.

The measurement worth making on a new SO-101 dataset is whether the data is learnable at all. If SmolVLA cannot get the arm to make task-shaped attempts, the problem is nearly always in the demonstrations, and moving to a bigger model reproduces the failure at 1.20 to 2.00 USD per hour on an A100 instead. Establish the data is good on the cheap tier, then spend the A100 hours on a dataset you already trust.

Deploying to the SO-101

Load a checkpoint in the client, pass the task string you recorded with, and put the cameras back exactly where they were. SmolVLA runs at about 245 ms per action step, so the arm advances in perceptible increments. On an SO-101 that is most visible in the wrist, which now has to complete its rotation into the grasp in fewer, larger commanded jumps than a 20 ms policy would use.

Evaluate over twenty attempts with varied object placement, recording each outcome as it happens. Compare two or three checkpoints from the second half of the run rather than trusting the final one. Then, separately, run the same protocol with a reworded instruction to find out whether the language robustness you assumed is actually there.

Four failures and their SO-101 flavor

Loss falls but the arm does nothing useful

On a fresh SO-101 the first suspect is not your technique, it is a dataset that still contains SO-100 episodes. A recycled dataset with a handful of old-arm episodes in it produces exactly this: a clean curve and an arm that reaches to a pose that was correct on different hardware. Check the episode list, and if the set is mixed, retrain on the SO-101 block alone as a control.

The policy ignores the instruction

Two causes, and on this arm the second is more common. Either every episode carried the same string, so the text input never varied and the model learned to disregard it, or you reworded the string when you moved the task over from the SO-100 and the dataset now contains two near-synonyms with fifteen episodes each. Neither has enough behind it to teach anything.

It only works in the lighting you recorded in

The printed SO-101 wrist sits closer to the grasp than the older one and can throw a hard shadow across the object under a single overhead lamp. Move the light, or add a second, and record ten episodes under each condition. Lighting variety in the dataset is worth more here than more episodes under the one condition that happens to work.

The gripper closes at the wrong moment

The SO-101 gripper closes over a revised travel, so a policy carrying any SO-100 data has learned a closing distance that no longer matches the hardware. Combine that with roughly 245 ms per action step, which already commits the close about a quarter of a second early, and near misses become the norm. Re-record the grasp slowly on the SO-101 itself: approach, settle, close, settle, lift.

The upgrade path from here

SmolVLA gives up accuracy on fine positioning in exchange for fitting on a cheap card. Once more data stops moving your success rate, the next run is GR00T N1.7 on the same v2.1 dataset: an 80 GB card, batch size 32, about 152 ms per action step, no seed field, roughly 4 to 12 USD. /train/groot-n1-7-on-so-101 covers it, and /policies/groot-n1-7 has the specifications.

For background on the model itself see /policies/smolvla, and if you are still deciding between the two models on the 24 GB tier, /compare/act-vs-smolvla is the direct comparison.

Can I train on a dataset I recorded with an SO-100 and run it on an SO-101?

You can load it and the arm will move, but expect degraded grasping. The wrist revision changes both the approach pose and the wrist camera image, which are two of the strongest signals the policy uses. Treat an SO-100 dataset as a head start that needs SO-101 episodes added, not as a finished dataset.

Does the SO-101 need different SmolVLA hyperparameters?

No. The trainer never sees the arm, only the recorded observations and actions. Batch 2, learning rate 1e-4, 20 000 steps and gradient accumulation 8 apply unchanged.

Do I have to recalibrate if I already calibrated an SO-100 on this computer?

Yes. Calibration captures the zero points and ranges of one physical unit. Two arms of the same model need two calibrations, and two different models certainly do.

Is the SO-101 better than the SO-100 for policy learning?

The revised wrist makes some grasps mechanically easier to demonstrate, which improves your data. Nothing about the model changes. Data quality is the variable that dominates results on either arm, and both are recorded and trained through the same path.

How long before I know whether the run is working?

The first few hundred steps tell you whether loss is moving at all, which is the only early signal worth acting on. Everything else waits for the arm. A full 20 000 step run takes 2 to 5 hours, and a 5 000 step probe answers the learnability question in roughly a quarter of that.