Twelve FP16 ONNX graphs derived from
lerobot/xvla-base, traced with LeRobot 0.6.1.
Unmodified base weights — a starting point to fine-tune your own robot on, not a policy that
drives anything as it stands. Split into twelve so each TensorRT engine builds within an
8 GB Jetson Orin Nano.
Shapes are static in the graphs, so changing one means re-exporting: 3 image-view slots at
50 tokens each, 50-token language budget, 30-action chunk, 10 denoise steps, 20-dim state
and action in ee6d. All three view slots are exported valid, which is what keeps this
general — a 1- or 2-camera robot zero-pads the rest at no cost.
| file | what |
|---|---|
vision_0..3.onnx | DaViT vision tower |
text_encoder_0..2.onnx | Florence-2 text encoder |
cond.onnx | conditioning assembly |
denoise_0..3.onnx | policy transformer, 24 blocks as 6+6+6+6 |
bundle.json | graph inputs/outputs and the shapes above |
MANIFEST.sha256 | SHA-256 of every graph and of bundle.json |
tokenizer/ | facebook/bart-large @ cb48c1365bd826bd521f650dc2e0940aee54720c — the text encoder takes token ids |
Pinned clocks (MAXN_SUPER), JetPack R39.2.1, all three view slots fed a deterministic procedural scene, FP16, ONNX Runtime 1.24.0 on TensorRT 10.16.2.10 — all twelve graphs on TensorRT:
| p50 | p95 | rate | resident |
|---|---|---|---|
| 415.94 ms | 418.01 ms | 2.40 Hz | 4741 MB |
Denoising is 295.5 ms of that and vision 111.8 ms.
Export-time CPU parity measured cosine 0.999993 for actions. There is no on-device cross-backend measurement yet: the PyTorch reference harness hits a sequence-length mismatch before inference. Treat the export-time figure as supporting evidence until that audit is complete.
The latency row above also comes from the procedural observation source rather than camera frames — sound for timing, since the transformer does the same work whatever the pixels are, but it says nothing about predicted action values.
Runtime, limitations, and reproducible benchmark: jetson-orin-nano-vla.
5 commits
Twelve FP16 ONNX graphs derived from
lerobot/xvla-base, traced with LeRobot 0.6.1.
Unmodified base weights — a starting point to fine-tune your own robot on, not a policy that
drives anything as it stands. Split into twelve so each TensorRT engine builds within an
8 GB Jetson Orin Nano.
Shapes are static in the graphs, so changing one means re-exporting: 3 image-view slots at
50 tokens each, 50-token language budget, 30-action chunk, 10 denoise steps, 20-dim state
and action in ee6d. All three view slots are exported valid, which is what keeps this
general — a 1- or 2-camera robot zero-pads the rest at no cost.
| file | what |
|---|---|
vision_0..3.onnx | DaViT vision tower |
text_encoder_0..2.onnx | Florence-2 text encoder |
cond.onnx | conditioning assembly |
denoise_0..3.onnx | policy transformer, 24 blocks as 6+6+6+6 |
bundle.json | graph inputs/outputs and the shapes above |
MANIFEST.sha256 | SHA-256 of every graph and of bundle.json |
tokenizer/ | facebook/bart-large @ cb48c1365bd826bd521f650dc2e0940aee54720c — the text encoder takes token ids |
Pinned clocks (MAXN_SUPER), JetPack R39.2.1, all three view slots fed a deterministic procedural scene, FP16, ONNX Runtime 1.24.0 on TensorRT 10.16.2.10 — all twelve graphs on TensorRT:
| p50 | p95 | rate | resident |
|---|---|---|---|
| 415.94 ms | 418.01 ms | 2.40 Hz | 4741 MB |
Denoising is 295.5 ms of that and vision 111.8 ms.
Export-time CPU parity measured cosine 0.999993 for actions. There is no on-device cross-backend measurement yet: the PyTorch reference harness hits a sequence-length mismatch before inference. Treat the export-time figure as supporting evidence until that audit is complete.
The latency row above also comes from the procedural observation source rather than camera frames — sound for timing, since the transformer does the same work whatever the pixels are, but it says nothing about predicted action values.
Runtime, limitations, and reproducible benchmark: jetson-orin-nano-vla.
5 commits