pi0.5 clean50 β inference model
A custom pi0.5 robot policy fine-tuned for 30,000 steps with four action experts and top-1 routing. The package is intended for inference and evaluation, not exact resumption of the original training run.
Model overview
| Item | Value |
|---|---|
| Parameter set | EMA, decay 0.99 |
| Backbone | PaliGemma / Gemma 2B |
| Action expert | Gemma 300M variant, four experts, top-1 routing |
| Checkpoint format | OpenPI JAX / Orbax / Zarr |
| Input cameras | Main view, left wrist, right wrist |
| Robot state | 14 values: two sets of six joints and one gripper |
| Language input | An explicit task instruction |
| Output | 50 actions, each with 14 values |
| Internal action dimension | 32 |
| Maximum token length | 200 |
This is not a Transformers AutoModel or safetensors package. Use the matching runtime implementation included here.
Package contents
params/: EMA parameters and their required metadata.assets/robotwin_clean50_lerobot_v30/norm_stats.json: normalization statistics.code/: selected model, preprocessing and client modules.load_policy.pyandinference_config.json: inference entry point and portable configuration.- Pinned dependencies, checksums, training summary and third-party notices.
Optimizer state, training examples, training videos and raw experiment logs are not included.
Tokenizer
The compatible tokenizer is included at cache/openpi/big_vision/paligemma_tokenizer.model. The inference entry point uses this local asset. No separate tokenizer download or vocabulary modification is required.
Only the nonfunctional trainer_spec.model_prefix provenance field has been cleared from the release copy to remove a machine-specific path. All 257,152 vocabulary entries, their token IDs and scores, normalization settings, and all other protobuf fields are unchanged. A total of 524 encode/decode comparisons matched the original. Ordinary words and named entities in the inherited vocabulary are preserved.
Environment
Use a separate Python 3.12 environment. Install CPU-only PyTorch and torchvision first, followed by the pinned inference dependencies and matching CUDA user-space libraries. Select one visible GPU before importing JAX. Installation into a fresh inference-only Python 3.12 environment and pip dependency checks passed. The exact installed versions are recorded in requirements-runtime-lock.txt.
Create the isolated environment from the downloaded repository directory:
python3.12 -m venv .venv
.venv/bin/python -m pip install "torch==2.8.0+cpu" "torchvision==0.23.0+cpu" --index-url https://download.pytorch.org/whl/cpu
.venv/bin/python -m pip install -r requirements-inference.txt -r requirements-cuda.txt -c requirements-runtime-lock.txt
.venv/bin/python -m pip check
A compatible NVIDIA driver is required separately. Runtime libraries are installed into the virtual environment; these commands do not install or replace a system driver.
Python usage
After downloading the complete repository and installing its dependencies, the following synthetic example demonstrates the interface:
import os
import numpy as np
os.environ.setdefault("CUDA_VISIBLE_DEVICES", "0")
from load_policy import load_policy
policy = load_policy()
observation = {
"images": {
"cam_high": np.zeros((3, 240, 320), dtype=np.uint8),
"cam_left_wrist": np.zeros((3, 240, 320), dtype=np.uint8),
"cam_right_wrist": np.zeros((3, 240, 320), dtype=np.uint8),
},
"state": np.zeros(14, dtype=np.float32),
"prompt": "Place the object on the table.",
}
result = policy.infer(observation)
assert result["actions"].shape == (50, 14)
These synthetic observations illustrate the interface; they are not valid commands for a physical robot. The preprocessing uses quantile normalization, joint-relative actions, absolute gripper values and adapt_to_pi=False. Output postprocessing reconstructs absolute joint targets.
Validation and limitations
- The training run completed 30,000 steps. The source final checkpoint passed full-array readability and finite-value checks.
- Selected runtime imports and synthetic preprocessing/postprocessing are checked against the original pipeline on CPU.
- The bundled tokenizer uses the original runtime implementation. Its metadata-only redaction does not alter tokenization rules.
- The full model was restored in a fresh inference-only environment and two synthetic single-GPU inference calls passed. Both outputs had shape (50, 14), float64 dtype after postprocessing, and finite values. See inference_validation.json. This is a functional smoke test, not a performance benchmark.
- No RoboTwin simulation success rate or physical-robot evaluation is reported. Training losses and router-label accuracy are not task success rates.
- Preserve all required array metadata, including hidden
.zarrayfiles. Logical sharding dimensions are technical model metadata, not a guarantee of an inference hardware requirement. - Validate in simulation and apply independent safety limits before any physical actuation.
Training metrics
The last regular logging window, at zero-based step 29,900, recorded total loss 0.0015 and action loss 0.0003. These are training-window metrics, not an independent evaluation. Additional method details are in training_summary.json.
Sources and third-party notices
Source bundle: yz221840196/kinrt_clean50, revision 2c735959517b7e8cfd7f1f648f93a35db3c0b745.
Base checkpoint: gs://openpi-assets/checkpoints/pi05_base/params.
Original code notices are retained in source headers and LICENSES/. Code licenses do not by themselves establish the terms for all model weights or the tokenizer. Review the applicable upstream terms before redistribution; no blanket model license is assigned here.