
I-fine-tune ang Pi0.5, ang flow-matching VLA mula sa Physical Intelligence, sa sarili mong data ng robot. Mga totoong command para sa openpi at lerobot pi05, mga bitag sa format ng dataset, mga limitasyon sa VRAM at latency.
Ang Pi0.5 ay ang modelo na ginagamit mo kapag ang isang patakaran ay kailangang gumana sa isang silid na hindi pa nito nakita. Ito rin ang pinakamahirap sa limang mga patakarang maaaring sanayin dito upang i-fine-tune nang mano-mano: ang upstream repository ay JAX muna, inilipat ng LeRobot port ang deployment palabas ng lerobot-record sa 0.6.0 at ginawang masyadong maliit ang base install para sa pagsasanay, at ang isang buong fine-tune ay hindi kasya sa isang 4090. Sa ibaba: kung ano ang flow matching na gastos sa inference, ang dalawang ruta ng command, at ang numerong 485 ms na nagpapasya kung magagamit ang resulta.
Ano ang kailangan mong malaman
- •Isang flow-matching VLA: isang 3B PaliGemma VLM kasama ang isang 300M action expert na nagde-decode ng tuloy-tuloy na action chunks. Dalawang ruta para i-fine-tune ito, openpi at LeRobot pi05, na may 0.65 puntos na agwat sa average ng LIBERO.
- •Ang buong fine-tuning ay nangangailangan ng higit sa 70 GB ng VRAM. Inilista ng openpi ang LoRA sa 22.5 GB, sa JAX path lamang nito.
- •Ang dataset ay dapat LeRobotDataset v3.0 na may q01 at q99 quantiles sa meta/stats.json, o magkakaroon ng error sa unang batch.
- •Suriin muna ang iyong bersyon ng lerobot: ginawa ng 0.6.0 na maging lightweight ang base package at inilipat ang deployment palabas ng lerobot-record.
- •Dito, tumatakbo ito sa 485 ms bawat action step, nangangailangan ng 50 episode, at nagkakahalaga ng humigit-kumulang 4 hanggang 12 USD bawat pagtakbo.
Ano talaga ang Pi0.5
Inilathala ng Physical Intelligence ang pi0 noong Oktubre 2024: isang flow matching modelo ng vision-language-action sa isang pretrained VLM: PaliGemma sa 3 bilyong parameter kasama ang isang 300M action expert na sinimulan mula sa simula, 3.3 bilyon sa kabuuan. Iniulat ng papel ang pre-training sa mahigit 10,000 oras ng data ng robot sa 7 configuration ng robot at 68 gawain. Higit pa sa artikulo ng pi0.
Pi0.5 (arXiv 2504.16054, 22 April 2025) pinanatili ang balangkas na iyon at binago ang diet sa pagsasanay: data mula sa web, object detection, verbal na instruksyon mula sa mga tao na nagtuturo sa robot, mga label ng subtask, cross-embodiment data mula sa mga robot sa maraming tahanan. Ang resulta ay isang robot na naglilinis ng mga kusina sa mga bahay na wala sa training set. Idinagdag ng openpi README ang isang detalye na hindi nabanggit sa pamagat: ang inilabas na pi0.5 ay sinanay na may knowledge insulation (arXiv 2505.23705).
| Katangian | pi0 | pi0.5 |
|---|---|---|
| Variant ng VLM backbone | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) |
| Variant ng action expert | gemma_300m | gemma_300m |
| action_dim | 32 | 32 |
| default na action_horizon | 50 | 50 |
| max_token_len | 48 | 200 |
| discrete_state_input | false | true, ang state ay dinidiscretize sa mga bins sa prompt |
| Base checkpoint | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
Malinaw ang openpi README: sinusuportahan lamang ng repository ang flow matching head, para sa pagsasanay at inference ng pi0.5. Inilalarawan ng papel ang dalawang yugto at ang code ay nagdadala lamang ng pangalawa: ang pre-training ay kumakatawan sa bawat aksyon bilang discrete tokens sa pamamagitan ng FAST tokenizer, at sa deployment ang modelo ay naghihinuha ng isang high-level na subtask bago ang bawat action chunk. Wala sa mga iyon ang nasa repository. Ang lerobot/pi05_base card ay nagbibigay ng parehong listahan at nagdaragdag ng RL, bagaman ang pi0.5 na papel ay hindi naglalarawan ng anumang reinforcement learning stage. Minana ng LeRobot port ang saklaw na iyon, at gayundin ang bawat hosted trainer dito, kabilang ang ang narito. Hati rin ang paglilisensya: sinasabi ng pi05 doc page na Apache 2.0, ang lerobot/pi05_base card ay may tag na license: gemma.
Ano ang binabago ng flow matching tungkol sa pagsasanay at inference
Ang patakaran na maaari mong sanayin sa isang SO-100 ay direktang nagre-regress ng mga aksyon (ACT) o nagta-tokenize at nagde-decode ng mga ito nang autoregressively (pi0-FAST). Ang flow matching ay hindi ginagawa ang alinman sa mga ito: natututo ito ng isang vector field na naglilipat ng ingay sa isang malinis na bahagi ng aksyon, pagkatapos ay isinasama ito. Ang pi0 paper ay gumagamit ng 10 integration steps sa step size na 0.1; ang pi05 config ng LeRobot ay nagtataglay ng parehong num_inference_steps: int = 10.
- Pagsasanay: ang loss ay nagre-regress ng isang maingay na bahagi ng aksyon. Walang tokenizer na kailangang i-tune, walang discretisation ng iyong mga joint angle.
- Inference: isang bahagi ng aksyon ang nagkakahalaga ng sampung forward pass sa pamamagitan ng action expert. Ito ay structural, hindi isang problema sa pag-tune.
- Output: tuloy-tuloy na mga aksyon ng dimension 32, na may internal padding, ang loss ay kinukuha sa mga dimension na mayroon ang iyong robot. Ang isang 6-DoF na braso kasama ang gripper ay gumagamit ng 7.
# openpi/src/openpi/models/pi0_config.py - the defaults every pi05 config inherits
@dataclasses.dataclass(frozen=True)
class Pi0Config(_model.BaseModelConfig):
dtype: str = "bfloat16"
paligemma_variant: _gemma.Variant = "gemma_2b"
action_expert_variant: _gemma.Variant = "gemma_300m"
action_dim: int = 32
action_horizon: int = 50
max_token_len: int = None # 200 if pi05 else 48
pi05: bool = False # flips discrete_state_input to TrueAng PaliGemma backbone, at ang gate sa harap nito
Ang PaliGemma (arXiv 2407.07726) ay isang SigLIP-So400m vision encoder sa isang Gemma-2B language model, na may humigit-kumulang 3B na parameter. Minana ng Pi0.5 ang tokenizer nito, at ang tokenizer na iyon ay nasa isang gated repository. Ito ang pinakakaraniwang paraan kung paano nabibigo ang unang pagpapatakbo, bago ang unang hakbang sa pagsasanay.
Malinaw na sinasaad ng LeRobot pi05 docs: ginagamit ng pi0.5 ang gated google/paligemma-3b-pt-224 tokenizer, kaya tanggapin ang lisensya nito sa Hub at patakbuhin ang hf auth login muna. Ang access ay ibinibigay nang manu-mano, hindi agad-agad. Laktawan ito, magsimula ng isang bayad na cloud run, at magbabayad ka para sa isang pod na hindi makapag-download ng tokenizer.
Bago ka magsimula: format ng dataset, mga episode, hardware
Ang Pi0.5 sa LeRobot ay nagbabasa ng isang LeRobot dataset sa v3.0 layout, na inilabas kasama ng lerobot 0.4.0 noong Oktubre 2025: maraming episode bawat Parquet at MP4 file sa halip na isang file bawat episode, na may mga hangganan sa meta/episodes/ sa halip na mga filename. Mag-record gamit ang desktop client o sundin ang i-record ang iyong unang dataset at mayroon ka na nito.
| Mode | Kinakailangang memorya ng GPU | Halimbawang GPU |
|---|---|---|
| Inference | more than 8 GB | RTX 4090 |
| Fine-tuning, LoRA | more than 22.5 GB | RTX 4090 |
| Fine-tuning, buo | more than 70 GB | A100 80 GB or H100 |
Ang Pi0.5 at SmolVLA ay nangangailangan ng LeRobot v3.0. Ang GR00T N1.7 at GR00T N1.5 ay nangangailangan ng v2.0 o v2.1 at nagka-crash sa isang v3.0 dataset. Hindi kayang pakainin ng isang recording session ang pareho nang walang conversion, at hindi sinasabi ng error na "maling bersyon ng dataset". Tingnan ang dataset rejected: kailangan ang v3.
# v2.1 -> v3.0, run against a dataset already on the Hub
python -m lerobot.scripts.convert_dataset_v21_to_v30 --repo-id=<HF_USER/DATASET_ID>
# aggregates episode-0000.parquet, episode-0001.parquet, ... -> file-0000.parquet
# aggregates episode-0000.mp4, episode-0001.mp4, ... -> file-0000.mp4
# rewrites meta/episodes/* with per-episode lengths, tasks and offsetsAng platform ay nangangailangan ng hindi bababa sa 50 episode para sa Pi0.5, kapareho ng bilang para sa GR00T at ACT. Ang pre-training ang gumagawa ng mabigat na trabaho, kaya mas mahusay ang 50 malinis na episode kaysa sa 200 na hindi maayos. Bago ka rito? Magsimula sa ang gabay sa pagkolekta ng data.

Ruta A: fine-tune gamit ang openpi repository
Ang reference implementation: JAX muna, sinubukan lamang sa Ubuntu 22.04, pinapatakbo ng mga config object sa halip na mga flag. Isang PyTorch path ang dumating noong Setyembre 2025, na-validate sa LIBERO. Tatlong hakbang: i-convert ang iyong data, tukuyin ang isang config, i-train at i-serve.
- 1I-clone at i-install
Gumagamit ang openpi ng uv. Ang GIT_LFS_SKIP_SMUDGE ang nagpapahintulot sa LeRobot na maging dependency nang walang LFS blobs.
bashgit clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git cd openpi GIT_LFS_SKIP_SMUDGE=1 uv sync GIT_LFS_SKIP_SMUDGE=1 uv pip install -e . - 2I-convert ang iyong data sa isang LeRobot dataset
Ang upstream ay nagpapadala ng mga converter para sa LIBERO at DROID at inaasahan kang umangkop ng isa. Ang trabaho ay ang key mapping.
bashuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data - 3Magdagdag ng training config
Ang mga config ay TrainConfig entries sa src/openpi/training/config.py. Ang isang ito ay umaangkop sa pi05_droid_finetune, na ang weight loader ay nakaturo sa pi05_base.
pythonTrainConfig( name="pi05_so100", model=pi0_config.Pi0Config( pi05=True, action_dim=32, # pi05 is trained with 32-dim actions action_horizon=16, ), # Copy LeRobotLiberoDataConfig in the same file and rewrite the key # mapping for your camera names, then reference your copy here. data=LeRobotLiberoDataConfig( repo_id="your_hf_username/my_so100_dataset", base_config=DataConfig(prompt_from_task=True), ), weight_loader=weight_loaders.CheckpointWeightLoader( "gs://openpi-assets/checkpoints/pi05_base/params" ), batch_size=32, num_train_steps=20_000, ) - 4I-compute ang norm stats
Tumatakbo laban sa pangalan ng config, hindi sa dataset. Ang paglaktaw nito ang klasikong unang pagkabigo dito.
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5I-train
Pinapayagan ng variable ang JAX na gumamit ng 90 porsiyento ng memorya ng GPU sa halip na ang default na 75. Sa isang 80 GB card, ito ang nagpapasya kung magpapatuloy ang pagtakbo.
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6I-serve ito
Nakikinig ang server sa port 8000 at sumasagot sa mga observation query; ang iyong robot runtime ang client.
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
Ang implementasyon ng PyTorch ng openpi ay hindi sumusuporta sa pi0-FAST, mixed precision, FSDP, LoRA o EMA weights, kaya ang LoRA na umaabot sa 22.5 GB ay JAX lamang, sa pamamagitan ng mga variant na gemma_2b_lora at gemma_300m_lora. Mas masahol pa: kinokopya ng setup ang mga patched file sa iyong naka-install na transformers 4.53.2, at nagbabala ang README na sa default hardlink mode ng uv, permanenteng binabago nito ang transformers sa uv cache at maaaring kumalat sa ibang proyekto. I-undo ito gamit ang uv cache clean transformers.
Ruta B: fine-tune gamit ang lerobot pi05
Ang LeRobot port ay nagbabalot ng parehong weights sa CLI na ginagamit mo na para sa ACT at SmolVLA. Ang lahat ng nasa ibaba ay sinuri laban sa lerobot 0.6.1, ang release mula noong 3 Agosto 2026, at ang mga dokumento ng pi05 noong 23 Agosto 2026. Mahalaga ang mga bersyon dito: dumating ang v3.0 datasets kasama ang 0.4.0 noong Oktubre 2025, ang 0.5.0 blog ng 9 Marso 2026 ay nagpapakita ng pi0-FAST at Real-Time Chunking, at ginawa ng 0.6.0 noong 6 Hulyo 2026 na maging lightweight ang base package at inilipat ang deployment sa lerobot-rollout.
Isang bagay ang hindi nagbago: ang lerobot-train at lerobot-record ay mga entry point na noong 0.3.2, Agosto 2025. Ang isang tutorial na tumatawag pa rin sa python -m lerobot.scripts.train ay mas matanda pa sa isang taon ng mga pagbabago at hindi dapat pagkatiwalaan sa iba pa.
- 1I-install gamit ang tamang extras
Mula 0.6.0, ang base install ay naglalaman lamang ng core ML dependencies, at ang pi extra ay hindi nagdaragdag ng dataset o training code, kaya ang isang fine-tune ay nangangailangan din ng training extra. Ang mga mas lumang one-liners ay nabibigo dito sa import time.
bash# policy dependencies plus the training stack pip install 'lerobot[pi,training]' # from a source checkout pip install -e ".[pi,training]" # driving an SO-100 afterwards needs the robot extras too pip install 'lerobot[core_scripts,feetech]' - 2Mag-authenticate
Tanggapin ang lisensya ng paligemma-3b-pt-224 sa isang browser, pagkatapos ay mag-log in sa makina na nagsasanay.
bashhf auth login - 3Magdagdag ng quantile statistics
Ang Pi0.5 ay nagno-normalize ng STATE at ACTION gamit ang quantiles, kaya ang meta/stats.json ay nangangailangan ng q01 at q99. Ang mga mas lumang dataset ay naglalaman lamang ng min, max, mean, std.
bashlerobot-edit-dataset \ --repo_id your_dataset \ --new_repo_id your_dataset \ --operation.type recompute_stats \ --operation.overwrite true - 4I-fine-tune mula sa lerobot/pi05_base
Itakda ang batch size sa kung ano ang kayang suportahan ng iyong card; ang mga docs ay gumagamit ng 64 sa LIBERO sa 80 GB. Ipasa ang bfloat16 nang eksplisito, ang default ng config ay float32.
bashlerobot-train \ --dataset.repo_id=${HF_USER}/my_so100_dataset \ --policy.type=pi05 \ --policy.pretrained_path=lerobot/pi05_base \ --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=4 \ --num_workers=8 \ --steps=30000 \ --save_freq=5000 \ --seed=1000 - 5Patakbuhin ito sa braso
Sa 0.6.x ito ay lerobot-rollout: ang lerobot-record ay tumatanggi sa isang policy at tinatanggihan ang mga pangalan ng eval_ dataset. Ang Base ay nagmamaneho ng braso, ang sentry ay nagre-record ng rollout.
bashlerobot-rollout \ --strategy.type=base \ --policy.path=${HF_USER}/my_policy \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM1 \ --robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \ --task="Put lego brick into the transparent box" \ --duration=60 # same run, recorded into an eval_ dataset lerobot-rollout \ --strategy.type=sentry \ --policy.path=${HF_USER}/my_policy \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM1 \ --dataset.repo_id=${HF_USER}/eval_so100 \ --dataset.single_task="Put lego brick into the transparent box" \ --duration=600
| Flag | Ano ang ginagawa nito | Tandaan |
|---|---|---|
| --policy.type=pi05 | pinipili ang Pi0.5 | kinakailangan sa pretrained_path, iwasan sa --policy.path |
| --policy.pretrained_path | naglo-load lamang ng weights | mga pangalan ng feature mula sa iyong dataset, nire-reset ang mga nakaimbak na setting |
| --policy.path | weights kasama ang checkpoint config.json | ang mga nakaimbak na setting tulad ng n_action_steps ay namamana |
| --policy.n_action_steps | mga hakbang na ginagamit bawat chunk | bumabalik sa 50, hindi kailanman lalampas sa chunk_size (default 50) |
| --policy.train_expert_only | pinipigilan ang VLM, sinasanay ang expert | default false, mas kaunting memory, may kaunting gastos sa tagumpay |
| --policy.gradient_checkpointing | muling kalkulahin sa halip na i-store ang activations | default false, ang unang paraan kapag hindi magkasya ang isang run |
| --peft.method_type=LORA | LoRA adapters sa halip na buong weights | nangangailangan ng peft extra, ang dokumentadong halimbawa ay SmolVLA |
| --policy.rtc_training_max_delay | action-prefix conditioning para sa RTC | main branch lang, wala sa 0.6.1, dapat manatili sa ibaba ng chunk_size |
| --rename_map | nagmamapa ng mga column ng dataset sa mga policy feature | kinakailangan kapag magkaiba ang iyong camera keys |
Kung walang quantiles, makakakuha ka ng ValueError: QUANTILES normalization mode requires q01 and q99 stats sa batch one. Muling kalkulahin ang stats, ngunit ang resulta ay mapupunta sa $HF_LEROBOT_HOME/your_dataset, hindi sa cache na binabasa ng --dataset.repo_id, kaya mag-train gamit ang --dataset.root na nakaturo doon o i-push sa Hub. O laktawan ang quantiles gamit ang --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}', tulad ng ginagawa ng LIBERO reference command.
Tatlong set ng defaults, at alin ang nakakarating sa trainer
Ang TrainConfig ng openpi ang reperensiya, ang PI05Config ng LeRobot ang ginagamit ng lerobot-train kapag wala kang sinabi, at ang form dito ay nagpapadala ng ikatlong set. Ang nakakagulat ay ang learning rate: parehong umaabot sa 2.5e-5 ang mga default ng upstream, habang ang sariling pi05_libero config ng openpi at ang platform na ito ay nagpapataas nito sa 5e-5.
| Pagtatakda | openpi TrainConfig | lerobot pi05 and lerobot-train | AY-Robots ang ipinapadala |
|---|---|---|---|
| Laki ng Batch | 32 | 8 | 1 |
| Pinakamataas na Learning Rate | 2.5e-5, cosine decay | optimizer_lr 2.5e-5 | 5e-5 |
| Mga Hakbang sa Pagsasanay | 30,000 | 100,000 | 30,000 |
| Interval ng Checkpoint | 1,000 steps | 20,000 steps | wala sa form |
| Seed | 42 | 1,000 | nasa form |
| Action Chunk | action_horizon 50 | chunk_size 50, n_action_steps 50 | wala sa form |
| Weight dtype | bfloat16 | float32 hanggang ipasa mo ang --policy.dtype | wala sa form |
| Gradient Accumulation | walang ganoong kontrol, fsdp_devices sa halip | wala sa bawat release sa ngayon | 16, at ito ay tinanggal |
Tapat ba ang port? Ang LeRobot team ay nag-fine-tune ng LIBERO base model para sa karagdagang 6k na hakbang at inihambing ito sa mga reference number ng openpi sa apat na suite: 97.5 porsiyentong average laban sa 96.85, nangunguna sa Libero 10, nahuhuli sa Spatial. Ang ruta ay isang pagpipilian sa tooling, hindi sa kalidad.
- Mahigit 10,000 oras ng robot pre-training ang nasa likod nito, kaya ang 50 episode ng iyong gawain ay maaaring sapat na.
- Tuloy-tuloy na aksyon: walang tokenizer na i-tune, walang discretisation floor sa iyong joint angles.
- Ang LeRobot port ay nakakuha ng 97.5 porsiyento sa LIBERO average laban sa 96.85 ng openpi, kaya ang mas user-friendly na CLI ay walang nasusukat na gastos.
- Parameter-efficient na mga landas sa magkabilang panig: ang JAX LoRA variants ng openpi, ang PEFT integration ng LeRobot.
- Ang buong fine-tuning ay nangangailangan ng higit sa 70 GB. Ang 22.5 GB na LoRA figure ay ang JAX number ng openpi; wala pang nai-publish para sa pi05 sa ilalim ng PEFT.
- 485 ms bawat action step, pinakamabagal sa limang narito: dalawang beses ng SmolVLA, dalawampu't apat na beses ng ACT.
- Kinakailangan ang LeRobot v3.0, kaya ang dataset na naitala para sa isang GR00T run ay kailangang i-convert, at vice versa.
- Ang mga bagong opsyon ay unang lumalabas sa main: ang training-time RTC at MEM memory ay wala sa 0.6.1, kaya ang pinakabagong docs ay maaaring mangahulugan ng pag-install mula sa git.
Ang katotohanan ng 485 ms, at kung saan ito humihinto sa pagiging kapaki-pakinabang
Ito ang nagpapasya sa iyong proyekto, kaya ito ay nauuna sa talahanayan ng gastos. Ang bawat hakbang ng aksyon na sinukat dito para sa Pi0.5 ay 485 ms. Laban sa iba pang apat:
| Patakaran | Inference bawat hakbang ng aksyon | Mga Parameter | Antas ng GPU | Minimum na episode |
|---|---|---|---|---|
| ACT | 20 ms | ~80 M | RTX 4090 or any 24 GB card | 50 |
| GR00T N1.7 | 152 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |
| GR00T N1.5 | 165 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |
| SmolVLA | 245 ms | ~450 M | RTX 4090 or any 24 GB card | 30 |
| Pi0.5 | 485 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |

Ang control loop sa limang modelong ito ay tumatakbo ng 20 hanggang 485 ms bawat hakbang ng aksyon. Ang mga round trip sa pampublikong internet, na idinagdag sa 485 ms, ay nagiging sanhi upang ang isang gumaganang patakaran ay maging nag-aalangan. Ang remote inference ay magagawa para sa mabagal na pick-and-place, hindi para sa mabilis na reaktibong paggalaw. Mas gugustuhin naming sabihin iyon kaysa magbenta ng demo na gumagana lamang sa isang LAN. Kung humihinto ang iyong braso sa pagitan ng mga chunk, magsimula sa paghinto ng patakaran sa gitna ng paggalaw.
May sagot ang upstream, at kalahati nito ay nasa release na na maaari mong i-install. Ang Real-Time Chunking ay bumubuo ng susunod na chunk habang isinasagawa pa rin ng braso ang kasalukuyan, pagkatapos ay ginagabayan ang mga magkakapatong na hakbang ng bagong chunk upang manatiling malapit sa bahaging naisagawa na, upang hindi huminto o umalog ang braso sa pinagdugtungan. Ang inference-time form na kasama sa 0.4.2 changelog para sa Pi0, Pi0.5 at SmolVLA ay isang rollout flag, hindi isang retrain:
lerobot-rollout \
--strategy.type=base \
--policy.path=${HF_USER}/my_policy \
--inference.type=rtc \
--inference.rtc.execution_horizon=10 \
--inference.rtc.max_guidance_weight=10.0 \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM1 \
--robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \
--task="Put lego brick into the transparent box" \
--duration=60Hindi nito pinapabilis ang modelo. Itinatago nito ang agwat: ang 485 ms ay ginugugol pa rin, ngunit wala sa kritikal na landas, kaya hindi nauubusan ang queue sa pagitan ng mga chunk. Ang variant ng training-time mula sa arXiv 2512.05964 ay mas malalim: natututo ang modelo na mag-condition sa isang malinis na action prefix, kaya sa inference ang overlap ay hard-inpainted na may per-action flow timesteps sa halip na guided, at nawawala ang guidance backward pass. Sa panahon ng training, kumukuha ito ng prefix length bawat halimbawa at kinukuha ang flow loss sa natitirang postfix. Ang flag na iyon ay nasa main lamang, hindi sa 0.6.1, at ang delay na iyong sinasanay ay kailangang manatili sa ibaba ng chunk_size.
Dalawang paraan para makakuha ng Pi0.5 checkpoint
Umuupa o nagmamay-ari ka ng 80 GB card, nag-i-install ng isa sa mga stack sa itaas, nagko-convert ng iyong dataset at binabantayan ang pagpapatakbo. Hawak mo ang bawat kontrol: JAX LoRA ng openpi, PEFT adapters ng LeRobot, relative actions, custom key mappings. Hawak mo rin ang bawat pagkabigo.
- Hardware: A100 80 GB o H100, o isang 24 GB card sa JAX LoRA path ng openpi.
- Setup: isang hapon para sa unang pagpapatakbo, karamihan ay key mapping at ang gated tokenizer.
- Wala sa hosted form: PEFT adapters, relative actions, training-time RTC, MEM memory.
lerobot-train \
--dataset.repo_id=${HF_USER}/my_so100_dataset \
--policy.type=pi05 \
--policy.pretrained_path=lerobot/pi05_base \
--policy.rtc_training_max_delay=10 \
--policy.gradient_checkpointing=true \
--policy.dtype=bfloat16 \
--batch_size=4 --steps=30000 --seed=1000Pinipili mo ang modelo at dataset sa form ng pagsasanay, ang backend ay umuupa ng GPU sa isang spot market batay sa kinakailangang VRAM, pinapatakbo ang trainer at isinusulat ang mga checkpoint sa object storage. Ang Pi0.5 ay cloud-only dito. May mga gabay para sa SO-100, SO-101, Koch v1.1 at LeKiwi.
| Setting | Ano ang ipinapadala ng platform para sa Pi0.5 |
|---|---|
| Base checkpoint | lerobot/pi05_base |
| Uri ng patakaran | pi05 |
| Laki ng batch | 1 |
| Learning rate | 5e-5 |
| Pinakamataas na hakbang | 30000 |
| Gradient accumulation | 16, but see the warning below |
| Mga karagdagang kontrol sa form | seed, logFreq |
| Format ng dataset | LeRobot v3.0 |
| Tier ng GPU | A100 80 GB or H100 80 GB |
Ang trainer ay nagpapadala ng gradient accumulation value na 16 at ang lerobot 0.5.1 ay walang flag para tanggapin ito, kaya ito ay ibinababa. Walang inilabas na lerobot ang mayroon nito: ang kontrol ay umiiral lamang sa main, bilang --accelerator.gradient_accumulation.steps. Ang epektibong laki ng batch dito ay 1, laban sa 256 na ginagamit ng pi05_libero config ng openpi. Mahalagang malaman bago mo basahin ang loss curve. Ang kontrol ay nalalapat sa GR00T N1.7 at GR00T N1.5 runs.
Ang inference ay gumagana sa parehong paraan: isang pod ang inilalaan upang magsilbi sa patakaran at ang iyong lokal na client ay nakikipag-ugnayan dito. Ang pod ay may idle watchdog at sinisira ang sarili nito, kaya ang nakalimutang tab ay hindi tahimik na magpapabayad. Nalalapat ang babala sa latency, kaya ang ACT sa 20 ms ay madalas na nananalo sa isang mabilis na gawain.
Kapag hindi ito gumagana
| Sintomas | Pinakamalamang na sanhi |
|---|---|
| Tinanggihan ang pagpapatakbo bago ito magsimula | Dataset v2.1 ngunit gusto ng Pi0.5 ang v3.0, o kabaligtaran para sa GR00T |
| ImportError, nawawala ang datasets package | lerobot 0.6.x without the training extra |
| ValueError tungkol sa q01 at q99 sa batch one | Walang quantiles sa meta/stats.json; i-recompute o gamitin ang MEAN_STD |
| CUDA out of memory sa hakbang 0 | Buong fine-tune sa ibaba ng 70 GB; subukan ang checkpointing o train_expert_only |
| 401 o gated repo error | Hindi tinanggap ang lisensya ng PaliGemma tokenizer |
| Bumaba ang loss, walang ginagawa ang robot | Normalisation mismatch, o kinokopya ng patakaran ang estado |
| Humihinto ang braso sa pagitan ng mga chunk | Per-step latency plus round trip; nauubusan ang chunk queue |
| Gumagana sa isang setup, nabibigo sa iba | Masyadong kaunting episodes, o lahat sa isang configuration |
- Dataset tinanggihan: kailangan ang v3
- Out of memory habang nagsasanay
- Bumaba ang loss ngunit walang ginagawa ang policy
- Nag-freeze ang policy sa kalagitnaan ng paggalaw
- Gumagana lang ang policy sa isang setup
- Naipit ang training job sa queued
Magkano ang gastos ng isang run
Ang Pi0.5 ay nasa mamahaling tier dahil nangangailangan ito ng 80 GB card, at nagbabago ang mga spot price, kaya ang figure ay isang range sa halip na isang presyo. Para sa maraming SO-100 na gawain, sanayin SmolVLA o ACT sa 24 GB tier muna, kumpirmahin na matututunan ang gawain, pagkatapos ay gumugol ng A100 oras dito. Sanayin ang iyong unang policy ay nagpapakita ng mas murang proseso, at pagpepresyo ay naglalaman ng kasalukuyang mga tier.
| Tier | Mga Policy | Karaniwang run | Presyo kada oras | Gastos kada run |
|---|---|---|---|---|
| A100 80 GB o H100 | Pi0.5, GR00T N1.7, GR00T N1.5 | 3 hanggang 6 na oras | 1.20 hanggang 2.00 USD | mga 4 hanggang 12 USD |
| RTX 4090 o anumang 24 GB card | SmolVLA, ACT | 2 hanggang 5 oras | 0.30 hanggang 0.60 USD | mga 1 hanggang 3 USD |

Bago maglaan ng isang gabi: GR00T N1.7 laban sa Pi0.5 at Pi0.5 laban sa SmolVLA ay nagpapakita ng parehong mga numero nang direkta. Ang Arena ay naglalaman ng 85 modelo ng VLA na may 332 resulta ng benchmark, bawat isa ay naka-link sa pinagmulan nito, at ang background tungkol sa pamilya ay nasa aming pangkalahatang-ideya ng VLA.
Sanayin ang Pi0.5 nang hindi binubuo ang stack
Piliin ang dataset at ang mga hyperparameter sa isang form. Ang backend ay umuupa ng 80 GB card sa spot market, pinapatakbo ang trainer at isinusulat ang mga checkpoint sa object storage. Mga gabay para sa SO-100, SO-101, Koch v1.1 at LeKiwi.
Buksan ang mga gabay sa pagsasanayMaaari ko bang i-fine-tune ang Pi0.5 sa isang RTX 4090?▾
Hindi isang buong fine-tune: ang openpi ay naglilista ng higit sa 70 GB para doon, kaya isang A100 80 GB o isang H100. Ang 22.5 GB na LoRA figure nito ay kabilang sa JAX path; ang PyTorch implementation ay walang LoRA. Mayroon ang PEFT integration ng LeRobot, ngunit ang dokumentadong halimbawa nito ay SmolVLA at walang VRAM figure na inilathala para sa pi05.
Ilang episode ang kailangan ko?▾
Limampu, ang parehong pinakamababang bilang tulad ng GR00T at ACT; tanging ang SmolVLA lamang ang mas mababa, sa 30. Ang base checkpoint ay nagdadala ng higit sa 10,000 oras ng pre-training, kaya ang fine-tune ay umaangkop sa halip na matuto mula sa wala: 50 malinis, iba't ibang episode ang mas mahusay kaysa sa dalawang daan mula sa isang configuration.
Ano ang pagkakaiba sa pagitan ng --policy.path at --policy.pretrained_path?▾
--policy.path ay naglo-load ng mga weights at ang config.json ng checkpoint, kaya ang mga nakaimbak na setting tulad ng n_action_steps ay namamana at ang --policy.type ay dapat alisin. Ang --policy.pretrained_path ay naglo-load lamang ng mga weights: ang mga pangalan ng feature ay nagmumula sa iyong dataset, ang mga nakaimbak na setting ay nire-reset, ang --policy.type ay kinakailangan. Iyan ang dahilan kung bakit ang LIBERO command ay nagpapasa ng n_action_steps=10 at empty_cameras=1 nang tahasan; kung hindi, babalik sila sa 50 at 0.
Nagbibigay ba ang open version sa akin ng buong Pi0.5 mula sa papel?▾
Hindi. Pareho silang sumusuporta lamang sa flow matching action head. Ang discrete-token pre-training stage na may FAST action tokenizer at ang high-level subtask prediction ay hindi inilabas, at ang lerobot/pi05_base card ay nagdaragdag ng RL sa listahang iyon kahit na ang pi0.5 paper ay hindi naglalarawan ng reinforcement learning stage. Nagsasanay ka ng isang low-level na patakaran na nakakondisyon sa isang language string na iyong ibinibigay, hindi isang modelo na nagde-decompose ng isang mahabang gawain mismo.
Aling mga bersyon ang batayan ng gabay na ito?▾
Ang openpi sa main at lerobot 0.6.1, ang release mula noong 3 Agosto 2026, parehong nabasa noong 23 Agosto 2026. Ang mga v3.0 dataset ay dumating kasama ng 0.4.0 noong Oktubre 2025. Ginawa ng 0.6.0 na maging lightweight ang base package, kaya ang lerobot[pi] lamang ay hindi na nag-i-install ng training stack, at inilipat ang deployment sa lerobot-rollout. Ang Training-time RTC ay nasa main lamang; ang hosted trainer dito ay nagpapatakbo ng 0.5.1.
Sources
- Physical-Intelligence/openpi: open-source models and packages for robotics
- openpi training configs, including pi05_libero and pi05_droid_finetune
- 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
- PaliGemma: A versatile 3B VLM for transfer
- Training-Time Action Conditioning for Efficient Real-Time Chunking
- LeRobot pi05 documentation on the main branch, including training-time RTC
- LeRobot documentation: parameter efficient fine-tuning with PEFT
- LeRobotDataset v3.0 format documentation
- LeRobot release notes: v0.3.2 through v0.6.1, with the v0.6.0 breaking changes
- LeRobot v0.5.0: Scaling Every Dimension
- lerobot/pi05_base model card
- LeRobot documentation: Real-Time Chunking (RTC)
- openpi Pi0Config: the model defaults pi0 and pi05 inherit
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started