AY-Robots träningsmatris med fem policyer som rader och fyra robotarmar som kolumner, varje cell en länk till en specifik finjusteringsguide
Pi0.5FlödesmatchningVLA-träningLeRobotFinjustering

Hur man tränar Pi0.5 med dina egna robotdata

AY-Robots ResearchAugust 23, 202616 min läsning

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).

Egenskappi0pi0.5
VLM-ryggradsvariantgemma_2b (PaliGemma)gemma_2b (PaliGemma)
Åtgärdsexpertvariantgemma_300mgemma_300m
action_dim3232
Standardvärde för åtgärdshorisont5050
max_token_len48200
diskret tillståndsinmatningfalsetrue, tillstånd diskretiserat i fack i prompten
Bas-checkpointgs://openpi-assets/checkpoints/pi0_basegs://openpi-assets/checkpoints/pi05_base
Vad som är offentligt är inte hela artikeln

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.
python
# 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 True
Läst från src/openpi/models/pi0_config.py på openpi:s huvudgren, 23 augusti 2026.

PaliGemma-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.

Acceptera den begränsade licensen innan du hyr en GPU

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ägeGPU-minne krävsExempel-GPU
Inferensmer än 8 GBRTX 4090
Finjustering, LoRAmer än 22.5 GBRTX 4090
Finjustering, fullmer än 70 GBA100 80 GB or H100
Versionsfällan som kostar en dag

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.

bash
# 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 offsets
Från LeRobotDataset v3.0-dokumentationen.

Plattformen 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.

AY-Robots policy-sida som jämför de fem träningsbara policyerna efter parametrar, GPU-nivå, latens och minsta antal episoder
Pi0.5 ligger i A100- och H100-nivån med 485 ms per åtgärdssteg, med ett golv på 50 episoder.

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.

  1. 1
    Klona och installera

    openpi använder uv. GIT_LFS_SKIP_SMUDGE är det som låter LeRobot inkluderas som ett beroende utan LFS-blobbar.

    bash
    git 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 .
  2. 2
    Konvertera 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.

    bash
    uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data
  3. 3
    Lä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.

    python
    TrainConfig(
        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,
    )
  4. 4
    Beräkna normaliseringsstatistik

    Körs mot konfigurationsnamnet, inte datasetet. Att hoppa över det är det klassiska första felet här.

    bash
    uv run scripts/compute_norm_stats.py --config-name pi05_so100
  5. 5
    Trä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.

    bash
    XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \
        --exp-name=my_experiment \
        --overwrite
  6. 6
    Driftsätt den

    Servern lyssnar på port 8000 och svarar på observationsfrågor; din robotkörtid är klienten.

    bash
    uv run scripts/serve_policy.py policy:checkpoint \
        --policy.config=pi05_so100 \
        --policy.dir=checkpoints/pi05_so100/my_experiment/20000
PyTorch-vägen är inte JAX-vägen

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.

  1. 1
    Installera 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]'
  2. 2
    Autentisera

    Acceptera paligemma-3b-pt-224-licensen i en webbläsare, logga sedan in på maskinen som tränar.

    bash
    hf auth login
  3. 3
    Lä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.

    bash
    lerobot-edit-dataset \
        --repo_id your_dataset \
        --new_repo_id your_dataset \
        --operation.type recompute_stats \
        --operation.overwrite true
  4. 4
    Finjustera 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.

    bash
    lerobot-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
  5. 5
    Kö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.

    bash
    lerobot-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
FlaggaVad den görAnmärkning
--policy.type=pi05väljer Pi0.5obligatorisk med pretrained_path, utelämna med --policy.path
--policy.pretrained_pathladdar endast vikterfunktionsnamn från ditt dataset, lagrade inställningar återställs
--policy.pathvikter plus checkpoint config.jsonlagrade inställningar som n_action_steps ärvs
--policy.n_action_stepssteg som förbrukas per chunkåtergår till 50, aldrig över chunk_size (standard 50)
--policy.train_expert_onlyfryser VLM, tränar expertenstandard false, mindre minne, viss kostnad i framgång
--policy.gradient_checkpointingomberäkna istället för att lagra aktiveringarstandard false, den första spaken när en körning inte får plats
--peft.method_type=LORALoRA-adaptrar istället för fulla vikterkräver peft-tillägget, dokumenterat exempel är SmolVLA
--policy.rtc_training_max_delayaction-prefix-konditionering för RTCendast huvudgrenen, inte i 0.6.1, måste ligga under chunk_size
--rename_mapmappar datasetkolumner till policyfunktionerbehövs när dina kameranycklar skiljer sig åt
Felet de flesta första körningar stöter på

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ällningopenpi TrainConfiglerobot pi05 och lerobot-trainAY-Robots skickar
Batchstorlek3281
Toppinlärningshastighet2.5e-5, cosinusavtagandeoptimizer_lr 2.5e-55e-5
Träningssteg30,000100,00030,000
Kontrollpunktsintervall1,000 steg20,000 steginte i formuläret
Seed421,000i formuläret
Åtgärdsbitaction_horizon 50chunk_size 50, n_action_steps 50inte i formuläret
Vikt-dtypebfloat16float32 tills du skickar --policy.dtypeinte i formuläret
Gradientackumuleringingen sådan inställning, fsdp_devices iställetfrånvarande i varje utgåva hittills16, 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.

Finjustering av Pi0.5 på din egen data
Fördelar
  • 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.
Kompromisser
  • 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:

PolicyInferens per åtgärdsstegParametrarGPU-nivåMinsta antal episoder
ACT20 ms~80 MRTX 4090 or any 24 GB card50
GR00T N1.7152 ms~3 BA100 80 GB or H100 80 GB50
GR00T N1.5165 ms~3 BA100 80 GB or H100 80 GB50
SmolVLA245 ms~450 MRTX 4090 or any 24 GB card30
Pi0.5485 ms~3 BA100 80 GB or H100 80 GB50
AY-Robots jämförelsesida för GR00T N1.7 mot Pi0.5, med parametrar, GPU-nivå, latens och datasetformat
Samma GPU-nivå, samma lägsta antal episoder, olika datasetversion, trefaldig latensskillnad.
Inferens måste sitta nära servona

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:

bash
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=60
execution_horizon är hur många steg av det föregående segmentet som det nya måste överensstämma med; RTC-dokumentationen anger 8 till 12 som det vanliga intervallet. Standardinferens-backend är --inference.type=sync.

Det 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.
bash
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=1000
Kommandot som inget hostat formulär kör, och pip kan inte installera: training-time RTC är en flagga i huvudgrenen.

När det inte fungerar

SymptomMest sannolika orsak
Körning avvisades innan den startadeDataset v2.1 men Pi0.5 vill ha v3.0, eller omvänt för GR00T
ImportError, paketet datasets saknaslerobot 0.6.x utan training extra
ValueError om q01 och q99 på batch ettInga kvantiler i meta/stats.json; beräkna om eller använd MEAN_STD
CUDA slut på minne vid steg 0Full finjustering under 70 GB; prova checkpointing eller train_expert_only
401 eller gated repo-felPaliGemma tokenizer-licens ej accepterad
Förlusten sjunker, roboten gör ingentingNormaliseringsfel, eller policyn kopierar tillståndet
Armen pausar mellan segmentLatens per steg plus tur och retur; segmentkön blir tom
Fungerar i en konfiguration, misslyckas i en annanFör få episoder, eller alla i en konfiguration

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åPolicyerTypisk körningPris per timmeKostnad per körning
A100 80 GB eller H100Pi0.5, GR00T N1.7, GR00T N1.53 till 6 timmar1.20 till 2.00 USDcirka 4 till 12 USD
RTX 4090 eller vilket 24 GB-kort som helstSmolVLA, ACT2 till 5 timmar0.30 till 0.60 USDcirka 1 till 3 USD
AY-Robots kostnadstabell som visar vilken GPU varje policy behöver, typisk körtid och pris, samt hur många episoder som behövs innan en policy är användbar
Samma två nivåer på produktsidan: Pi0.5 hyr 80 GB-kortet, SmolVLA och ACT passar på en 4090.

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äningsguiderna
Kan 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.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started