Skip to content

Is 50 Demos Enough to Fine-Tune a VLA? ACT vs Diffusion Policy vs SmolVLA

Demo counts, training setups and latency reported for ACT, Diffusion Policy and SmolVLA, and why pretraining lifted success on the same 50 demos from 40% to 78.3%.

Contents

Key takeaways

  1. The ACT paper trains a roughly 80M-parameter model from scratch on 50 demonstrations per real task (100 for Thread Velcro), reporting about 5 hours of training and about 0.01 s inference on one RTX 2080 Ti.
  2. The Diffusion Policy paper uses 90 to 284 demonstrations per real task and reports about 0.1 s latency on an RTX 3080 with 10 DDIM inference steps.
  3. In the SmolVLA paper, fine-tuning the pretrained checkpoint on 50 demos per task averaged 78.3% across three SO100 tasks, versus 40% for single-task training without pretraining. Pretraining, not the demo count alone, decides whether 50 is enough.
  4. The LeRobot docs recommend about 50 episodes as a starting point for SmolVLA fine-tuning and report that 25 episodes performed poorly.
  5. Compute the inference budget as actions executed per chunk divided by control rate. SmolVLA’s default 50 steps at 30 Hz leaves about 1.67 s to produce the next chunk.

Once you have recorded about 50 demonstrations on a robot arm, the first question is usually whether that is enough to train a VLA, or whether you should start with a smaller policy such as ACT. This article puts the demo counts and the training and inference setups reported in the ACT, Diffusion Policy and SmolVLA papers into one table, then gives criteria for choosing a starting model based on data size and inference budget. Every number comes from the papers or official docs, and since each was measured on different tasks and hardware, those conditions are stated alongside.

If you want the architecture of each model first, see how Diffusion Policy works and the VLA pipeline comparison.

How many demos each paper used, and how it trained

ItemACTDiffusion PolicySmolVLA
Model size and structureAbout 80M, trained from scratch per taskCNN-based and Transformer-based variants450M (action expert about 100M)
Demos per real task50 (100 for Thread Velcro)90 to 28450 (5 positions × 10 each)
PretrainingNoneNone481 community datasets, 22.9K episodes
Training setupOne 11 GB RTX 2080 Ti, about 5 hours4500 epochs for state tasks, 3000 for image tasks200,000 fine-tuning steps on real tasks
InferenceAbout 0.01 s, 50 Hz controlAbout 0.1 s with 10 DDIM steps (RTX 3080)10 flow-matching steps, chunk of 50

The ACT figures come from the body of the ACT paper, the Diffusion Policy figures from Table 3 and the experiments section of the Diffusion Policy paper, and the SmolVLA figures from the model and training sections and Table 1 of the SmolVLA paper. The ACT abstract reports 80 to 90% success on six real tasks with this setup. The Diffusion Policy paper reports an average improvement of 46.9% over prior methods on its simulation benchmarks.

What stands out is that ACT and SmolVLA both used about 50 demonstrations per real task. The difference lies in model size and whether the model was pretrained.

On the same 50 demos, pretraining made the difference

The SmolVLA paper evaluates three tasks on an SO100 arm: pick-and-place, stacking and sorting. Each dataset has 10 demos from each of 5 start positions, 50 in total. Here are the paper’s real-world results under the same data conditions.

Model and trainingPick-placeStackingSortingAverage
ACT70502548.3
π0 (3.5B)100404561.7
SmolVLA, no pretraining, single-task55452040
SmolVLA, no pretraining, multi-task80403551.7
SmolVLA, pretrained, multi-task75907078.3

The same SmolVLA architecture, trained without pretraining on one task, averages 40%, below ACT. Table 5 of the paper credits pretraining on community datasets with lifting 51.7% to 78.3%. So “50 demos are not enough for a VLA” holds when you start without pretraining, and does not hold when you fine-tune a pretrained checkpoint.

The LeRobot SmolVLA docs point the same way. They recommend about 50 episodes as a starting point and report that a similar dataset cut to 25 episodes performed poorly. They also stress repeating demos several times for every condition you vary, such as cube position, to help generalization. How you structure the data matters as much as how much you collect.

Choosing by data size, task count and inference budget

The table below turns those numbers into starting points. It is not an answer key; it tells you what to try first.

SituationTry firstBasis
One task, about 50 demos, no language instructionsACTThe ACT paper’s default is 50 demos per task, and training is light
One task, motions with several valid paths, 100 to 300 demosDiffusion PolicyThe paper’s real tasks used 90 to 284 demos
Several tasks switched by language, about 50 demos eachSmolVLA fine-tuning78.3% average when pretrained and multi-task
25 demos or fewerCollect more data firstLeRobot docs: 25 episodes performed poorly
Several robots, long-horizon tasks, large datasetsConsider a larger VLAHardware cost grows with model size

In every case, training an ACT baseline first makes comparisons easier. In LeRobot, one dataset can be trained with --policy.type=act, --policy.type=diffusion or --policy.path=lerobot/smolvla_base with nothing else changed. The ACT procedure is covered in the LeRobot SO-101 ACT training guide.

Work out the inference budget from chunk length and control rate

When a policy emits several actions per inference, the time you have before the next chunk is due is:

Tbudget=nactionfcontrol T_{budget} = \frac{n_{action}}{f_{control}}

Here naction n_{action} is the number of actions actually executed from each inference result, and fcontrol f_{control} is the control rate in Hz.

  • SmolVLA: configuration_smolvla.py defaults to chunk_size 50, n_action_steps 50 and 10 flow-matching num_steps. At 30 Hz the next chunk must be ready within 50/30≈1.67 50 / 30 \approx 1.67 s. The paper reports that asynchronous inference cut task completion time from 13.75 s to 9.7 s.
  • ACT: the paper queries the policy at every timestep for temporal ensembling. At 50 Hz the budget is 0.02 s, and the reported inference time of about 0.01 s fits.
  • Diffusion Policy: in the paper, real-world Push-T predicts commands at 10 Hz and interpolates them to 125 Hz for execution, and an action horizon of 8 steps was found best for most tasks. The 0.1 s latency fits within the prediction period.

For a given model, executing fewer actions per chunk improves reactivity but shortens the budget. The SmolVLA paper concludes that chunk sizes between 10 and 50 balance reactivity and efficiency well. Turning that budget into a hardware spec is covered in SmolVLA fine-tuning VRAM and sizing memory and bandwidth for on-device VLAs.

Moving from small policies to larger VLAs

Growing the model in step with your data and task count makes failures easier to diagnose at each stage.

  1. ACT baseline: use one task and 50 demos to confirm the data pipeline (fixed cameras, joint order, fps). If success is low here, the problem is more likely the data than the model.
  2. Diffusion Policy comparison: if the task has motions with several valid paths, compare against it. The number of denoising steps sets inference latency, so check that it fits the control period first.
  3. SmolVLA fine-tuning: extend to two or more tasks and add language instructions. Always start from a pretrained checkpoint such as lerobot/smolvla_base.
  4. Larger VLAs: as robot types and long-horizon tasks increase, choose using the licenses, sizes and GPU needs in the open-source robot policy model comparison. Fine-tuning GR00T N1.7 on LeRobot-format data is covered in the GR00T N1.7 fine-tuning guide.

Three decisions to make before you record

First, fix the number of demos per task together with the number of start-condition variations. Writing it down as “5 positions × 10 demos”, as the SmolVLA datasets do, lets you trace which condition is underrepresented when success is low later. Second, decide whether you need language instructions. For a single task ACT may be enough; if tasks must be switched by instruction, a pretrained VLA is the starting point. Third, compute the inference budget from control rate and actions executed. Once those three are fixed, the table above settles most of the model choice.

If your environment is not set up yet, start with the MuJoCo and LeRobot installation guide to match Python and CUDA.

Common mistakes

  • Assuming a VLA needs little data and starting from VLM weights with no robot pretraining — in the SmolVLA paper, single-task training without pretraining averaged only 40%.
  • Expecting the paper’s success rates without copying its data layout, such as 5 start positions × 10 demos each
  • Choosing a model on inference latency alone without working out chunk length and control rate together
  • Using the same number of denoising steps at inference as during training in Diffusion Policy, so latency exceeds the control period

Pre-flight checklist

  • You have written down, as numbers, how many demos per task you can collect and how many start-condition variations they cover
  • You have decided whether you need language instructions to switch between tasks or only one task
  • You start from the VLA’s pretrained checkpoint (for example lerobot/smolvla_base)
  • You have computed the time budget to the next chunk from control rate and actions executed
  • You trained an ACT baseline on the same dataset first, so you have something to compare against

Frequently asked questions

Can I compare ACT and Diffusion Policy on the same data?
In LeRobot you can train both on one dataset by switching policy.type between act and diffusion in lerobot-train. The two papers used different tasks and hardware, so running both on your own data with the same number of evaluation trials is more accurate than comparing the papers’ numbers.
When should I look at larger VLAs such as π0 or GR00T?
When one policy has to cover several robots and tasks, or follow longer language instructions. Training and inference GPU memory grow sharply with model size, so size your hardware first.
Can the demonstrations come from simulation?
Yes. The Diffusion Policy paper’s BlockPush benchmark uses 1000 episodes generated by a scripted policy. A policy trained only on simulated data can still lose performance on real hardware, so the sim-to-real gap has to be handled separately.

Sources & verification

  1. Zhao et al., Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware (ACT, arXiv:2304.13705)
  2. Chi et al., Diffusion Policy: Visuomotor Policy Learning via Action Diffusion (arXiv:2303.04137)
  3. Shukor et al., SmolVLA: A Vision-Language-Action Model for Affordable and Efficient Robotics (arXiv:2506.01844)
  4. Hugging Face LeRobot Docs — SmolVLA
  5. LeRobot GitHub — configuration_smolvla.py

Last verified: