Scope
Validation narrows along the inference path. Compare the final action chunks under matched inputs and noise. A mismatch calls for a layer dump from the same payload; latency and task success come after the numerical path agrees.Experimental setup
Keep every run in the same workspace and use local model assets. From/phyai_workspace, confirm that the two checkpoints and tokenizer are available:
cuda:0. The benchmark and comparison tools use that logical device throughout the run.
Action alignment
Action alignment holds the inputs, prompt tokens, and denoising noise fixed, leaving the two model implementations as the variable. The live comparator loads LeRobot from the active environment or--lerobot-root.
--lerobot-root. Use --language-inputs fixed to take tokenization out of the comparison. The model path runs in bfloat16 with FlashInfer; --vision-dtype float32 changes only the PhyAI vision tower through PI0Args.vision_params_dtype.
Record these JSON fields:
The LeRobot timer wraps
predict_action_chunk, not select_action. Queue hits never produce a new action chunk, so they are left out. Tokenization also runs before the timer starts.
Layer-level diagnosis
If the action chunks disagree, keep the original inputs.--save-output writes the processed batch, prompt tensors, shared noise, reference actions, runtime outputs, and their difference to one .pt file. The dump tool reuses that file to compare both runtimes in one process:
For each stage, the report shows cosine similarity, absolute error, RMSE, and tensor norms. The first cosine value below
--threshold is labeled FIRST DIVERGENCE.
When equal-rank tensors have different lengths,
[shape-clipped] means the tool cropped them to their common minimum shape. This usually happens because LeRobot keeps the padded language length while the PhyAI dump stores the effective prefix. Final action and denoising-step tensors should still have matching shapes.Engine latency
Once the numerical path agrees, measure the PhyAI scheduler on its own with CUDA graph replay:Engine.step: vision, language prefix, expert denoising, and CUDA graph replay. Tokenization and environment steps stay outside the measurement.
LIBERO evaluation
LIBERO evaluation puts the model back inside the simulator, with preprocessing and action execution in the loop. Use the LIBERO-finetuned checkpoint here and keep the base checkpoint for numerical alignment. LeRobot:--task-ids, the script walks through the entire suite. Ten episodes for each libero_object task produce 100 episodes in total. To check the pipeline before a full run, add --task-ids "[0]" --n-episodes 1.
Reporting requirements
Store the run context beside every result. For numerical alignment and latency, record the GPU, visible device, checkpoint, input mode, dtype, batch size, CUDA graph state,num_steps, warmup count, timed count, and PhyAI vision dtype. Note whether preprocessing or tokenization was timed.
For LIBERO, add the suite, episode count, and video setting. pc_success follows LeRobot’s 0 to 100 percentage scale.

