
What knowledge distillation does to a robot policy, which capabilities survive it, the published speedups from TinyVLA to VLA-AD, and whether it beats training the small model directly.
The short version
- •Distillation trades accuracy for latency on purpose. You accept a slightly worse policy because a policy that answers in 20 ms and one that answers in 485 ms are not the same robot, even at identical success rates.
- •Published VLA distillation results are real but narrow in scope. VLA-AD (arXiv 2605.16241, May 2026) shrinks OpenVLA-7B into a 158M student, 44 times smaller, within 0.27 percent average relative gap on LIBERO, running at 12.5 Hz on an RTX 4090.
- •The teacher's language grounding is the first thing that dies. The TinyVLA authors traced three of their failures at 0.4B parameters to misread instructions, and that failure class disappeared at 1.3B.
- •Distillation does not always win. Apple's Distillation Scaling Laws (ICML 2025) says it beats supervised training when a teacher already exists or when you will make many students, and that supervised training is generally preferable when you train one teacher for one student.
- •SmolVLA is the counter-example that matters here. At 450M parameters, trained directly and never distilled, it scores 87.3 average on LIBERO against 76.5 for OpenVLA-7B.
- •AY-Robots does not distill. The five trainable policies are fine-tuned, not compressed. If you want a smaller policy here you pick a smaller policy: SmolVLA at 245 ms or ACT at 20 ms per action step.
Why anyone shrinks a robot policy
A policy that takes half a second to produce an action is not slow the way a slow web page is slow. It is slow the way a car with a delayed steering wheel is slow. The arm keeps moving during the wait, the scene it was looking at is gone by the time the action arrives, and the correction it computes is a correction for the past. That is why inference latency gets its own column on every model page here rather than a footnote.
The five policies you can train on AY-Robots span more than an order of magnitude in that number, and they span it for architectural reasons that distillation research attacks directly.
| Policy | Params | Inference per action step | GPU tier | Min episodes |
|---|---|---|---|---|
| GR00T N1.7 | ~3 B, of which ~40 M trained during fine-tuning | 152 ms | A100 80 GB or H100 80 GB | 50 |
| GR00T N1.5 | ~3 B | 165 ms | A100 80 GB or H100 80 GB | 50 |
| Pi0.5 | ~3 B, PaliGemma backbone | 485 ms | A100 80 GB or H100 80 GB | 50 |
| SmolVLA | ~450 M | 245 ms | RTX 4090 or any 24 GB card | 30 |
| ACT | ~80 M | 20 ms | RTX 4090 or any 24 GB card | 50 |
485 ms per action step is roughly two fresh decisions per second. That is fine for a slow, forgiving pick-and-place and hopeless for catching something. Adding a public-internet round trip on top turns a working policy into a hesitant one. Remote inference on this platform is viable for slow pick-and-place, not for fast reactive motion, and it is worth saying that plainly before anyone builds a demo on the assumption that distance is free.
So there are two ways to get a faster robot. Buy the latency down with engineering that leaves the model alone, which is what action chunking and asynchronous execution do. Or make the model itself smaller. Distillation is the second route, and the interesting question is what you lose on the way.
What distillation means when the output is a trajectory
The original idea is old and simple. Hinton, Vinyals and Dean published Distilling the Knowledge in a Neural Network in March 2015: train a big model, then train a small model to match the big model's soft output distribution rather than the hard labels. The soft distribution carries information the labels do not, which is why the student can beat a small model trained on labels alone. Rusu and colleagues carried that into control later the same year with Policy Distillation, extracting DQN policies into smaller networks and consolidating several task-specific policies into one.
Robot policies broke the recipe in one specific way. A classifier emits a probability vector, and matching probability vectors is a well-posed target. A modern vision-language-action model emits a chunk of continuous joint targets, often through a diffusion or flow-matching head with its own internal iteration count. There is no single soft distribution to copy. So the field split into several different things that all get called distillation.
| Flavour | What the student copies | A published example | Reported result |
|---|---|---|---|
| Action distillation | The teacher's predicted action chunks, treated as labels | VLA-AD, arXiv 2605.16241 (15 May 2026): OpenVLA-7B teacher, 158M student | 44x smaller, 0.27 percent average relative gap on three LIBERO suites, 3.28x speedup, 12.5 Hz on an RTX 4090 |
| Step distillation | The endpoint of the teacher's denoising chain, in one step instead of many | One-Step Diffusion Policy (OneDP), arXiv 2410.21257 (28 Oct 2024), KL divergence along the diffusion chain | Action prediction from 1.5 Hz to 62 Hz, for 2 to 10 percent extra pre-training cost |
| Decode distillation | The teacher's autoregressive token sequence, several tokens per iteration | CEED-VLA, arXiv 2506.13725 (16 June 2025), consistency distillation plus early-exit decoding | More than 4x inference acceleration across baselines |
| Self-distillation | The model's own deeper computation path, routed adaptively | ActDistill, arXiv 2511.18082 (v1 Nov 2025, v3 Apr 2026) | Over 50 percent computation reduction, up to 1.67x speedup |
SmolVLA's flow-matching head runs a fixed num_steps = 10 at inference (lerobot 0.6.2, configuration_smolvla.py). Every one of those ten steps is a forward pass through the action expert. OneDP's result is that a distilled generator can collapse that chain to a single step and gain an order of magnitude in control rate. If your bottleneck is the denoiser rather than the backbone, shrinking the backbone is the wrong surgery.
Which loss, since there is no soft distribution to copy
Hinton's method has one specific ingredient: the temperature-softened output distribution. A robot policy's output is a chunk of joint targets, and there is no temperature knob on a joint angle. So in practice most people fall back to plain regression, and regression has a known pathology in imitation learning. If the teacher sometimes goes left and sometimes right around an obstacle, an L2 student learns the average, which goes straight into the obstacle. That is the same mode-averaging problem that pushed the field toward diffusion and flow-matching heads in the first place, and naive distillation reintroduces it through the back door.
The fixes are architectural rather than clever. Keep a generative head on the student so it can represent a distribution rather than a mean. Distil the teacher's whole chunk instead of only its first action, so multi-step structure survives. Or add supervision that is not an action at all, which is what VLA-AD does with task-phase anchors and multi-frame direction descriptions, and what its authors credit for making the student robust to the teacher's noisy gripper commands.
| Loss choice | What the student sees | When it works | What it costs |
|---|---|---|---|
| L1 or L2 on the next action | One joint-target vector per frame | The teacher is unimodal and the task has one right way | Mode averaging, and gripper chatter transfers straight through |
| L1 or L2 on the whole chunk | All 50 or 100 predicted steps | Cheapest option that matches SmolVLA and ACT geometry | Still averages, but over trajectories rather than points |
| Distribution matching along the diffusion chain | The teacher's denoiser, not just its samples | The teacher is a diffusion policy and you want one-step inference | Needs the teacher's internals; OneDP puts this at 2 to 10 percent extra pre-training cost |
| Consistency or trajectory-endpoint | The teacher's multi-step decode, collapsed | Autoregressive token VLAs | Error accumulation, which is why CEED-VLA adds mixed-label supervision |
| Semantic auxiliary signals | Phase labels and direction text from a separate VLM | You have a VLM available to label offline | An extra labelling pass, in exchange for the robustness VLA-AD reports |
Rusu and colleagues' 2015 paper did two things and the robotics community mostly remembers one. The first was compression: extract a policy into a smaller network. The second was consolidation: fold several task-specific policies into a single multi-task network. If you already have five ACT checkpoints for five tasks on the same arm, the second result is the one that applies to you, and it is a far better fit for distillation than shrinking one big VLA. Many teachers, one student, is also exactly the regime Apple's scaling law says favours distillation over training from scratch.
The numbers people actually published
It is worth putting the reported speedups next to each other, because they measure different things and the spread between them is the whole story. A 44x parameter reduction that buys 3.28x wall-clock speedup is a normal outcome, not a disappointing one. Parameters and milliseconds are only loosely coupled once you leave the same architecture family.
| System | Teacher | Student | Latency or rate | Source date |
|---|---|---|---|---|
| VLA-AD | OpenVLA-7B | 158 M | 12.5 Hz on an RTX 4090, 3.28x over the teacher | May 2026 |
| VLA-AD, second teacher | Pi0.5-4B | 158 M | Student beats the teacher on two LIBERO suites, within 0.53 percent on libero_goal | May 2026 |
| OneDP | Diffusion Policy | One-step generator | 1.5 Hz to 62 Hz | October 2024 |
| CEED-VLA | Autoregressive VLA baselines | Consistency model plus early exit | More than 4x | June 2025 |
| Gemini Robotics | Gemini Robotics-ER | Distilled cloud backbone plus on-robot decoder | Backbone under 160 ms, end to end about 250 ms, effective control 50 Hz | March 2025 |
| TinyVLA, not distilled | none | TinyVLA-1B trained directly | 14 ms per action on an A6000, against 292 ms for OpenVLA-7B | September 2024, v5 May 2025 |
The Gemini Robotics row is the one deployment-scale case with published latency. The report describes the backbone as a distilled version of Gemini Robotics-ER whose query-to-response latency was brought down from seconds to under 160 ms, then paired with a local action decoder on the robot so the end-to-end path from raw observation to action chunk is about 250 ms. Because the chunk contains many actions, the effective control frequency is 50 Hz. Note the shape of that: distillation handled the backbone, chunking handled the residual delay. Neither alone was enough.

What survives distillation, and what goes first
This is the part the abstracts skip. Success rate on a fixed benchmark suite is a poor proxy for what a policy is, because a benchmark suite holds the vocabulary, the objects and the camera fixed. Distillation preserves whatever the distillation data covered and quietly drops the rest.
Survives: the motion
Trajectory shape transfers well. If the teacher approaches from above, decelerates at three centimetres and closes the gripper over 200 ms, a student trained on enough of its chunks reproduces that. This is unsurprising. It is imitation learning with an unusually patient demonstrator that never gets tired and never mis-teleoperates. It is also why distillation is attractive for exactly one situation, which is when you already own a teacher that works and cannot afford to run it.
Goes first: language grounding
The TinyVLA failure analysis is the clearest published evidence. The authors compared TinyVLA-0.4B, TinyVLA-1.3B and a 3B variant across four tasks and counted failures by cause. The 0.4B model failed three times specifically by misinterpreting the instruction, which they attribute to the smaller VLM's limited language comprehension, and that failure class disappeared at 1.3B. Instruction following does not degrade smoothly with size. It works or it does not, and for the architectures they tested the threshold sat somewhere around a billion parameters.
The same effect shows up from the other side in the OpenVLA paper. RT-2-X scores higher on semantic generalization than OpenVLA, which the OpenVLA authors attribute to RT-2-X being co-fine-tuned with internet pretraining data rather than fine-tuned on robot data alone. Fine-tuning on actions costs you web knowledge. Distilling on actions costs more of it, because now the only signal reaching the student is joint angles.
Goes second: the teacher's mistakes get baked in
The VLA-AD authors report that phase-level supervision and multi-frame directional cues make their student less sensitive to noisy teacher actions, naming erroneous high-frequency gripper changes specifically. Read that backwards: plain action-only distillation is sensitive to them. Worse, a student trained offline on the teacher's actions only ever sees states the teacher visits. The moment the student's own small errors push the arm somewhere the teacher never went, there is no label there. This is the covariate-shift problem Ross, Gordon and Bagnell formalised in the DAgger paper in 2010, and it is why serious policy distillation collects data on-policy: run the student, let the teacher label what the student sees, repeat. Distil offline from one fixed rollout set and expect a policy that works and then drifts, which lands in the same bucket as a policy that only works in one setup.
- You can generate arbitrary amounts of labelled data without a human on the leader arm. The teacher never gets tired, never mislabels the task string and never drops an episode.
- The student inherits behaviour the teacher learned from data you no longer have. A 158M student distilled from OpenVLA-7B carries traces of 970k Open X-Embodiment demonstrations you never recorded.
- It targets the number that matters. VLA-AD reports 12.5 Hz on an RTX 4090 against a 7B teacher, which changes which tasks are physically possible, not just which are cheaper.
- Step distillation reports the same success rate at 62 Hz instead of 1.5 Hz for 2 to 10 percent extra pre-training cost, which is close to free.
- It composes with everything else. Gemini Robotics distilled the backbone and still needed a local decoder and action chunks to reach 50 Hz effective control.
- You need a teacher that already works. Distilling a mediocre policy gives you a fast mediocre policy, and it is harder to debug because now two models are wrong.
- Instruction following breaks before motion does. Below roughly a billion parameters, published failure analyses show misread instructions as a distinct failure class.
- Offline distillation inherits covariate shift. Without on-policy relabelling in the DAgger sense, the student has no supervision on the states its own errors produce.
- The tooling does not exist in LeRobot. As of version 0.6.2 there is no distillation trainer, no teacher-student loss and no
--teacher.pathflag. You write the loop yourself. - Apple's distillation scaling law says the economics only work under specific conditions, and a one-teacher-one-student project is usually not one of them.
- AY-Robots does not offer it. The training form fine-tunes one of five policies. There is no compress step.
Does it beat just training the small model directly?
This is the question that decides whether the whole exercise is worth a weekend, and there is a real answer. Busbridge and colleagues published Distillation Scaling Laws in February 2025, revised July 2025 for ICML. Their finding, stated in the abstract: in settings involving many students or an existing teacher, distillation outperforms supervised learning up to a compute level that scales predictably with student size. Conversely, if only one student is to be distilled and a teacher also requires training, supervised learning is generally preferable.
That is a language-model result, not a robotics result, so read it as a prior rather than a proof. But it matches what the VLA literature shows when you line the numbers up. The two most successful small VLAs were not distilled at all.
| Model | Params | Robot pretraining | LIBERO average | Meta-World average |
|---|---|---|---|---|
| Diffusion Policy | not stated | No | 72.4 | 10.5 |
| Octo | 0.09 B | Yes | 75.1 | not reported |
| OpenVLA | 7 B | Yes | 76.5 | not reported |
| TinyVLA | not stated in that table | No | not reported | 31.6 |
| Pi0, PaliGemma-3B init | 3 B | No | 71.8 | 50.5 |
| Pi0, robotics pretrained | 3.3 to 3.5 B | Yes | 86.0 | 47.9 |
| SmolVLA | 0.45 B | No | 87.3 | 57.3 |
Those figures are Table 2 of the SmolVLA paper (arXiv 2506.01844, June 2025), with the baselines taken from the OpenVLA and TinyVLA papers. A 450M model with no robotics pretraining beats a 7B model that saw 970k robot demonstrations. TinyVLA reaches 14 ms per action prediction on an A6000 against 292 ms for OpenVLA-7B, and its authors got there by starting from a small VLM rather than by shrinking a large one. Neither result required a teacher.
If your task is one SO-100 doing one thing, train the small model directly. ACT on SO-100 costs 1 to 3 USD per run and answers in 20 ms. SmolVLA on SO-100 costs the same and needs only 30 episodes rather than 50. Distillation earns its keep when you already have a teacher you cannot deploy, or when one teacher will feed many students, which is exactly the position Gemini Robotics is in and almost nobody else.
The manual path: distilling a teacher with LeRobot
LeRobot ships no distillation trainer, so the practical recipe is policy distillation in the Rusu sense done by hand: use the teacher as a labeller, write its actions into a LeRobot dataset, train the student on that with the ordinary trainer. Everything below is against lerobot 0.6.2 on main, checked 23 August 2026, which requires Python 3.12 or newer.
- 1Install the pieces you actually need
The
smolvlaextra pulls the SmolVLM2 backbone dependencies. Theasyncextra pulls the gRPC stack for the policy server, which you want later for measuring real control rates rather than benchmark numbers.bashgit clone https://github.com/huggingface/lerobot.git cd lerobot pip install -e ".[smolvla]" pip install -e ".[async]" python -c "import lerobot; print(lerobot.__version__)" - 2Measure the teacher before you distil it
Do this first. If the teacher is only twice too slow, chunking and asynchronous execution close the gap without touching a single weight and you can stop here. The LeRobot async docs put Pi0 at 14 GB of memory at inference time against roughly 2 GB for SmolVLA, which is usually a better predictor of your problem than the parameter count.
bashpython -m lerobot.async_inference.policy_server \ --host=127.0.0.1 \ --port=8080 # in a second terminal, drive the real arm against it python -m lerobot.async_inference.robot_client \ --server_address=127.0.0.1:8080 \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=follower_so100 \ --policy_type=smolvla \ --pretrained_name_or_path=lerobot/smolvla_base \ --policy_device=cuda \ --actions_per_chunk=50 \ --chunk_size_threshold=0.5 \ --debug_visualize_queue_size=True - 3Relabel a dataset with the teacher's actions
This is the distillation step, and it is about thirty lines. Load the teacher, walk your recorded frames, ask for a chunk per frame, write the chunk into a new dataset. Run the teacher on the GPU pod, not on the robot host. Doing this offline on existing recordings is the cheap version; doing it on states the student visits is the DAgger version and it is meaningfully better.
python# distil_relabel.py - lerobot 0.6.2 import torch from lerobot.datasets.lerobot_dataset import LeRobotDataset from lerobot.policies.smolvla.modeling_smolvla import SmolVLAPolicy teacher = SmolVLAPolicy.from_pretrained("lerobot/smolvla_base").to("cuda").eval() src = LeRobotDataset("<you>/pick_place_so100") rows = [] with torch.inference_mode(): for i in range(len(src)): frame = src[i] batch = {k: v.unsqueeze(0).to("cuda") for k, v in frame.items() if isinstance(v, torch.Tensor)} batch["task"] = [frame["task"]] chunk = teacher.predict_action_chunk(batch) # (1, chunk_size, action_dim) rows.append(chunk[0, 0].cpu()) # first action of the chunk # Write rows back out as the action column of a new LeRobotDataset, keeping the # original observations. That file is your student's training set. Keep the full # chunk instead of chunk[0] if the student uses the same chunk_size. - 4Train the student on the teacher's labels
Nothing exotic here. It is the ordinary trainer pointed at the relabelled dataset. The SmolVLA docs put 20k steps at roughly four hours on a single A100. Keep the student's chunk length equal to the teacher's, or the two disagree about what an action even is.
bashlerobot-train \ --policy.path=lerobot/smolvla_base \ --dataset.repo_id=${HF_USER}/pick_place_so100_distilled \ --batch_size=64 \ --steps=20000 \ --policy.chunk_size=50 \ --policy.n_action_steps=50 \ --output_dir=outputs/train/student \ --job_name=distil_student \ --policy.device=cuda \ --wandb.enable=true - 5Evaluate in Hz, not in loss
The whole point was latency, so the acceptance test is a wall clock. Roll the student out on the real arm and compare completion time against the teacher, not validation loss against the teacher. Real-time chunking is available as an inference-time option in the rollout script and needs no retraining.
bashlerobot-rollout \ --strategy.type=base \ --robot.type=so101_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_follower_arm \ --robot.cameras="{ front: {type: opencv, index_or_path: 8, width: 640, height: 480, fps: 30}}" \ --task="Grasp a lego block and put it in the bin." \ --inference.type=rtc \ --inference.rtc.execution_horizon=10 \ --inference.rtc.max_guidance_weight=10.0 \ --policy.path=${HF_USER}/student_smolvla
Two traps, both silent. First, teacher and student must agree on chunk geometry. SmolVLA defaults to chunk_size = 50 and n_action_steps = 50; ACT defaults to 100 and 100. Relabel with a 50-step teacher, train a 100-step student on the first action only, and you have thrown away most of the teacher's signal without a single error message. Second, dataset format. On AY-Robots a LeRobot v3.0 dataset crashes the GR00T loader and has to be converted down to v2.1, while Pi0.5, SmolVLA and ACT expect v3.0. A distillation pipeline that crosses that boundary needs the conversion in the middle, and the failure presents as a rejected dataset rather than as a version problem.
The distillation that already happened: SmolVLA's architecture
There is a fourth flavour that never gets called distillation and arguably should: designing the small model so it reuses a large model's weights without carrying its compute. SmolVLA does exactly this, and the config file is short enough to read in full.
# lerobot 0.6.2, src/lerobot/policies/smolvla/configuration_smolvla.py
vlm_model_name = "HuggingFaceTB/SmolVLM2-500M-Video-Instruct"
num_vlm_layers = 16 # keep only the FIRST 16 layers of the VLM
self_attn_every_n_layers = 2 # interleave cheap cross-attn with self-attn
attention_mode = "cross_attn"
num_steps = 10 # flow-matching steps at inference
chunk_size = 50
n_action_steps = 50
freeze_vision_encoder = True
train_expert_only = True # only the ~100M action expert learns
optimizer_lr = 1e-4The paper explains the reasoning. The vision encoder emits 64 visual tokens per frame using a pixel-shuffle operation on the global image only, with no tiling, because tiling costs inference time. The top half of the VLM is discarded outright rather than distilled, and the ablation says that beats the alternatives: keeping the first N layers scored better than sampling every second layer (75.5 average on LIBERO) and better than swapping in a genuinely smaller 256M VLM (75.8). Of the 450M total, roughly 100M is the action expert, and it is the only part that trains.

This is why the honest recommendation for most readers is to pick a smaller model rather than build one. Comparing ACT against SmolVLA or GR00T N1.7 against SmolVLA gets you the decision distillation would have given you, in an afternoon instead of a month, and with a checkpoint somebody else already validated.
Two ways to get a faster policy on an SO-100
You own the whole chain: teacher checkpoint, GPU, relabelling loop, student training, evaluation harness. Nothing here is exotic, but there are five separate places to get it wrong and none of them raise an exception.
- Record 50 or more episodes on the real arm with
lerobot-recordor the desktop client. The SmolVLA docs recommend about 50 and note that 25 episodes was not enough for their pick-and-place task. - Fine-tune the teacher until it actually works. A student distilled from a broken teacher is a fast broken policy.
- Write the relabelling loop and run it on a rented GPU. Budget for a second, on-policy pass if the first student drifts.
- Train the student with
lerobot-train, keeping chunk geometry identical to the teacher. - Measure the control rate on the real arm with
--debug_visualize_queue_size=Trueand tunechunk_size_threshold. The docs suggest 0.5 to 0.6 in practice against a default of 0.7.
The training runs are the cheap part. The expensive part is that you now maintain two models and an unversioned relabelling script, and every change to the teacher invalidates the student's dataset.
There is no distillation feature here and it would be dishonest to imply otherwise. What the platform does instead is remove the reason most people wanted one: it makes trying a smaller policy cheap enough that compressing a big one stops being attractive.
- Record on a real arm with the desktop client, or start from a public dataset in the directory or from a Hugging Face repo id.
- Train the same dataset on two policies from the training matrix, the big one and the small one. The backend rents a GPU by required VRAM and writes checkpoints to object storage.
- Serve both.
/api/inference/podprovisions a cloud GPU pod that serves the policy and the local robot client talks to that endpoint. Pods carry an idle watchdog and destroy themselves after an idle period, so nothing keeps billing silently. - Compare on the arm, not on a benchmark. Same task, same lighting, stopwatch. The run-your-first-policy walkthrough covers the rollout side.
- Drive the whole loop from the CLI or from an agent through the MCP server if you want it scripted.
GR00T N1.7, GR00T N1.5 and Pi0.5 are cloud-only here. If your conclusion is that you need the policy running next to the servos, that narrows you to SmolVLA and ACT, which also run locally. No amount of pod provisioning fixes a public-internet round trip inside a 20 ms control loop.
What it costs to answer the question empirically
Running the comparison is cheaper than reading about it. On the spot market a run on the A100 or H100 tier takes 3 to 6 hours at 1.20 to 2.00 USD per hour, so roughly 4 to 12 USD. A run on the RTX 4090 or 24 GB tier takes 2 to 5 hours at 0.30 to 0.60 USD per hour, so roughly 1 to 3 USD. Training the teacher, training the student and comparing them on the arm is a two-digit dollar experiment.

Note what that budget does not include: your relabelling pass. Distillation adds a full inference sweep over the dataset at teacher latency. At 485 ms per action step, a 50-episode dataset recorded at 30 fps with 60-second episodes is roughly 90,000 frames, which is over twelve GPU-hours of pure labelling before the student sees a single gradient. Batch it, but do not forget it exists when you compare against the cost of simply training the small model twice.
What to measure, in order
- Wall-clock time to complete the task on the real arm, teacher against student. The SmolVLA paper used exactly this: 9.7 seconds asynchronous against 13.75 seconds synchronous, about 30 percent faster, on the same policy.
- Successful cycles in a fixed window. Same paper, same task: 19 pick-and-place cycles asynchronous against 9 synchronous. This number moves far more than success rate does.
- Instruction following on held-out phrasings. This is the capability distillation costs you, so test it deliberately rather than hoping.
- Behaviour on states the teacher never visited. Nudge the object mid-episode. If the student freezes where the teacher recovered, you have a covariate-shift problem rather than a capacity problem, and the freeze has its own failure page.
- Memory at inference, not parameter count. LeRobot's async docs put Pi0 at 14 GB and SmolVLA at roughly 2 GB, which decides what hardware can sit next to the arm on your SO-100.
- Whether the loss fell while nothing moved. That combination has its own diagnosis, and distillation makes it more likely, because a student can match a teacher's mean action almost perfectly and still never close the gripper.
One last framing worth carrying around. VITA-VLA (arXiv 2510.09607, October 2025) runs distillation backwards: a small pretrained action model acts as the teacher and a large VLM as the student, with a lightweight alignment stage mapping the VLM's hidden states into the small model's action space. They report 97.3 percent average on LIBERO and 82.0 percent across five real tasks, 17 points above the teacher. Distillation is not a synonym for compression. It is a way of moving one specific competence between two networks, and the direction is a design decision. Related reading here: how VLAs are put together, why flow matching changed the action head, and the SO-100 setup guide if you do not have an arm to test any of this on yet. If you have no hardware at all, the queue-based live arm needs no signup.
Can I distil GR00T N1.7 into SmolVLA on AY-Robots?▾
Not as a feature. The training form fine-tunes one of five policies on a dataset; there is no teacher-student mode. You can do it by hand: train GR00T N1.7, use it to relabel a dataset, then train SmolVLA on the relabelled dataset with the ordinary trainer. Watch the dataset format boundary, because GR00T needs LeRobot v2.0 or v2.1 while SmolVLA expects v3.0.
Is distillation better than quantisation for latency?▾
Often no, and the OpenVLA paper has the cleanest data on it. Serving the 7B model in bfloat16 gave 71.3 percent on eight BridgeData V2 tasks at 16.8 GB of VRAM; int4 gave 71.9 percent at 7.0 GB. int8 gave only 58.1 percent, and the authors attribute that drop to speed rather than accuracy, since the quantised model could only run at 1.2 Hz on their A5000 against the 5 Hz controller used to record the data. Quantisation is a one-line change. Try it before you write a distillation pipeline.
How much accuracy should I expect to lose?▾
Published action-distillation results on LIBERO are close to lossless. VLA-AD reports a 0.27 percent average relative gap for a 44x parameter reduction, and with a Pi0.5-4B teacher the student beat the teacher on two of three suites. Treat those as a ceiling rather than an expectation. LIBERO holds the instruction set, objects and cameras fixed, which is precisely the regime where distillation looks best.
Do I need the teacher at inference time?▾
No, in every scheme discussed here. VLA-AD states explicitly that its auxiliary semantic signals are used only during training and that at test time the student policy runs independently, with neither the VLA teacher nor the supervising VLM required. That is the entire point: you pay the teacher once, offline.
Why does LeRobot not ship a distillation trainer?▾
As of version 0.6.2 it does not, and the reason is probably that the useful case is narrow. LeRobot ships small policies directly: ACT at roughly 80M and SmolVLA at 450M are already student-sized, and SmolVLA beats OpenVLA-7B on LIBERO without being distilled from anything. When the small model is competitive out of the box, a teacher-student pipeline is added complexity, which is the same conclusion Apple's distillation scaling law reaches for the single-student case.
What is the smallest policy that still follows language instructions?▾
There is no clean threshold, but the TinyVLA failure analysis is the closest published evidence: at 0.4B parameters three failures across their evaluation were caused by misread instructions, and that failure class disappeared at 1.3B. SmolVLA at 450M does follow instructions, so architecture and pretraining matter as much as raw size. If your task needs open-vocabulary instruction following, test it explicitly rather than assuming it scaled down along with everything else.
Five policies, one comparison table, real latency numbers
Before you build a teacher-student pipeline, check whether a smaller model already answers your question. GR00T N1.7, GR00T N1.5, Pi0.5, SmolVLA and ACT compared on parameters, GPU tier, inference latency per action step and minimum episode count.
Compare the policiesSources
- Hinton, Vinyals, Dean: Distilling the Knowledge in a Neural Network (March 2015)
- Rusu et al.: Policy Distillation (November 2015, revised January 2016)
- Ross, Gordon, Bagnell: A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning (DAgger)
- Busbridge et al.: Distillation Scaling Laws (February 2025, revised July 2025, ICML 2025)
- Wen et al.: TinyVLA, Towards Fast, Data-Efficient Vision-Language-Action Models (v1 September 2024, v5 May 2025)
- Shukor et al.: SmolVLA, a Vision-Language-Action Model for Affordable and Efficient Robotics (June 2025)
- Kim et al.: OpenVLA, an Open-Source Vision-Language-Action Model (June 2024)
- One-Step Diffusion Policy: Fast Visuomotor Policies via Diffusion Distillation (October 2024)
- Song et al.: CEED-VLA, Consistency Vision-Language-Action Model with Early-Exit Decoding (June 2025)
- VLA-AD: Offline Semantic Guidance for Efficient Vision-Language-Action Policy Distillation (May 2026)
- ActDistill: General Action-Guided Self-Derived Distillation for Efficient VLA Models (November 2025, revised April 2026)
- VITA-VLA: Efficiently Teaching Vision-Language Models to Act via Action Expert Distillation (October 2025)
- Gemini Robotics: Bringing AI into the Physical World (March 2025), distilled backbone and latency figures
- LeRobot documentation: fine-tuning SmolVLA, the lerobot-train and lerobot-rollout commands
- LeRobot documentation: asynchronous inference, policy server and robot client
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started