
Pi0 and Pi0.5 share a backbone and an action expert. What changed is the gradient path, the tokeniser and the data mixture. Here is the diff, and what you actually get.
The short version
- •Same bones: a PaliGemma 3 B backbone, a 300 M action expert, a chunk of H = 50 and 10 denoising steps at inference.
- •The architectural change in Pi0.5 is a stop-gradient. The action expert no longer pushes its gradients back into the backbone.
- •The backbone learns motor representations from FAST discrete action tokens instead, with a plain next-token loss. That is knowledge insulation.
- •The knowledge insulation paper reports flow-matching-only Pi0 needing 7.5 times as many training steps for similar performance, at the same inference cost.
- •The rest of Pi0.5 is data: about 400 hours of mobile manipulator demonstrations across about 100 home environments, co-trained with web captioning, question answering, object localisation and subtask labels.
- •openpi and lerobot both ship the flow-matching head only, without subtask prediction, action tokenization or RL. That is less than the paper describes.
- •For one arm on one desk, train Pi0.5. Pi0 is worth reading.
What actually changed, in one paragraph
Pi0 and Pi0.5 look like a version bump and are not. The Pi0 paper (arXiv 2410.24164, v1 posted 31 October 2024) introduced a vision-language-action model that bolts a continuous action expert onto a pretrained VLM and trains the whole thing with flow matching. The Pi0.5 paper (arXiv 2504.16054, 22 April 2025) keeps that architecture almost unchanged and rewrites how it is trained. The action expert's gradients are cut off from the backbone, the backbone learns from discretised action tokens instead, and the training mixture grows to include web data and subtask labels. The claimed payoff is not dexterity. It is generalisation to environments the robot has never seen.
This article separates three things that get blurred together: what the papers changed, what the open implementations ship, and what you get when you press train on your own LeRobot dataset. Those answers differ, and the gap is the useful part. The VLA overview and the older Pi0 flow-matching write-up cover the ground this one assumes.
| Property | Pi0 | Pi0.5 |
|---|---|---|
| Backbone | PaliGemma, 3 B | PaliGemma, 3 B |
| Action expert | 300 M, from scratch | 300 M, from scratch |
| Released checkpoint size | 3,501,372,176 params (lerobot/pi0_base) | 3,616,757,520 params (lerobot/pi05_base) |
| Action chunk H | 50 | 50 |
| Denoising steps at inference | 10 | 10 |
| How the backbone learns actions | flow-matching gradients pass through | FAST discrete action tokens, next-token loss |
| Expert gradients reach the backbone | yes | no, stop-gradient |
| Robot state seen by the backbone | continuous | discretised into 256 bins, written into the prompt |
| lerobot normalisation default | MEAN_STD | QUANTILES (q01 / q99) |
| lerobot tokenizer_max_length | 48 | 200 |
| lerobot policy type | pi0 | pi05 |
| High-level subtask prediction | no | in the paper, not in the open releases |
Pi0, briefly, because Pi0.5 is a diff against it
Pi0 takes PaliGemma, a 3 billion parameter open vision-language model, and adds "300M parameters for the action expert (which is initialized from scratch) for a total of 3.3 billion parameters". The expert emits a chunk of H = 50 future actions at once, which is ordinary action chunking, produced by integrating a flow field over 10 steps rather than by sampling tokens. Pretraining ran on over 10,000 hours of robot data across 7 robot configurations and 68 tasks, plus the Open X-Embodiment collection.
One number to ignore: the Hugging Face model-size badge reads "4B params" for both lerobot/pi0_base and lerobot/pi05_base, because it rounds. The safetensors index behind those pages gives 3,501,372,176 and 3,616,757,520. There is no 4 billion parameter Pi0.5.
| Stage | Time (RTX 4090, per the Pi0 paper) |
|---|---|
| Image encoders | 14 ms |
| Observation forward pass | 32 ms |
| Action forward pass, 10 flow steps | 27 ms |
| Total on-board inference | 73 ms |
| Network latency, off-board case | 13 ms |
| Total off-board inference | 86 ms |
73 ms buys you 50 actions, not one. The paper re-runs inference every 0.8 s after 16 actions on the 20 Hz UR5e and Franka arms, and every 0.5 s after 25 actions on the 50 Hz robots. A VLA latency number means nothing until you know whether it counts a chunk or a step, and whether a network hop sits inside.
Change 1: the gradient cut, also called knowledge insulation
The problem is stated bluntly in the follow-up paper, Knowledge Insulating Vision-Language-Action Models (arXiv 2505.23705, 29 May 2025): adding a continuous action expert naively harms both training speed and the semantic knowledge the VLM arrived with. A freshly initialised 300 M expert emits large, noisy gradients onto a backbone that spent its whole pretraining budget learning to read scenes and follow language.
- The action expert attends to the backbone's keys and values, but equations 5 and 6 of the paper wrap those tensors in a stop-gradient operator, written sg(). Information flows forward, error signal does not flow back.
- The backbone is trained instead with a next-token loss over FAST-tokenised actions, alongside ordinary vision-language data.
- The expert keeps its own flow-matching loss, weighted by a factor called alpha. Because the stop-gradient makes the two losses touch disjoint weights, that paper sets alpha = 1; Pi0.5's post-training used alpha = 10.0.
- Timestep conditioning inside the expert uses adaptive RMSNorm. In lerobot that is literally use_adarms=[False, True]: off for the backbone, on for the expert.
The reported effect is a training-cost collapse. Figure 6, a generalist model trained across many embodiments and evaluated on table bussing, states that Pi0 "trains significantly slower, requiring 7.5 times as many training steps to reach a similar performance". You get discrete-token training speed and continuous-action inference speed at once. That second half matters: the same paper puts an autoregressive Pi0-FAST at roughly 750 ms for a one-second chunk on an RTX 4090, citing the FAST paper for that measurement.
Stopping the gradient is described in the paper as "an effective way of improving language following" compared with Pi0. The caveat is in the next sentence: with VLM data in the mixture, joint training without the stop-gradient also follows language well. Two levers, not one.
Change 2: discrete tokens do the representation learning
Pi0.5 does not discard discrete actions, it promotes them. FAST (arXiv 2501.09747, 16 January 2025) compresses an action chunk with a discrete cosine transform, quantises the coefficients and runs byte-pair encoding over the result. Combined with Pi0, the authors report matching diffusion VLAs "while reducing training time by up to 5x". Pi0.5 uses that tokeniser for 280k pretraining steps, then adds the flow-matching expert for 80k post-training steps on a joint next-token plus flow-matching objective.
A second, smaller token change is the one you notice in a config file. Pi0.5 discretises the robot state into 256 bins and writes it into the language prompt, where Pi0 fed state in continuously. That is why the lerobot prompt budget jumps from 48 tokens to 200.
# lerobot main branch, files read 2026-08-23
# src/lerobot/policies/pi0/configuration_pi0.py
class PI0Config(PreTrainedConfig):
paligemma_variant: str = "gemma_2b"
action_expert_variant: str = "gemma_300m"
chunk_size: int = 50
n_action_steps: int = 50
num_inference_steps: int = 10
tokenizer_max_length: int = 48
normalization_mapping = {
"VISUAL": NormalizationMode.IDENTITY,
"STATE": NormalizationMode.MEAN_STD,
"ACTION": NormalizationMode.MEAN_STD,
}
# src/lerobot/policies/pi05/configuration_pi05.py
class PI05Config(PreTrainedConfig):
paligemma_variant: str = "gemma_2b" # same
action_expert_variant: str = "gemma_300m" # same
chunk_size: int = 50 # same
n_action_steps: int = 50 # same
num_inference_steps: int = 10 # same
optimizer_lr: float = 2.5e-5 # same
tokenizer_max_length: int = 200 # four times the prompt budget
normalization_mapping = {
"VISUAL": NormalizationMode.IDENTITY,
"STATE": NormalizationMode.QUANTILES, # q01 / q99, not mean / std
"ACTION": NormalizationMode.QUANTILES,
}# src/lerobot/policies/pi05/processor_pi05.py, lerobot main branch
# State arrives already normalised to [-1, 1] by the normalizer step.
discretized_states = np.digitize(state_np, bins=np.linspace(-1, 1, 256 + 1)[:-1]) - 1
...
state_str = " ".join(map(str, discretized_states[i]))
full_prompt = f"Task: {cleaned_text}, State: {state_str};\nAction: "Pi0.5 normalises STATE and ACTION with quantiles, so meta/stats.json needs q01 and q99. A dataset recorded before that default carries only min/max/mean/std, and training dies on the first batch with ValueError: QUANTILES normalization mode requires q01 and q99 stats. Recompute the stats, or pass a MEAN_STD normalization mapping. See dataset rejected as v3 for the neighbouring version problem.
Change 3: hierarchical inference, and why you probably will not get it
The headline behaviour in the Pi0.5 paper is a two-stage rollout: the model predicts a semantic subtask in language, something like "pick up the pillow", then conditions the expert on it. Physical Intelligence describes a kind of chain of thought, where the model "first produces a high-level action expressed in language" and then "selects the motor commands using its flow matching action expert".
The openpi README states plainly: "Note that, in this repository, we currently only support the flow matching head for both pi0.5 training and inference." The lerobot pi05_base card agrees: subtask prediction, action tokenization and RL "were not released upstream and are not included here". Fine-tuning Pi0.5 on your arm therefore runs a model whose training recipe came from a hierarchical system, flat. Expect the recipe's generalisation. Do not expect the robot to narrate its plan.
Change 4: the data, which is most of the generalisation story
It is tempting to attribute all of Pi0.5 to the gradient cut. The paper does not. Models trained without the full recipe are "significantly worse", and Physical Intelligence's own summary is that web data "makes the biggest difference for generalizing to out-of-distribution objects, while data from other robots (ME and CE) is important across all evaluation conditions".
| Component | What it contains |
|---|---|
| MM, mobile manipulator | about 400 hours across about 100 home environments |
| ME, multi-environment | non-mobile arms in many homes, no mobility cost |
| CE, cross-embodiment | lab data including Open X-Embodiment, single and dual arm |
| HL, high-level | hand annotations of semantic subtasks |
| WD, web data | captioning, question answering, object localisation |
| VI, verbal instructions | a supervisor coaching the robot step by step, post-training only |
| Mixture | In-dist. follow | In-dist. success | OOD follow | OOD success |
|---|---|---|---|---|
| Full Pi0.5 | 86 % | 83 % | 94 % | 94 % |
| no WD | 86 % | 82 % | 80 % | 74 % |
| no CE | 74 % | 67 % | 67 % | 49 % |
| no ME | 66 % | 57 % | 33 % | 31 % |
Read the last two columns. Dropping web data costs one point of in-distribution success and twenty on out-of-distribution objects; dropping the other robots' data costs everything, everywhere. Proportions matter as much: 97.6 percent of the first-phase examples are not mobile manipulators doing household tasks. The scaling curve trains on 3, 12, 22, 53, 82 and 104 locations, and a control trained directly on the test homes "attains similar performance as the final 104-location model". Evaluation ran in three kitchens and three bedrooms never seen in training, on tasks of about 2 to 5 minutes.

To see where the two sit against everything published in the same eighteen months, the arena has a row for Pi0, Pi0-FAST and Pi0.5, and each number links out to its source instead of asking you to trust a summary table.
What the benchmark numbers actually say
Neither paper gives a clean scalar for "Pi0.5 is N percent better than Pi0", and you should distrust anyone quoting one. The comparison is a figure caption: the full model "significantly outperforms both Pi0 and Pi0-FAST+Flow in the mock home test environments". The reproducible number is LIBERO, where the lerobot team fine-tuned the LIBERO base model for 6k extra steps against the openpi reference.
| LIBERO suite | lerobot pi05 implementation | openpi reference |
|---|---|---|
| Spatial | 97.0 % | 98.8 % |
| Object | 99.0 % | 98.2 % |
| Goal | 98.0 % | 98.0 % |
| Libero 10 | 96.0 % | 92.4 % |
| Average | 97.5 % | 96.85 % |
It tells you the port is faithful. It tells you nothing about your desk. LIBERO sits at 97 percent, so it has stopped discriminating between good policies. Use it to confirm the stack is not broken, then measure on your own arm with your own episodes.
So which one do you fine-tune today
- Same inference cost: expert, chunk length and 10 denoising steps are unchanged.
- Faster to converge, per the knowledge insulation result of 7.5 times the steps for flow-matching-only training.
- Better instruction following, which is the practical read of the stop-gradient ablation.
- It is where the maintained checkpoints are: lerobot/pi05_base and lerobot/pi05_libero_base.
- Quantile normalisation clips the outlier action spikes leader-follower teleoperation produces instead of letting them stretch the scale.
- No hierarchical half: subtask prediction is absent from both open implementations.
- The gated PaliGemma tokeniser adds a licence acceptance and a login before your first run.
- Full fine-tuning wants more than 70 GB of VRAM per the openpi table, so not a laptop project.
- At 485 ms per action step it is the slowest of the five policies here, which constrains the tasks it can drive.
The summary for someone with an SO-100 on the desk: pick Pi0.5, not Pi0. To decide whether this family is right at all, the comparisons that matter are GR00T N1.7 against Pi0.5 and Pi0.5 against SmolVLA, because those decide the GPU bill and the control loop.

Fine-tuning Pi0.5 on your own recordings
Two stacks train Pi0.5. openpi is the reference JAX implementation from Physical Intelligence; lerobot's pi05 policy is the PyTorch port and speaks LeRobot datasets natively. Use openpi for the original configs, lerobot if your data came off an SO-100.
- 1Clear the licence gate
Pi0.5 uses the gated google/paligemma-3b-pt-224 tokeniser, whose Hub gate is set to manual approval. Accept the licence, then log in. Skip it and an authentication error lands minutes into the run, after the dataset has been scanned.
bash# Pi0.5 uses the gated google/paligemma-3b-pt-224 tokenizer. # Accept the licence on the Hub first, then: hf auth login pip install -e ".[pi]" # from a lerobot checkout pip install "lerobot[pi]" # or from PyPI - 2Fix your dataset statistics
Pi0.5 wants q01 and q99 for STATE and ACTION. Recompute them, or pass an explicit MEAN_STD normalization_mapping and accept that you are off the model's own default.
bash# Datasets recorded before the quantile default carry only # min/max/mean/std and die on the first batch with: # ValueError: QUANTILES normalization mode requires q01 and q99 stats lerobot-edit-dataset \ --repo_id your_dataset \ --new_repo_id your_dataset \ --operation.type recompute_stats \ --operation.overwrite true # The result lands in $HF_LEROBOT_HOME/your_dataset, not the cache # --dataset.repo_id reads. Train with --dataset.root pointing there, # or push it to the Hub. - 3Train
The lerobot docs ship a LIBERO quickstart sized for a single 80 GB GPU: batch size 64, 30000 steps. --policy.pretrained_path loads weights only, so stored settings such as n_action_steps reset to defaults; --policy.path loads the checkpoint config too and forbids --policy.type.
bash# adapted from the LIBERO quickstart in the lerobot pi05 docs, # swapped onto your own recording and onto lerobot/pi05_base. # The quickstart also forces MEAN_STD and --policy.empty_cameras=1; # both are LIBERO-specific, so they are dropped here. lerobot-train \ --dataset.repo_id=your_user/so100_pick_place \ --policy.type=pi05 \ --policy.pretrained_path=lerobot/pi05_base \ --policy.freeze_vision_encoder=false \ --policy.train_expert_only=false \ --policy.gradient_checkpointing=true \ --policy.dtype=bfloat16 \ --policy.device=cuda \ --policy.push_to_hub=false \ --output_dir=./outputs/pi05_so100 \ --job_name=pi05_so100 \ --batch_size=64 \ --num_workers=8 \ --steps=30000 \ --save_freq=5000 \ --seed=1000 - 4Or train the expert only, if VRAM is tight
Freezing the VLM and training only the expert and the projections cuts memory, at some cost in success rate. openpi's table puts inference above 8 GB, LoRA above 22.5 GB and full fine-tuning above 70 GB.
bash# less memory, at some cost in success rate: # freeze the whole VLM, train only the action expert and the projections lerobot-train \ --dataset.repo_id=your_user/so100_pick_place \ --policy.type=pi05 \ --policy.pretrained_path=lerobot/pi05_base \ --policy.freeze_vision_encoder=true \ --policy.train_expert_only=true \ --policy.gradient_checkpointing=true \ --policy.dtype=bfloat16 \ --batch_size=64 --steps=30000 --seed=1000 - 5Serve the checkpoint
In openpi the policy server is a script the robot client connects to. Normalisation statistics first, training second. Keep the server on the same machine as the arm.
bash# openpi, README as of 2026-08-23 git clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git GIT_LFS_SKIP_SMUDGE=1 uv sync GIT_LFS_SKIP_SMUDGE=1 uv pip install -e . uv run scripts/compute_norm_stats.py --config-name pi05_libero XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_libero \ --exp-name=my_experiment --overwrite # serve the checkpoint to a robot client (listens on port 8000) uv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_libero \ --policy.dir=checkpoints/pi05_libero/my_experiment/20000
The parts nobody writes down: a 24 GB card cannot do a full fine-tune, so you are freezing something or renting an 80 GB card; torch.compile is off by default in PI05Config and its compile_mode default is max-autotune, which pays a long first step; and with --save_freq=5000 your first checkpoint arrives at step 5000. Budget for the rented hour.
Same model, fewer moving parts. Pi0.5 is one of five trainable policies on the policies page, its model page lists strengths and limits, and Pi0.5 on SO-100 is the guide for this combination. The backend rents a GPU on a spot market by required VRAM, runs the trainer and writes checkpoints to object storage.
- 1Get episodes
Record with the desktop client, which writes LeRobot-format datasets straight out of a teleop session, pick one from the public dataset directory, or point at a Hugging Face repo id. Pi0.5 needs 50 episodes minimum.
- 2Pick Pi0.5 in the training form
The form takes model, dataset and hyperparameters. Pi0.5 needs a LeRobot v3.0 dataset and an A100 80 GB or H100 80 GB tier, and it is cloud-only. The training matrix has a cell per model and arm.
- 3Leave the defaults alone on the first run
The platform sends batch size 1, learning rate 5e-5 and 30000 max steps, and exposes seed and logFreq. Change one thing at a time or you will not know what moved the result.
- 4Run it and watch the cost
An A100 or H100 tier run is 3 to 6 hours at 1.20 to 2.00 USD per hour, so about 4 to 12 USD. Pricing has the full table.
- 5Serve it back to the arm
The inference endpoint auto-provisions a cloud GPU pod that serves the policy, and the local robot client talks to it. Pods carry an idle watchdog and destroy themselves, so a forgotten tab does not keep billing.
| Pi0.5 on AY-Robots | Value |
|---|---|
| Trainer key | pi0 (legacy name; the policy type it runs is pi05) |
| Parameters | about 3 B, PaliGemma backbone |
| Inference | 485 ms per action step |
| GPU tier | A100 80 GB or H100 80 GB |
| Minimum episodes | 50 |
| Dataset format | LeRobot v3.0 |
| Batch size / learning rate / max steps | 1 / 5e-5 / 30000 |
| Gradient accumulation field | 16, but it does not apply |
| Base checkpoint | lerobot/pi05_base |
| Local training | no, cloud only |
Two of those rows are admissions, not features. The trainer key is pi0 for historical reasons even though the policy type it runs is pi05, and the gradient accumulation field is inert because lerobot 0.5.1 has no such flag. Set it to 16 and you still get an effective batch size of 1, with a loss curve noisier than it should be.
Where this does not help
Pi0.5's selling point is open-world generalisation across homes. One SO-100 doing one task on one desk is not that problem. Knowledge insulation still buys faster convergence and better language grounding, but the 104-location scaling curve is not something a hobby dataset reproduces. If a policy fails, the failure mode pages beat a bigger model, because most first-run failures are imitation learning data problems, not architecture problems.
Inference has to sit next to the servos for anything fast. Here the control loop runs 20 to 485 ms per action step depending on the model, and Pi0.5 is at the slow end. Public-internet round trips on top turn a working policy into a hesitant one: viable for slow pick and place, not fast reactive motion. If a policy stalls mid-motion, start at policy freezes mid-motion.
| Policy | Params | Inference per action step | GPU tier | Min episodes | Dataset format |
|---|---|---|---|---|---|
| ACT | about 80 M | 20 ms | RTX 4090, any 24 GB card | 50 | LeRobot v3.0 |
| SmolVLA | about 450 M | 245 ms | RTX 4090, any 24 GB card | 30 | LeRobot v3.0 |
| GR00T N1.7 | about 3 B | 152 ms | A100 80 GB or H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | about 3 B | 165 ms | A100 80 GB or H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | about 3 B | 485 ms | A100 80 GB or H100 80 GB | 50 | LeRobot v3.0 |
Read that as a control-loop budget, not a quality ranking. ACT at 20 ms is not better than Pi0.5. It is a from-scratch policy with no language grounding, which is why it is fast. SmolVLA at 245 ms and 30 minimum episodes is the middle option on a 24 GB card. If inference latency is killing you, moving down that table beats tuning the model you have.
The Feetech STS3215 servos in an SO-100 or SO-101 run at 7.4 V. Feeding them 12 V destroys them, silently and permanently. Check the supply before you check the policy.
What came after Pi0.5
Physical Intelligence did not stop in April 2025. Pi-star 0.6 (17 November 2025) adds a reinforcement learning stage called RECAP on top of demonstrations and corrections. MEM (arXiv 2603.03596, 4 March 2026) adds mixed-modal memory for tasks up to fifteen minutes, and its switches already sit in the lerobot pi05 config as use_visual_memory and use_proprioceptive_memory, both False by default. The arena entry for Pi-star 0.6 and Pi0.7 track the rest.
None of it changes today's answer. As of August 2026 the fine-tunable, openly released, dataset-compatible member of the family is Pi0.5, which is the one on the training matrix. Never trained a VLA at all? Train your first policy and the training docs are the shorter way in, and the fine-tuning glossary entry defines the terms above.
Five policies, real numbers, no guessing
Pi0.5, GR00T N1.7, GR00T N1.5, SmolVLA and ACT on parameters, GPU tier, inference latency per action step, minimum episodes and dataset format. The same table the training form reads.
Compare the policiesIs Pi0.5 just Pi0 trained on more data?▾
No, but data is the larger half. The architectural change is real: the action expert's gradients are stopped before they reach the VLM backbone, and the backbone learns motor representations from FAST discrete action tokens instead. The ablations then show the co-training mixture, web data in particular, is what produces the open-world generalisation.
Do I get the high-level subtask prediction when I fine-tune Pi0.5?▾
No. The openpi README says the repository supports only the flow matching head for Pi0.5 training and inference, and the lerobot pi05_base card says subtask prediction, action tokenization and RL were not released upstream. You fine-tune a model trained with a hierarchical recipe, run flat.
Can I fine-tune Pi0.5 on a 24 GB card?▾
Partly. openpi lists inference above 8 GB, LoRA above 22.5 GB and full fine-tuning above 70 GB. In lerobot, --policy.train_expert_only=true freezes the VLM and trains only the expert and the projections, which fits smaller cards at some cost in success rate. On AY-Robots Pi0.5 is cloud-only on the A100 80 GB or H100 80 GB tier; SmolVLA and ACT also run locally.
Why does training die on the first batch with a q01 and q99 error?▾
Because Pi0.5 normalises STATE and ACTION with quantiles while older datasets carry only min, max, mean and std. Recompute with lerobot-edit-dataset; the output lands in $HF_LEROBOT_HOME rather than the cache --dataset.repo_id reads, so point --dataset.root there or push to the Hub. Or pass an explicit MEAN_STD normalization_mapping.
Pi0.5 or GR00T N1.7 for an SO-100?▾
Latency and dataset format decide it more often than accuracy. Pi0.5 runs at 485 ms per action step and wants LeRobot v3.0. GR00T N1.7 runs at 152 ms but needs the dataset converted down to v2.0 or v2.1, because a v3.0 dataset crashes its loader. Both need an A100 80 GB or H100 80 GB tier and 50 episodes, and a run costs about 4 to 12 USD.
Sources
- pi0: A Vision-Language-Action Flow Model for General Robot Control
- pi0.5: a Vision-Language-Action Model with Open-World Generalization
- Knowledge Insulating Vision-Language-Action Models: Train Fast, Run Fast, Generalize Better
- FAST: Efficient Action Tokenization for Vision-Language-Action Models
- MEM: Multi-Scale Embodied Memory for Vision Language Action Models
- Physical-Intelligence/openpi, the reference implementation and checkpoints
- lerobot PI0Config defaults (main branch)
- lerobot PI05Config defaults (main branch)
- lerobot pi05 model code, including use_adarms=[False, True]
- lerobot pi05 processor, the 256-bin state prompt
- LeRobot documentation: pi0.5 (pi05) policy
- lerobot/pi05_base model card
- lerobot/pi0_base model card
- Physical Intelligence: pi0.5, a VLA with Open-World Generalization
- Physical Intelligence: VLAs that Train Fast, Run Fast, and Generalize Better
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started