Drift-VLA: Direct One‑Step VLA Action Generation via Action‑Dimension Drifting
One-step actions that match iterative flow matching, for faster, more reactive robot policies.
TL;DR
Drift-VLA trains the action expert of a VLA policy with a one-step drifting objective instead of iterative flow matching. Same backbone, same data, no distillation: a single expert pass matches the multi-step sampler, verified in simulation and on a real robot across different VLA backbones, with faster, more reactive inference.
| Backbone · method | NFE | Spatial | Object | Goal | Long | Avg4 suites | Latencyms / chunk |
|---|---|---|---|---|---|---|---|
| SmolVLA-FM (10 steps) | 10 | 94.1 | 83.9 | 87.5 | 74.0 | 84.9 | 222.6 |
| Drift-VLA (ours) | 1 | 94.4 | 92.5 | 89.2 | 74.3 | 87.6 | 50.6 |
| Pi0.5-FM (10 steps) | 10 | 98.5 | 99.1 | 96.7 | 93.3 | 96.9 | 259.8 |
| Drift-Pi0.5 (ours) | 1 | 97.9 | 99.0 | 98.1 | 94.7 | 97.4 | 85.6 |
LIBERO, 50 episodes/task, n=3 eval seeds; full-finetune @100k, each model at its native replan cadence. Drift’s Object win on SmolVLA (+8.6) and Goal/Long edge on Pi0.5 (+1.4 each) are the gaps; the near-saturated suites tie — at one-tenth the decode passes.
Why one-step matters
Closed-loop control means replanning: decode a fresh 50-action chunk from the latest observation, execute only its first steps, repeat. Every replan pays the full decode — 10 expert passes for flow matching, one for drifting — so decode latency bounds how tightly the policy can stay in the loop.
Where the decode time goes: both methods pay the VLM prefix once; the repeated action-expert calls are what drifting removes. What latency costs is blind execution — actions consumed from the old chunk while the new one decodes. At LIBERO’s 10 Hz control rate that is ~2 stale actions per replan for 10-step FM vs under one for Drift; at a real robot’s 30 Hz (LeKiwi-class collection rate) it grows to ~7 vs ~1.5.
Two Action Samplers
Same observation context, same action chunk. The difference is how the action expert is trained and sampled.
Flow matching
Learns a velocity field. Inference integrates it over multiple solver steps, so higher quality means repeated action-expert evaluations.
Drifting
Trains the generator directly. Inference is one forward pass of the action expert: no solver loop and no distillation.
Training signal
Method
Only the action expert objective changes. The backbone, observations, action chunks, and data stay fixed.
The winning loss is action-dimension drift: each real action dimension’s chunk trajectory is matched separately.
Learn a velocity field; sample by integrating multiple expert steps.
Train the generator directly; sample the full chunk in one expert pass.
Results
SmolVLA (450M)
Two training regimes, same verdict: one-step Drift ties ten-step FM on LIBERO-Spatial, and leads on the 4-suite average.
Expert-only (frozen VLM)
- Drift (1 NFE)
- 90.8 ±2.2%
- FM (10 NFE)
- 90.2 ±2.2%
- Verdict
- tie
Full finetune
- Drift (1 NFE)
- 94.2 ±2.3%
- FM (10 NFE)
- 94.3 ±0.8%
- Verdict
- tie, at 1/10th the passes
Full finetune + KeyStone
- Success
- 96.8 ±1.3%
- Sampling
- 8×1, one batched pass
- Extra cost
- ≈ +1 expert pass
One-step Drift ties ten-step FM in both training regimes (LIBERO-Spatial, 3 seeds) while decoding 4.4× faster. KeyStone adds a small, within-noise lift for roughly one extra expert pass.
| SmolVLA (450M) · all four suites | NFE | Spatial | Object | Goal | Long | Avg |
|---|---|---|---|---|---|---|
| FM (10 steps) | 10 | 94.1 ±0.2 | 83.9 ±1.1 | 87.5 ±0.6 | 74.0 ±1.6 | 84.9 ±0.5 |
| Drift-VLA | 1 | 94.4 ±1.0 | 92.5 ±0.7 | 89.2 ±0.8 | 74.3 ±0.7 | 87.6 ±0.2 |
| Drift-VLA + KeyStone | 8×1 | 96.1 ±0.2 | 93.6 ±0.3 | 89.3 ±0.8 | 72.7 ±1.5 | 87.9 ±0.6 |
Best full-finetune arm per method; 50 episodes/task × 3 eval seeds, closed-loop replanning. Drift decodes at 50.6 vs 222.6 ms/chunk. The Object gap (+8.6) is seed-robust; KeyStone helps the short-horizon suites but not Long.
Same recipe on Pi0.5
The identical drifting objective, hyperparameters included, ports to Pi0.5 (3.3B) as a three-file patch — and the absolute numbers get stronger: 97.4 across all four suites at 1 NFE, ahead of 10-step FM (96.9), with the edge concentrated on the harder Goal and Long suites. Drift stays ahead at every training budget across the 25k–100k sweep (peak 97.7 at 75k) and reaches FM’s 100k quality by ~30k steps.
| Pi0.5 (3.3B) · all four suites | NFE | Spatial | Object | Goal | Long | Avg |
|---|---|---|---|---|---|---|
| FM (10 steps) | 10 | 98.5 ±0.3 | 99.1 ±0.6 | 96.7 ±0.5 | 93.3 ±0.7 | 96.9 ±0.1 |
| Drift-Pi0.5 | 1 | 97.9 ±1.0 | 99.0 ±0.2 | 98.1 ±0.4 | 94.7 ±1.8 | 97.4 ±0.4 |
| Drift-Pi0.5 + KeyStone | 8×1 | 98.3 ±0.6 | 99.7 ±0.2 | 97.1 ±0.9 | 95.4 ±0.4 | 97.6 |
Full finetune @100k; 50 episodes/task × 3 eval seeds, Pi0.5-native cadence. Drift leads the four-suite average (97.4 vs 96.9) with its edge on the harder suites (Goal +1.4, Long +1.4); the near-saturated Spatial/Object tie. KeyStone (K=8, C=2) lifts the average to 97.6. Decode: 85.6 vs 259.8 ms/chunk.
In a separate matched-budget study (both arms @10k), the edge also grows as adaptation capacity shrinks — the less the backbone can adapt, the more the one-step objective matters:
LIBERO-Spatial, n=3 eval seeds, same LIBERO-adapted VLM. FM needs full finetuning to approach Drift; expert-only FM falls behind fast.
| Pi0.5, 4-suite average | Full finetune | Expert-only (frozen 3B VLM) | Δ |
|---|---|---|---|
| Drift (1 NFE) | 96.3 ±0.1 | 96.3 ±0.5 | ±0.0 |
| FM (10 NFE) | 93.1 ±0.5 | 85.7 ±0.6 | −7.4 |
One training seed per arm (evaluations are 3-seed); matched budgets, objective flags the only difference.
KeyStone: test-time selection
One-step sampling makes best-of-K nearly free: K chunks ride one batched expert pass off the shared prefix. KeyStone executes the consensus candidate.
Real-World Shopping Rollouts
Representative LeKiwi rollouts across three shop items. Drift-VLA + KeyStone is shown beside the flow-matching baselines under the same task framing.
Matcha tin
Drift-VLA + KeyStone 1 NFE
SmolVLA-FM 10 NFE
SmolVLA-FM 1 NFE
Salt bottle
Drift-VLA + KeyStone 1 NFE
SmolVLA-FM 10 NFE
SmolVLA-FM 1 NFE
Chocolate bar
Drift-VLA + KeyStone 1 NFE
SmolVLA-FM 10 NFE
SmolVLA-FM 1 NFE
What makes Drift work
The two ablations that decide the recipe. First, the drift grouping — what owns a distance ruler in the drift kernel:
| Drift grouping | SR @20k (%) | SR @30k (%) |
|---|---|---|
|
Action-dimension drift
one matching unit per action dimension’s chunk trajectory
|
89.0 ±1.4 | 90.2 ±1.3 |
|
Chunk-level drift
joint matching over the complete action chunk
|
86.5 ±2.1 | 77.8 ±2.0 |
|
Timestep drift
per-timestep matching with 8 sibling samples
|
78.5 ° | 79.0 ° |
|
FM baseline (10 steps, reference)
stock flow matching, same setup
|
89.5 ±2.6 | 90.2 ±2.2 |
SmolVLA expert-only, LIBERO-Spatial, 3 eval seeds (° single seed). Action dimensions carry heterogeneous units (position vs gripper); giving each its own distance scale is what closes the gap to FM — only action-dimension drift reaches it at 1 NFE.
Second, numerical precision: the drift field is built from pairwise distances, and bf16 autocast silently corrupts it. Computing the drift goal in fp32 (one guard, no speed cost) is worth up to +8.2 points:
| Drift grouping | bf16 goal (%) | fp32 goal (%) | Δ |
|---|---|---|---|
Chunk-level drift @20k |
78.3 | 86.5 | +8.2 |
Action-dimension drift @30k |
89.0 ° | 90.2 | +1.2 |
Identical code otherwise; 3 eval seeds (° single seed). The remaining ablations — sample count G, temperatures, 14 kernel variants (none beats the canonical kernel), KeyStone settings, replan cadence — are in the paper.
LIBERO Rollouts
Three LIBERO-Spatial cases: the best Drift-VLA setup succeeds, while the comparison variants fail on the same tasks.
Case A
Drift-VLA + KeyStone success
SmolVLA-FM (10 steps) failure
Timestep drift (4 samples) failure
Case B
Drift-VLA + KeyStone success
SmolVLA-FM (10 steps) failure
Timestep drift (4 samples) failure
Case C
Drift-VLA + KeyStone success
SmolVLA-FM (10 steps) failure
Timestep drift (4 samples) failure
References
Citation
@misc{zuo2026driftvla,
title = {Drift-VLA: Direct One-Step VLA Action Generation via Action-Dimension Drifting},
author = {Zuo, Xingdong},
year = {2026},
url = {https://zuoxingdong.github.io/drift-vla/}
}