
Finjustera Pi0.5, den flödesmatchande VLA:n från Physical Intelligence, med dina egna robotdata. Verkliga kommandon för openpi och lerobot pi05, fallgropar i datasetformatet, VRAM- och latensbegränsningar.
Pi0.5 är modellen du väljer när en policy måste fungera i ett rum den aldrig har sett. Det är också den mest besvärliga av de fem träningsbara policyer här för att finjustera för hand: det uppströmslagret är JAX-först, LeRobot-porten flyttade ut distributionen från lerobot-record i 0.6.0 och gjorde basinstallationen för liten för att träna med, och en fullständig finjustering får inte plats på en 4090. Nedan: vad flödesmatchning kostar vid inferens, de två kommandovägarna och siffran 485 ms som avgör om resultatet är användbart.
Vad du behöver veta
- •En flödesmatchande VLA: en 3B PaliGemma VLM plus en 300M åtgärdsexpert som avkodar kontinuerliga åtgärdssegment. Två vägar för att finjustera den, openpi och LeRobot pi05, 0.65 poäng ifrån varandra på LIBERO-genomsnittet.
- •Fullständig finjustering kräver mer än 70 GB VRAM. openpi listar LoRA vid 22.5 GB, endast på sin JAX-väg.
- •Datasetet måste vara LeRobotDataset v3.0 med q01- och q99-kvantiler i meta/stats.json, annars misslyckas den första batchen.
- •Kontrollera din lerobot-version först: 0.6.0 gjorde baspaketet lättviktigt och flyttade ut distributionen från lerobot-record.
- •Här körs den med 485 ms per åtgärdssteg, kräver 50 episoder och kostar cirka 4 till 12 USD per körning.
Vad Pi0.5 egentligen är
Physical Intelligence publicerade pi0 i oktober 2024: en flödesmatchande syn-språk-handlingsmodell på en förtränad VLM: PaliGemma med 3 miljarder parametrar plus en 300M åtgärdsexpert initialiserad från grunden, totalt 3.3 miljarder. Rapporten redovisar förträning på över 10 000 timmar robotdata över 7 robotkonfigurationer och 68 uppgifter. Mer i pi0-artikeln.
Pi0.5 (arXiv 2504.16054, 22 April 2025) behåller det skelettet och ändrar träningsdieten: webbdata, objektdetektering, verbala instruktioner från människor som coachar roboten, deluppgiftsetiketter, data från olika robotkroppar i många hem. Resultatet är en robot som städar kök i hus som inte ingick i träningsuppsättningen. openpi README lägger till en detalj som titeln inte gör: den släppta pi0.5 tränades med kunskapsisolering (arXiv 2505.23705).
| Egenskap | pi0 | pi0.5 |
|---|---|---|
| VLM-ryggradsvariant | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) |
| Åtgärdsexpertvariant | gemma_300m | gemma_300m |
| action_dim | 32 | 32 |
| Standardvärde för åtgärdshorisont | 50 | 50 |
| max_token_len | 48 | 200 |
| diskret tillståndsinmatning | false | true, tillstånd diskretiserat i fack i prompten |
| Bas-checkpoint | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
openpi README är tydlig: repot stöder endast flow matching-huvudet, för både pi0.5-träning och inferens. Artikeln beskriver två steg och koden innehåller endast det andra: förträning representerar varje åtgärd som diskreta tokens via FAST-tokenizern, och vid driftsättning härleder modellen en högnivådeluppgift före varje åtgärdssegment. Inget av dessa finns i repot. Den lerobot/pi05_base-kortet ger samma lista och lägger till RL, även om pi0.5-artikeln inte beskriver något förstärkningsinlärningssteg alls. LeRobot-porten ärver det omfånget, och det gör även varje hostad tränare på den, inklusive den här. Licensieringen är också uppdelad: pi05-dokumentsidan säger Apache 2.0, den lerobot/pi05_base-kortet är taggat license: gemma.
Vad flow matching ändrar gällande träning och inferens
En policy som du kan träna på en SO-100 antingen regresserar handlingar direkt (ACT) eller tokeniserar dem och avkodar autoregressivt (pi0-FAST). Flödesmatchning gör ingetdera: den lär sig ett vektorfält som transporterar brus till en ren handlingsbit, och integrerar den sedan. Pi0-artikeln använder 10 integrationssteg med stegstorlek 0.1; LeRobots pi05-konfiguration har samma num_inference_steps: int = 10.
- Träning: förlusten regresserar en brusig handlingsbit. Ingen tokeniserare att finjustera, ingen diskretisering av dina ledvinklar.
- Inferens: en bit kostar tio framåtkörningar genom handlingsexperten. Det är strukturellt, inte ett finjusteringsproblem.
- Utdata: kontinuerliga handlingar av dimension 32, internt utfyllda, förlust beräknad på de dimensioner din robot har. En 6-DoF arm plus gripdon använder 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 TruePaliGemma-ryggraden, och grinden framför den
PaliGemma (arXiv 2407.07726) är en SigLIP-So400m visionskodare på en Gemma-2B språkmodell, med cirka 3 miljarder parametrar. Pi0.5 ärver dess tokenizer, och den tokenizern finns i ett begränsat (gated) arkiv. Detta är det vanligaste sättet en första körning misslyckas, innan det första träningssteget.
LeRobot pi05-dokumentationen anger det tydligt: pi0.5 använder den begränsade google/paligemma-3b-pt-224 tokenizern, så acceptera dess licens på Hubben och kör hf auth login först. Åtkomst beviljas manuellt, inte omedelbart. Hoppa över det, starta en betald molnköring, och du betalar för en pod som inte kan ladda ner en tokenizer.
Innan du börjar: datasetformat, episoder, hårdvara
Pi0.5 i LeRobot läser ett LeRobot-dataset i v3.0-layout, som lanserades med lerobot 0.4.0 i oktober 2025: många episoder per Parquet- och MP4-fil istället för en fil per episod, med gränser i meta/episodes/ istället för filnamn. Spela in med skrivbordsklienten eller följ spela in ditt första dataset och du har det.
| Läge | GPU-minne krävs | Exempel-GPU |
|---|---|---|
| Inferens | mer än 8 GB | RTX 4090 |
| Finjustering, LoRA | mer än 22.5 GB | RTX 4090 |
| Finjustering, full | mer än 70 GB | A100 80 GB or H100 |
Pi0.5 och SmolVLA kräver LeRobot v3.0. GR00T N1.7 och GR00T N1.5 kräver v2.0 eller v2.1 och kraschar med ett v3.0-dataset. En inspelningssession kan inte mata båda utan en konvertering, och felet säger inte "fel datasetversion". Se dataset avvisat: v3 krävs.
# 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 offsetsPlattformen kräver minst 50 avsnitt för Pi0.5, samma miniminivå som för GR00T och ACT. Förträning gör det tunga arbetet, så 50 rena avsnitt är bättre än 200 slarviga. Ny på detta? Börja med datainsamlingsguiden.

Rutt A: finjustera med openpi-förrådet
Referensimplementeringen: JAX först, endast testad på Ubuntu 22.04, driven av konfigurationsobjekt snarare än flaggor. En PyTorch-väg anlände i september 2025, validerad på LIBERO. Tre steg: konvertera din data, definiera en konfiguration, träna och driftsätt.
- 1Klona och installera
openpi använder uv. GIT_LFS_SKIP_SMUDGE är det som låter LeRobot inkluderas som ett beroende utan LFS-blobbar.
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 . - 2Konvertera din data till ett LeRobot-dataset
Upstream levererar konverterare för LIBERO och DROID och förväntar sig att du anpassar en. Arbetet är nyckelmappningen.
bashuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data - 3Lägg till en träningskonfiguration
Konfigurationer är TrainConfig-poster i src/openpi/training/config.py. Denna anpassar pi05_droid_finetune, med viktladdaren pekande på 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, ) - 4Beräkna normaliseringsstatistik
Körs mot konfigurationsnamnet, inte datasetet. Att hoppa över det är det klassiska första felet här.
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5Träna
Variabeln låter JAX använda 90 procent av GPU-minnet istället för standardvärdet 75. På ett 80 GB-kort avgör det om körningen överlever.
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6Driftsätt den
Servern lyssnar på port 8000 och svarar på observationsfrågor; din robotkörtid är klienten.
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
openpi:s PyTorch-implementering stöder inte pi0-FAST, blandad precision, FSDP, LoRA eller EMA-vikter, så LoRA som når 22.5 GB är endast JAX, via varianterna gemma_2b_lora och gemma_300m_lora. Värre: installationen kopierar patchade filer över dina installerade transformers 4.53.2, och README varnar för att med uv:s standardläge för hårdlänkar modifierar detta permanent transformers i uv-cachen och kan läcka in i andra projekt. Ångra det med uv cache clean transformers.
Rutt B: finjustera med lerobot pi05
LeRobot-porten omsluter samma vikter i CLI som du redan använder för ACT och SmolVLA. Allt nedan kontrollerades mot lerobot 0.6.1, releasen sedan 3 augusti 2026, och pi05-dokumentationen den 23 augusti 2026. Versioner spelar roll här: v3.0-dataset anlände med 0.4.0 i oktober 2025, 0.5.0-bloggen den 9 mars 2026 presenterar pi0-FAST och Real-Time Chunking, och 0.6.0 den 6 juli 2026 gjorde baspaketet lättviktigt och flyttade distributionen till lerobot-rollout.
En sak flyttades inte: lerobot-train och lerobot-record var redan startpunkter i 0.3.2, augusti 2025. En handledning som fortfarande anropar python -m lerobot.scripts.train föregår ett års förändringar och är värd att misstro även i övrigt.
- 1Installera med rätt tillägg
Sedan 0.6.0 innehåller basinstallationen endast kärnberoenden för maskininlärning, och pi-tillägget lägger inte till någon dataset- eller träningskod, så en finjustering kräver även tränings-tillägget. Äldre enradskommandon misslyckas här vid import.
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]' - 2Autentisera
Acceptera paligemma-3b-pt-224-licensen i en webbläsare, logga sedan in på maskinen som tränar.
bashhf auth login - 3Lägg till kvantilstatistik
Pi0.5 normaliserar STATE och ACTION med kvantiler, så meta/stats.json behöver q01 och q99. Äldre dataset innehåller endast min, max, medelvärde, std.
bashlerobot-edit-dataset \ --repo_id your_dataset \ --new_repo_id your_dataset \ --operation.type recompute_stats \ --operation.overwrite true - 4Finjustera från lerobot/pi05_base
Ställ in batchstorleken till vad ditt grafikkort klarar; dokumentationen använder 64 på LIBERO med 80 GB. Skicka bfloat16 explicit, standardinställningen i konfigurationen är 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 - 5Kör den på armen
I 0.6.x är detta lerobot-rollout: lerobot-record vägrar en policy och avvisar eval_-datasetnamn. Base driver armen, sentry spelar in rollouten.
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
| Flagga | Vad den gör | Anmärkning |
|---|---|---|
| --policy.type=pi05 | väljer Pi0.5 | obligatorisk med pretrained_path, utelämna med --policy.path |
| --policy.pretrained_path | laddar endast vikter | funktionsnamn från ditt dataset, lagrade inställningar återställs |
| --policy.path | vikter plus checkpoint config.json | lagrade inställningar som n_action_steps ärvs |
| --policy.n_action_steps | steg som förbrukas per chunk | återgår till 50, aldrig över chunk_size (standard 50) |
| --policy.train_expert_only | fryser VLM, tränar experten | standard false, mindre minne, viss kostnad i framgång |
| --policy.gradient_checkpointing | omberäkna istället för att lagra aktiveringar | standard false, den första spaken när en körning inte får plats |
| --peft.method_type=LORA | LoRA-adaptrar istället för fulla vikter | kräver peft-tillägget, dokumenterat exempel är SmolVLA |
| --policy.rtc_training_max_delay | action-prefix-konditionering för RTC | endast huvudgrenen, inte i 0.6.1, måste ligga under chunk_size |
| --rename_map | mappar datasetkolumner till policyfunktioner | behövs när dina kameranycklar skiljer sig åt |
Utan kvantiler får du ValueError: QUANTILES normalization mode requires q01 and q99 stats vid första batchen. Beräkna om statistiken, men resultatet hamnar i $HF_LEROBOT_HOME/your_dataset, inte i cachen som --dataset.repo_id läser, så träna med --dataset.root pekande dit eller pusha till Hubben. Eller hoppa över kvantiler med --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}', som LIBERO-referenskommandot gör.
Tre uppsättningar standardvärden, och vilka som når tränaren
openpi:s TrainConfig är referensen, LeRobots PI05Config är vad lerobot-train använder när du inte anger något, och formuläret här skickar en tredje uppsättning. Överraskningen är inlärningshastigheten: båda standardinställningarna uppströms toppar på 2.5e-5, medan openpi:s egen pi05_libero-konfiguration och denna plattform höjer den till 5e-5.
| Inställning | openpi TrainConfig | lerobot pi05 och lerobot-train | AY-Robots skickar |
|---|---|---|---|
| Batchstorlek | 32 | 8 | 1 |
| Toppinlärningshastighet | 2.5e-5, cosinusavtagande | optimizer_lr 2.5e-5 | 5e-5 |
| Träningssteg | 30,000 | 100,000 | 30,000 |
| Kontrollpunktsintervall | 1,000 steg | 20,000 steg | inte i formuläret |
| Seed | 42 | 1,000 | i formuläret |
| Åtgärdsbit | action_horizon 50 | chunk_size 50, n_action_steps 50 | inte i formuläret |
| Vikt-dtype | bfloat16 | float32 tills du skickar --policy.dtype | inte i formuläret |
| Gradientackumulering | ingen sådan inställning, fsdp_devices istället | frånvarande i varje utgåva hittills | 16, och den tas bort |
Är portningen trogen? LeRobot-teamet finjusterade LIBERO-basmodellen i ytterligare 6k steg och jämförde med openpi:s referensvärden på fyra sviter: 97.5 procent i genomsnitt mot 96.85, före på Libero 10, efter på Spatial. Vägen är ett verktygsval, inte ett kvalitetsval.
- Mer än 10,000 timmar av robotförträning ligger bakom det, så 50 episoder av din uppgift kan vara tillräckligt.
- Kontinuerliga åtgärder: ingen tokenizer att finjustera, ingen diskretiseringsgräns för dina ledvinklar.
- LeRobot-portningen får 97.5 procent i LIBERO-genomsnittet mot openpi:s 96.85, så den vänligare CLI:n kostar inget mätbart.
- Parameter-effektiva vägar på båda sidor: openpi:s JAX LoRA-varianter, LeRobots PEFT-integration.
- Fullständig finjustering kräver mer än 70 GB. Siffran 22.5 GB LoRA är openpi:s JAX-värde; inget är publicerat för pi05 under PEFT.
- 485 ms per åtgärdssteg, långsammast av de fem här: dubbelt så långsamt som SmolVLA, tjugofyra gånger långsammare än ACT.
- LeRobot v3.0 krävs, så en dataset inspelad för en GR00T-körning behöver konverteras, och vice versa.
- Nya alternativ landar på main först: RTC- och MEM-minne vid träningstid finns inte i 0.6.1, så de senaste dokumenten kan innebära installation från git.
Verkligheten med 485 ms, och var det slutar vara användbart
Detta avgör ditt projekt, så det kommer före kostnadstabellen. per åtgärdssteg mätt här för Pi0.5 är 485 ms. Jämfört med de andra fyra:
| Policy | Inferens per åtgärdssteg | Parametrar | GPU-nivå | Minsta antal episoder |
|---|---|---|---|---|
| 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 |

Kontrollslingan över dessa fem modeller körs 20 till 485 ms per åtgärdssteg. Tur och retur-resor över det publika internet utöver 485 ms förvandlar en fungerande policy till en tveksam. Fjärrinferens är genomförbart för långsam plock-och-placering, inte för snabb reaktiv rörelse. Vi skulle hellre säga det än att sälja en demo som bara fungerar på ett LAN. Om din arm pausar mellan segment, börja vid policy fryser mitt i rörelsen.
Uppströms har ett svar, och hälften av det finns redan i den version du kan installera. Real-Time Chunking genererar nästa segment medan armen fortfarande utför det nuvarande, och vägleder sedan de överlappande stegen i det nya segmentet att hålla sig nära den del som redan utförts, så att armen inte stannar eller rycker vid skarven. Inferens-tidsformen levererades i 0.4.2-ändringsloggen för Pi0, Pi0.5 och SmolVLA och är en utrullningsflagga, inte en omträning:
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=60Det gör inte modellen snabbare. Det döljer gapet: de 485 ms spenderas fortfarande, men utanför den kritiska sökvägen, så kön torkar inte ut mellan segmenten. Tränings-tidsvarianten från arXiv 2512.05964 går längre: modellen lär sig att villkora på ett rent åtgärdsprefix, så vid inferens är överlappningen hårt in-målad med flödestidssteg per åtgärd istället för guidad, och den bakåtgående vägledningspassagen försvinner. Under träning samplar den en prefixlängd per exempel och tar flödesförlusten på det återstående postfixet. Den flaggan finns endast på main, inte i 0.6.1, och fördröjningen du tränar för måste hålla sig under chunk_size.
Två sätt att få en Pi0.5 checkpoint
Du hyr eller äger ett 80 GB-kort, installerar en av ovanstående stackar, konverterar din datamängd och övervakar körningen. Du behåller alla inställningsmöjligheter: openpi:s JAX LoRA, LeRobot:s PEFT-adaptrar, relativa åtgärder, anpassade tangentmappningar. Du behåller också alla misslyckanden.
- Hårdvara: A100 80 GB eller H100, eller ett 24 GB-kort med openpi:s JAX LoRA-väg.
- Installation: en eftermiddag för den första körningen, mestadels tangentmappning och den gated tokenizer.
- Inte på det hostade formuläret: PEFT-adaptrar, relativa åtgärder, träningstids-RTC, MEM-minne.
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=1000Du väljer modell och datamängd i träningsformuläret, backend hyr en GPU på en spotmarknad baserat på nödvändig VRAM, kör tränaren och skriver checkpoints till objektlagring. Pi0.5 är endast molnbaserad här. Guider finns för SO-100, SO-101, Koch v1.1 och LeKiwi.
| Inställning | Vad plattformen skickar för Pi0.5 |
|---|---|
| Bas-checkpoint | lerobot/pi05_base |
| Policytyp | pi05 |
| Batchstorlek | 1 |
| Inlärningshastighet | 5e-5 |
| Max antal steg | 30000 |
| Gradientackumulering | 16, men se varningen nedan |
| Extra inställningar i formuläret | seed, logFreq |
| Datasetformat | LeRobot v3.0 |
| GPU-nivå | A100 80 GB eller H100 80 GB |
Tränaren skickar ett värde för gradientackumulering på 16 och lerobot 0.5.1 har ingen flagga för att ta emot det, så det ignoreras. Ingen släppt lerobot har en sådan: inställningen finns endast i main, som --accelerator.gradient_accumulation.steps. Den effektiva batchstorleken här är 1, jämfört med de 256 som openpi:s pi05_libero-konfiguration använder. Värt att veta innan du läser en förlustkurva. Inställningen gäller dock för GR00T N1.7 och GR00T N1.5-körningar.
Inferens fungerar på samma sätt: en pod provisioneras för att tillhandahålla policyn och din lokala klient kommunicerar med den. Podden har en inaktiv watchdog och förstör sig själv, så en bortglömd flik fakturerar inte tyst. Latensvarningen gäller, vilket är anledningen till att ACT med 20 ms ofta vinner en snabb uppgift.
När det inte fungerar
| Symptom | Mest sannolika orsak |
|---|---|
| Körning avvisades innan den startade | Dataset v2.1 men Pi0.5 vill ha v3.0, eller omvänt för GR00T |
| ImportError, paketet datasets saknas | lerobot 0.6.x utan training extra |
| ValueError om q01 och q99 på batch ett | Inga kvantiler i meta/stats.json; beräkna om eller använd MEAN_STD |
| CUDA slut på minne vid steg 0 | Full finjustering under 70 GB; prova checkpointing eller train_expert_only |
| 401 eller gated repo-fel | PaliGemma tokenizer-licens ej accepterad |
| Förlusten sjunker, roboten gör ingenting | Normaliseringsfel, eller policyn kopierar tillståndet |
| Armen pausar mellan segment | Latens per steg plus tur och retur; segmentkön blir tom |
| Fungerar i en konfiguration, misslyckas i en annan | För få episoder, eller alla i en konfiguration |
- Dataset avvisat: v3 krävs
- Slut på minne under träning
- Förlusten minskar men policyn gör ingenting
- Policyn fryser mitt i rörelsen
- Policyn fungerar bara i en konfiguration
- Träningsjobb fastnat i kö
Vad en körning kostar
Pi0.5 ligger i den dyra nivån eftersom det kräver ett 80 GB-kort, och spotpriserna rör sig, så siffran är ett intervall snarare än ett pris. För många SO-100-uppgifter, träna SmolVLA eller ACT på 24 GB-nivån först, bekräfta att uppgiften överhuvudtaget är inlärningsbar, spendera sedan A100-timmar på den. Träna din första policy går igenom den billigare loopen, och prissättning innehåller de aktuella nivåerna.
| Nivå | Policyer | Typisk körning | Pris per timme | Kostnad per körning |
|---|---|---|---|---|
| A100 80 GB eller H100 | Pi0.5, GR00T N1.7, GR00T N1.5 | 3 till 6 timmar | 1.20 till 2.00 USD | cirka 4 till 12 USD |
| RTX 4090 eller vilket 24 GB-kort som helst | SmolVLA, ACT | 2 till 5 timmar | 0.30 till 0.60 USD | cirka 1 till 3 USD |

Innan du ägnar en kväll åt det: GR00T N1.7 mot Pi0.5 och Pi0.5 mot SmolVLA presenterar samma siffror sida vid sida. Arenan innehåller 85 VLA-modeller med 332 benchmarkresultat, var och en länkad till sin källa, och bakgrund om familjen finns i vår VLA-översikt.
Träna Pi0.5 utan att bygga stacken
Välj dataset och hyperparametrar i ett formulär. Backend hyr ett 80 GB-kort på spotmarknaden, kör tränaren och skriver checkpoints till objektlagring. Guider för SO-100, SO-101, Koch v1.1 och LeKiwi.
Öppna träningsguidernaKan jag finjustera Pi0.5 på en RTX 4090?▾
Inte en fullständig finjustering: openpi listar mer än 70 GB för det, så en A100 80 GB eller en H100. Dess 22.5 GB LoRA-siffra tillhör JAX-vägen; PyTorch-implementeringen har ingen LoRA. LeRobot's PEFT-integration finns, men dess dokumenterade exempel är SmolVLA och ingen VRAM-siffra är publicerad för pi05.
Hur många episoder behöver jag?▾
Femtio, samma golv som GR00T och ACT; endast SmolVLA går lägre, vid 30. Bas-checkpointen innehåller mer än 10 000 timmars förträning, så finjusteringen anpassar sig snarare än lär sig från ingenting: 50 rena, varierade episoder slår tvåhundra från en konfiguration.
Vad är skillnaden mellan --policy.path och --policy.pretrained_path?▾
--policy.path laddar vikter och checkpointens config.json, så lagrade inställningar som n_action_steps ärvs och --policy.type måste utelämnas. --policy.pretrained_path laddar endast vikter: funktionsnamn kommer från ditt dataset, lagrade inställningar återställs, --policy.type krävs. Det är därför LIBERO-kommandot skickar n_action_steps=10 och empty_cameras=1 explicit; annars faller de tillbaka till 50 och 0.
Ger den öppna versionen mig den fullständiga Pi0.5 från pappret?▾
Nej. Båda stöder endast flow matching action head. Det diskreta-token förträningssteget med FAST action tokenizer och den högnivå subtask-prediktionen släpptes inte, och lerobot/pi05_base-kortet lägger till RL till den listan trots att pi0.5-pappret inte beskriver något förstärkningsinlärningssteg. Du tränar en lågnivåpolicy villkorad av en språksträng du tillhandahåller, inte en modell som dekomponerar en lång uppgift själv.
Vilka versioner är denna guide skriven mot?▾
openpi på main och lerobot 0.6.1, releasen sedan 3 augusti 2026, båda lästa den 23 augusti 2026. v3.0-dataset anlände med 0.4.0 i oktober 2025. 0.6.0 gjorde baspaketet lättviktigt, så lerobot[pi] ensam installerar inte längre en träningsstack, och flyttade deployment till lerobot-rollout. Träningstids-RTC finns endast på main; den hostade tränaren här kör 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