Overview
π0.5 is a vision-language-action (VLA) model from Physical Intelligence, jointly trained on robot demonstration data and large-scale multimodal data. It can perform long-horizon tasks in unseen real-world open environments and generalizes across them. This page focuses onws1, i.e. world_size=1 — a single rank with no distributed setup. Everything on this page targets this single-card configuration. The entry is PI05Scheduler.
Architecture
PhyAI’s decomposes pi0.5 inference into four cooperating components:phyai/src/phyai/models/pi05
main_pi05.py
scheduler_pi05.py
model_runner_pi05.py
modeling_pi05.py
configuration_pi05.py
img_preprocess_pi05.py
tokenization_pi05.py
scheduler.setup() and scheduler.step().
Running pi0.5
1
Get the weights
Prepare a
pi05_base safetensors checkpoint. You can download it from huggingface:2
Construct the engine
The plugin name is
"pi05". The engine handles setup, weight loading, and graph capture in one shot.max_batch_size fixes the captured-graph batch dimension. Pick based on the largest batch you’ll submit; smaller batches are padded internally.
3
Build a request
PI05Request carries the per-step inference inputs:B can be any value in [1, max_batch_size]. Build the tensors on the engine’s device; the scheduler validates shapes and raises immediately on mismatch.4
Step the engine
5
Close the engine
End-to-end example
examples/pi05/run_pi05.py exercises the full path with deterministic dummy inputs at max_batch_size ∈ {1, 4} and includes a multi-batch equivalence check. To run it:
PASS line for the equivalence check. Just change the path after --checkpoint to your local checkpoint path.
Training rollout integration
An external RL controller can request diffusion trajectories and replace the in-memory actor weights without rebuilding the engine. Initialize the engine from a complete checkpoint and constructPI05Args with capture_rollout=True. Training updates may then contain only the parameters selected by the controller.
The controller owns the update transaction:
weight_batch maps HuggingFace parameter names to tensors. Every completed update refreshes weight-dependent scheduler state and recaptures the rollout graph. rollout_step accepts PI05RolloutRequest and returns PI05RolloutOutput with actions, the denoising chain, per-transition log probabilities, and optional values. The request must provide sigmas; noise and step_noise are optional deterministic inputs and are sampled internally when omitted.
The RLinf BF16 integration uses the optional compatibility policy at examples/configs/kernel_policies/pi05/rlinf_bf16.yaml. Select it explicitly through the controller configuration or PHYAI_KERNEL_CONFIG; PI0.5 does not load this policy by default.
Current limitations
- Single GPU only. Tensor parallel, continuous batching, and preemption are all out of scope for
PI05Scheduler. max_batch_sizeis fixed at engine construction. To change it, you must tear down and rebuild the engine.- The vision tower replays sequentially per real robot — it doesn’t batch along the camera dimension.

