The AY-Robots policies comparison table with the five trainable policies side by side, showing parameter counts, GPU tier and inference latency per action step
distillationvlainference-latencysmolvlamodel-compression

Distilling a Large Robot Policy Into a Small One: What Survives

AY-Robots ResearchAugust 23, 202624 min read

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.

PolicyParamsInference per action stepGPU tierMin episodes
GR00T N1.7~3 B, of which ~40 M trained during fine-tuning152 msA100 80 GB or H100 80 GB50
GR00T N1.5~3 B165 msA100 80 GB or H100 80 GB50
Pi0.5~3 B, PaliGemma backbone485 msA100 80 GB or H100 80 GB50
SmolVLA~450 M245 msRTX 4090 or any 24 GB card30
ACT~80 M20 msRTX 4090 or any 24 GB card50
Latency is a system property, not a model property

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.

FlavourWhat the student copiesA published exampleReported result
Action distillationThe teacher's predicted action chunks, treated as labelsVLA-AD, arXiv 2605.16241 (15 May 2026): OpenVLA-7B teacher, 158M student44x smaller, 0.27 percent average relative gap on three LIBERO suites, 3.28x speedup, 12.5 Hz on an RTX 4090
Step distillationThe endpoint of the teacher's denoising chain, in one step instead of manyOne-Step Diffusion Policy (OneDP), arXiv 2410.21257 (28 Oct 2024), KL divergence along the diffusion chainAction prediction from 1.5 Hz to 62 Hz, for 2 to 10 percent extra pre-training cost
Decode distillationThe teacher's autoregressive token sequence, several tokens per iterationCEED-VLA, arXiv 2506.13725 (16 June 2025), consistency distillation plus early-exit decodingMore than 4x inference acceleration across baselines
Self-distillationThe model's own deeper computation path, routed adaptivelyActDistill, arXiv 2511.18082 (v1 Nov 2025, v3 Apr 2026)Over 50 percent computation reduction, up to 1.67x speedup
Step distillation is the cheapest win and it gets the least attention

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 choiceWhat the student seesWhen it worksWhat it costs
L1 or L2 on the next actionOne joint-target vector per frameThe teacher is unimodal and the task has one right wayMode averaging, and gripper chatter transfers straight through
L1 or L2 on the whole chunkAll 50 or 100 predicted stepsCheapest option that matches SmolVLA and ACT geometryStill averages, but over trajectories rather than points
Distribution matching along the diffusion chainThe teacher's denoiser, not just its samplesThe teacher is a diffusion policy and you want one-step inferenceNeeds the teacher's internals; OneDP puts this at 2 to 10 percent extra pre-training cost
Consistency or trajectory-endpointThe teacher's multi-step decode, collapsedAutoregressive token VLAsError accumulation, which is why CEED-VLA adds mixed-label supervision
Semantic auxiliary signalsPhase labels and direction text from a separate VLMYou have a VLM available to label offlineAn extra labelling pass, in exchange for the robustness VLA-AD reports
The forgotten half of Policy Distillation

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.

SystemTeacherStudentLatency or rateSource date
VLA-ADOpenVLA-7B158 M12.5 Hz on an RTX 4090, 3.28x over the teacherMay 2026
VLA-AD, second teacherPi0.5-4B158 MStudent beats the teacher on two LIBERO suites, within 0.53 percent on libero_goalMay 2026
OneDPDiffusion PolicyOne-step generator1.5 Hz to 62 HzOctober 2024
CEED-VLAAutoregressive VLA baselinesConsistency model plus early exitMore than 4xJune 2025
Gemini RoboticsGemini Robotics-ERDistilled cloud backbone plus on-robot decoderBackbone under 160 ms, end to end about 250 ms, effective control 50 HzMarch 2025
TinyVLA, not distillednoneTinyVLA-1B trained directly14 ms per action on an A6000, against 292 ms for OpenVLA-7BSeptember 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.

The AY-Robots arena leaderboard, a sortable table of 85 vision-language-action models with 332 benchmark results, each figure linked to its source paper or model card
The /arena leaderboard collects 85 VLA models and 332 benchmark results with every value linked to its paper or model card. It is the fastest way to check whether a distilled variant reports its own numbers or quietly borrows the teacher's.

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

Your student learns the teacher's twitch, and then it learns its own

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.

Distilling a working teacher into a small student
Advantages
  • 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.
Trade-offs
  • 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.path flag. 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.

ModelParamsRobot pretrainingLIBERO averageMeta-World average
Diffusion Policynot statedNo72.410.5
Octo0.09 BYes75.1not reported
OpenVLA7 BYes76.5not reported
TinyVLAnot stated in that tableNonot reported31.6
Pi0, PaliGemma-3B init3 BNo71.850.5
Pi0, robotics pretrained3.3 to 3.5 BYes86.047.9
SmolVLA0.45 BNo87.357.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.

The honest default

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.

  1. 1
    Install the pieces you actually need

    The smolvla extra pulls the SmolVLM2 backbone dependencies. The async extra pulls the gRPC stack for the policy server, which you want later for measuring real control rates rather than benchmark numbers.

    bash
    git clone https://github.com/huggingface/lerobot.git
    cd lerobot
    pip install -e ".[smolvla]"
    pip install -e ".[async]"
    python -c "import lerobot; print(lerobot.__version__)"
  2. 2
    Measure 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.

    bash
    python -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
  3. 3
    Relabel 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.
  4. 4
    Train 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.

    bash
    lerobot-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
  5. 5
    Evaluate 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.

    bash
    lerobot-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
The mismatch that eats a day: chunk length and dataset version

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.

python
# 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-4
The defaults that make SmolVLA small. Not compression after the fact, but truncation before training.

The 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.

The AY-Robots policies comparison table showing GR00T N1.7, GR00T N1.5, Pi0.5, SmolVLA and ACT side by side with parameter counts, GPU tier, inference latency and minimum episode count
The /policies comparison table. The latency column is the one to read first if you were thinking about distillation: the range from 20 ms to 485 ms is already available without training anything unusual.

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.

  1. Record 50 or more episodes on the real arm with lerobot-record or the desktop client. The SmolVLA docs recommend about 50 and note that 25 episodes was not enough for their pick-and-place task.
  2. Fine-tune the teacher until it actually works. A student distilled from a broken teacher is a fast broken policy.
  3. Write the relabelling loop and run it on a rented GPU. Budget for a second, on-policy pass if the first student drifts.
  4. Train the student with lerobot-train, keeping chunk geometry identical to the teacher.
  5. Measure the control rate on the real arm with --debug_visualize_queue_size=True and tune chunk_size_threshold. The docs suggest 0.5 to 0.6 in practice against a default of 0.7.
What this costs you in time

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.

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.

The AY-Robots cost table showing which GPU card each of the five policies needs, typical run time, price per run and how many episodes are required before a policy becomes useful
The cost table on /try. The gap between 4 to 12 USD and 1 to 3 USD per run is the real economic argument for a smaller policy, and it is an argument you can settle in one afternoon.

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

  1. 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.
  2. 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.
  3. Instruction following on held-out phrasings. This is the capability distillation costs you, so test it deliberately rather than hoping.
  4. 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.
  5. 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.
  6. 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 policies

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started