- Trainer key
- smolvla
- The value the training API expects
- Vendor
- Hugging Face
- Compact Vision-Language-Action model
- Parameters
- about 450 million
- GPU tier
- RTX 4090 or any card with 24 GB
- 24 GB class
- Inference
- 245 ms per action step
- Measured in the training pool, not on your laptop
- Default schedule
- 20,000 steps
- Batch 2, gradient accumulation 8, learning rate 1e-4
- Minimum episodes
- 30 episodes
- Below this, results are usually not worth evaluating
- Dataset format
- LeRobot v2.1
SmolVLA is a compact vision-language-action model from Hugging Face, roughly 450 million parameters, and the only VLA on this platform that fine-tunes inside 24 GB of VRAM. Its defaults here are batch size 2 with 8 gradient accumulation steps, a learning rate of 1e-4 and 20,000 steps, and it runs at about 245 ms per action step. Train it first: one run costs one to three dollars and tells you whether your dataset is worth putting on an A100.
Why this is the model to run first
Every vision-language-action model here except SmolVLA is a roughly 3 billion parameter network that the pool has to put on an 80 GB card. SmolVLA is about 450 million parameters and fits on a 24 GB consumer GPU. That one difference decides what a run costs, how long you wait for an answer, and how many times you can afford to be wrong before the dataset is right.
It is a real VLA, not a toy: camera frames, arm state and a natural-language task string in, actions out. It arrives as a pretrained checkpoint, so your job is a fine-tune rather than a fit from random weights, which is why about 30 good episodes already get somewhere useful.
| Model | Parameters | GPU tier | Inference per action step |
|---|---|---|---|
| ACT | about 80 million | 24 GB | about 20 ms |
| SmolVLA | about 450 million | 24 GB | about 245 ms |
| GR00T N1.7 | about 3 billion | 80 GB | about 152 ms |
| Pi0.5 | about 3 billion | 80 GB | about 485 ms |
What 450 million parameters can and cannot do
On one tabletop task recorded with a single SO-100 and fixed cameras, SmolVLA reaches a genuinely useful policy: it picks the object up from placements around the ones you demonstrated, and it absorbs small approach errors. What it will not do is beat a 3 billion parameter model on precision, and it carries less pretraining, so its tolerance for unfamiliar scenes is narrower.
- Realistic: one task, or a few related tasks, in the scene you recorded
- Realistic: object placements spread across the area you covered
- Optimistic: millimeter-accurate insertion, or anything decided by contact forces
- Not going to happen: a task you never demonstrated, described in words at inference time
Language conditioning, and what it buys you
The task string you type before each recording is not metadata for SmolVLA, it is an input. The model encodes the sentence alongside the images, so one checkpoint can hold several behaviors and pick between them based on what you ask for.
That buys two things. One policy for several phrasings of one task: train on "pick up the red cube and place it in the bowl" and asking for "put the red cube in the bowl" generally still works, because the text side was pretrained and does not need an exact match. And one policy for several tasks, if you recorded them into one dataset with distinct strings. What it does not buy is new behavior: language selects among things the model has seen.
Use exactly one sentence per task across all its episodes. The phrasing tolerance you get at inference comes from the pretrained text encoder, not from sprinkling variants through the dataset. Varying the string while recording mostly teaches the model that the string carries no information.
Why a 24 GB card changes the economics
GPUs are rented by the hour on a spot market, and the pool selects them by VRAM rather than by name. The two tiers are far enough apart that they support different working styles, not just different invoices.
| 24 GB tier (SmolVLA, ACT) | 80 GB tier (GR00T, Pi0.5) | |
|---|---|---|
| Hourly rate | 0.30 to 0.60 USD | 1.20 to 2.00 USD |
| Typical run length | 2 to 5 hours | 3 to 6 hours |
| Cost of one run | about 1 to 3 USD | about 4 to 12 USD |
The interesting number is not the total, it is the threshold at which you stop deliberating. At one to three dollars a run, the cheapest way to answer "would more episodes help" is to record them and train again. At four to twelve, people reason about their dataset instead of testing it, which is guesswork with extra steps. Spot rates move daily, so check /pricing before planning a series.
SmolVLA is also not cloud-only. The trained checkpoint runs on your own machine at inference, so you rent a GPU while training and nothing at all while the arm works.
The defaults, and when to change them
SmolVLA starts at batch size 2 with 8 gradient accumulation steps, a learning rate of 1e-4 and 20,000 steps. The batch is small because 24 GB of VRAM bounds it; accumulation puts it back, giving an effective batch of 16 without a bigger card. The form also exposes seed and logFreq, both belonging to the lerobot family.
Every trainer here is step-based, not epoch-based. Twenty thousand steps at an effective batch of 16 is 320,000 sample presentations, and that number does not move when your dataset grows. Double the episodes and each is seen half as often, which is the most common reason a second, larger dataset trains worse than the first.
| Your dataset | What to change | Why |
|---|---|---|
| 30 to 50 episodes, one task | Nothing, run the defaults | The default schedule is plenty of exposure for a set this size |
| 100 to 200 episodes | Raise steps in proportion to the extra data | Fixed steps, more data, fewer passes per episode |
| 300+ episodes, or several tasks | More steps, and raise accumulation before batch size | Accumulation buys effective batch without buying VRAM |
| Any run you will compare | Set the seed explicitly | SmolVLA has a seed field, so two runs are comparable. GR00T has none |
Leave the learning rate at 1e-4 unless the curve misbehaves. Flat from step one, or spiking and staying high, is a learning rate or data-loading problem, and /learn/train-your-first-policy has the full table of curve shapes.
# Start a SmolVLA run through the hosted MCP server.
# The web UI does the same thing: open Training, pick the dataset, press Start.
curl -s https://www.ay-robots.com/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AY_ROBOTS_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "start_training",
"arguments": {
"dataset_id": "ds_7f3a91c4",
"policy_name": "cube-pick-smolvla-v1",
"model_id": "smolvla",
"max_steps": 40000,
"confirm_spend": true
}
}
}'The training tool rents a GPU and bills the account, and it refuses to run unless confirm_spend is true. Set it only after a human has agreed to the cost. If you have an agent wired to the MCP server, this is the guard that stops a vague instruction from becoming an invoice.
Use the first run as a data-quality probe
The most valuable output of a first SmolVLA run is usually not the policy, it is a verdict on the dataset. If SmolVLA cannot learn the task at all on the defaults, a 3 billion parameter model on the same data will almost never rescue it, because what kills an imitation dataset is a property of the data rather than of the network.
Contradictory demonstrations, a camera that moved between sessions, kept failures, an action stream that does not line up with the frames: none of that is fixed by capacity. A larger model fits contradictions more confidently, it does not resolve them.
- 1Train once on the defaults, changing only the seed
Open Training, pick the dataset, choose SmolVLA, set a seed and write it down. A tuned first run that fails tells you nothing about which change caused it.
textTraining form, SmolVLA on an SO-100 dataset Model SmolVLA Batch size 2 default Grad accumulation 8 default, effective batch 16 Learning rate 1e-4 default Steps 20000 default Seed 1000 your choice, but write it down - 2Evaluate on the arm, twenty attempts, written down
Cameras exactly where they were during recording, same lighting, same reset. Varied placement, and write down every attempt, including the embarrassing ones.
- 3Classify the failure before changing anything
Failures cluster, and the cluster is the diagnosis. Map what you saw onto the table below.
- 4Change exactly one thing, then run again
Either the data or the model, never both. Fix the dataset and switch to GR00T in one step and you pay 80 GB rates to learn nothing.
| What the first run does | What that says about the data | What to do next |
|---|---|---|
| Never approaches the object, loss looked normal | Observations and actions do not correspond: cameras moved, or two setups are mixed | Fix the recording setup, train nothing larger on this |
| Approaches but never closes the gripper | Grasp moment underrepresented or occluded | Record targeted grasp episodes, rerun SmolVLA |
| Succeeds near demonstrated placements only | Clean data, narrow coverage | More episodes with varied placement |
| Succeeds often but is imprecise at the end | Good data, model ceiling | The run that justifies GR00T N1.7 or Pi0.5 |
When to graduate to GR00T N1.7 or Pi0.5
Move up when the data has stopped being the limiting factor: you have a dataset SmolVLA learns from, an evaluation protocol you trust, and a specific complaint that more episodes will not fix.
- At the ceiling: SmolVLA mostly succeeds and the rest is precision, not confusion. GR00T N1.7 is the default next step, and at about 152 ms it is faster at inference too.
- Generalization you never demonstrated: GR00T N1.7 carries pretraining on a large multi-robot corpus, which buys tolerance for unseen object positions.
- Contact-rich work: Pi0.5, at about 485 ms per action step, visible as hesitation on fast motions.
Both jump you to the 80 GB tier, so budget four to twelve dollars per run and expect to iterate less. /compare/groot-n1-7-vs-smolvla puts the two side by side.
GR00T accepts LeRobot v2.1 only and rejects v3.0 outright. SmolVLA trains on the v2.1 the client writes by default, so keeping that default keeps the dataset usable for both. If you switched to v3.0, convert before you rent an 80 GB card, not after.
Where to go next
- /train/smolvla-on-so-100 runs the whole thing end to end on an SO-100
- /learn/train-your-first-policy for loss curves and checkpoint selection
- /compare/act-vs-smolvla is the decision most first projects face
- /compare/groot-n1-7-vs-smolvla is the one you face once the data is good
- /live drives a real SO-100 in the browser, no signup
- /download has the desktop client, driver included
How many episodes before a SmolVLA run is worth starting?▾
About 30 consistent episodes of one task, lower than ACT needs because SmolVLA fine-tunes a pretrained checkpoint. Quality dominates: thirty clean episodes beat eighty where you changed approach halfway through.
Why is the default batch size only 2?▾
Because 24 GB of VRAM is the constraint the tier is built around. The 8 accumulation steps bring the effective batch back to 16, which is what the optimizer sees. On a bigger dataset, raise accumulation, not batch size.
Can one SmolVLA checkpoint handle two tasks?▾
Yes, if both are in the dataset with distinct task strings and enough episodes each. Expect slightly lower success per task than two dedicated runs, in exchange for one checkpoint and one deployment.
Is SmolVLA faster than ACT at inference?▾
No, and not close: about 245 ms per action step against roughly 20 ms. If fluid, fast motion is the requirement, ACT is the model for it, and /compare/act-vs-smolvla covers where each wins.
Do I need my own GPU?▾
No. Training runs on a rented 24 GB card and inference runs locally through the desktop client. Owning a 24 GB card puts you in the class the trainer targets, which is not true of the 3 billion parameter models.
Undecided? The comparison table puts all five side by side.