La matrice di addestramento AY-Robots con cinque policy come righe e quattro bracci robotici come colonne, ogni cella un link a una guida specifica di fine-tuning
Pi0.5Flow MatchingAddestramento VLALeRobotFine-Tuning

Come Addestrare Pi0.5 sui Tuoi Dati Robotici

AY-Robots ResearchAugust 23, 202616 min di lettura

Metti a punto Pi0.5, il VLA flow-matching di Physical Intelligence, sui tuoi dati robotici. Comandi reali per openpi e lerobot pi05, insidie del formato del dataset, limiti di VRAM e latenza.

Pi0.5 è il modello a cui si ricorre quando una policy deve funzionare in una stanza che non ha mai visto. È anche il più ostico dei cinque policy addestrabili qui per effettuare il fine-tuning manualmente: il repository upstream è JAX-first, il porting LeRobot ha spostato il deployment fuori da lerobot-record in 0.6.0 e ha reso l'installazione base troppo piccola per l'addestramento, e un fine-tuning completo non si adatta a una 4090. Di seguito: cosa flow matching costa in inferenza, le due vie di comando e il numero di 485 ms che decide se il risultato è utilizzabile.

Cosa c'è da sapere

  • Un VLA con flow-matching: un VLM PaliGemma da 3B più un esperto di azioni da 300M che decodifica blocchi di azioni continue. Due percorsi per il fine-tuning, openpi e LeRobot pi05, con 0.65 punti di differenza sulla media LIBERO.
  • Il fine-tuning completo richiede più di 70 GB di VRAM. openpi elenca LoRA a 22.5 GB, solo sul suo percorso JAX.
  • Il dataset deve essere LeRobotDataset v3.0 con quantili q01 e q99 in meta/stats.json, altrimenti il batch fallisce.
  • Controlla prima la tua versione di lerobot: la 0.6.0 ha reso il pacchetto base leggero e ha spostato il deployment fuori da lerobot-record.
  • Qui funziona a 485 ms per passo d'azione, richiede 50 episodi e costa circa 4-12 USD per esecuzione.

Cos'è realmente Pi0.5

Physical Intelligence ha pubblicato pi0 nell'ottobre 2024: un modello visione-linguaggio-azione con flow matching basato su un VLM pre-addestrato: PaliGemma con 3 miliardi di parametri più un esperto di azioni da 300M inizializzato da zero, per un totale di 3.3 miliardi. Il paper riporta un pre-addestramento su oltre 10.000 ore di dati robotici attraverso 7 configurazioni di robot e 68 task. Maggiori informazioni in l'articolo su pi0.

Pi0.5 (arXiv 2504.16054, 22 April 2025) mantiene quello scheletro e cambia la dieta di addestramento: dati web, rilevamento di oggetti, istruzioni verbali da umani che addestrano il robot, etichette di sottocompiti, dati cross-embodiment da robot in molte case. Il risultato è un robot che pulisce cucine in case che non facevano parte del set di addestramento. Il README di openpi aggiunge un dettaglio che il titolo non menziona: il pi0.5 rilasciato è stato addestrato con isolamento della conoscenza (arXiv 2505.23705).

Proprietàpi0pi0.5
Variante backbone VLMgemma_2b (PaliGemma)gemma_2b (PaliGemma)
Variante esperto di azionegemma_300mgemma_300m
action_dim3232
action_horizon predefinito5050
max_token_len48200
input stato discretofalsetrue, stato discretizzato in bin nel prompt
Checkpoint di basegs://openpi-assets/checkpoints/pi0_basegs://openpi-assets/checkpoints/pi05_base
Ciò che è pubblico non è l'intero articolo

Il README di openpi è esplicito: il repository supporta solo la testa di flow matching, sia per l'addestramento che per l'inferenza di pi0.5. L'articolo descrive due fasi e il codice ne implementa solo la seconda: il pre-addestramento rappresenta ogni azione come token discreti tramite il tokenizer FAST, e al momento del deployment il modello inferisce un sottocompito di alto livello prima di ogni blocco di azione. Nessuna di queste fasi è presente nel repository. La card lerobot/pi05_base fornisce lo stesso elenco e aggiunge RL, sebbene l'articolo su pi0.5 non descriva affatto una fase di apprendimento per rinforzo. Il porting LeRobot eredita tale ambito, così come ogni trainer ospitato su di esso, incluso quello qui. Anche la licenza è divisa: la pagina di documentazione di pi05 indica Apache 2.0, la card lerobot/pi05_base è etichettata license: gemma.

Cosa cambia il flow matching nell'addestramento e nell'inferenza

Una policy che puoi addestrare su un SO-100 o regredisce le azioni direttamente (ACT) o le tokenizza e le decodifica autoregressivamente (pi0-FAST). Il flow matching non fa nessuna delle due cose: impara un campo vettoriale che trasporta il rumore a un chunk di azione pulito, quindi lo integra. Il paper pi0 utilizza 10 passi di integrazione con dimensione del passo 0.1; la configurazione pi05 di LeRobot mantiene lo stesso num_inference_steps: int = 10.

  • Addestramento: la loss regredisce un chunk di azione rumoroso. Nessun tokenizer da ottimizzare, nessuna discretizzazione degli angoli delle tue articolazioni.
  • Inferenza: un chunk costa dieci passaggi in avanti attraverso l'esperto di azione. Questo è strutturale, non un problema di ottimizzazione.
  • Output: azioni continue di dimensione 32, riempite internamente, loss calcolata sulle dimensioni che il tuo robot possiede. Un braccio a 6-DoF più pinza ne usa 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
Letto da src/openpi/models/pi0_config.py sul branch principale di openpi, 23 agosto 2026.

Il backbone PaliGemma e il gate di fronte ad esso

PaliGemma (arXiv 2407.07726) è un encoder di visione SigLIP-So400m basato su un modello linguistico Gemma-2B, con circa 3 miliardi di parametri. Pi0.5 eredita il suo tokenizer, e quel tokenizer si trova in un repository con accesso controllato. Questo è il modo più comune in cui una prima esecuzione fallisce, prima del primo passo di addestramento.

Accetta la licenza con accesso controllato prima di noleggiare una GPU

La documentazione di LeRobot pi05 lo afferma chiaramente: pi0.5 utilizza il tokenizer con accesso controllato google/paligemma-3b-pt-224, quindi accetta la sua licenza sull'Hub ed esegui prima hf auth login. L'accesso viene concesso manualmente, non istantaneamente. Saltalo, avvia un'esecuzione cloud a pagamento e pagherai per un pod che non può scaricare un tokenizer.

Prima di iniziare: formato del dataset, episodi, hardware

Pi0.5 in LeRobot legge un dataset LeRobot in formato v3.0, introdotto con lerobot 0.4.0 nell'ottobre 2025: molti episodi per file Parquet e MP4 invece di un file per episodio, con i confini in meta/episodes/ anziché nei nomi dei file. Registra con il client desktop o segui registra il tuo primo dataset e lo avrai.

ModalitàMemoria GPU richiestaGPU di esempio
Inferenzapiù di 8 GBRTX 4090
Fine-tuning, LoRApiù di 22.5 GBRTX 4090
Fine-tuning, completopiù di 70 GBA100 80 GB o H100
La trappola della versione che costa una giornata

Pi0.5 e SmolVLA richiedono LeRobot v3.0. GR00T N1.7 e GR00T N1.5 richiedono v2.0 o v2.1 e vanno in crash con un dataset v3.0. Una singola sessione di registrazione non può alimentare entrambi senza una conversione, e l'errore non indica "versione del dataset errata". Vedi dataset rifiutato: v3 richiesto.

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
Dalla documentazione di LeRobotDataset v3.0.

La piattaforma richiede almeno 50 episodi per Pi0.5, lo stesso minimo di GR00T e ACT. Il pre-addestramento fa il grosso del lavoro, quindi 50 episodi puliti sono meglio di 200 approssimativi. Sei nuovo in questo? Inizia con la guida alla raccolta dati.

La pagina delle policy di AY-Robots che confronta le cinque policy addestrabili per parametri, livello GPU, latenza ed episodi minimi
Pi0.5 si posiziona nel livello A100 e H100 a 485 ms per passo d'azione, con un minimo di 50 episodi.

Percorso A: ottimizzazione con il repository openpi

L'implementazione di riferimento: JAX prima, testata solo su Ubuntu 22.04, guidata da oggetti di configurazione piuttosto che da flag. Un percorso PyTorch è arrivato a settembre 2025, convalidato su LIBERO. Tre passaggi: convertire i dati, definire una configurazione, addestrare e servire.

  1. 1
    Clona e installa

    openpi utilizza uv. GIT_LFS_SKIP_SMUDGE è ciò che permette a LeRobot di essere una dipendenza senza blob LFS.

    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
    Converti i tuoi dati in un dataset LeRobot

    L'upstream fornisce convertitori per LIBERO e DROID e si aspetta che tu ne adatti uno. Il lavoro consiste nella mappatura delle chiavi.

    bash
    uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data
  3. 3
    Aggiungi una configurazione di addestramento

    Le configurazioni sono voci TrainConfig in src/openpi/training/config.py. Questa adatta pi05_droid_finetune, con il caricatore dei pesi puntato a 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
    Calcola le statistiche di normalizzazione

    Viene eseguito rispetto al nome della configurazione, non al dataset. Saltarlo è il classico primo errore qui.

    bash
    uv run scripts/compute_norm_stats.py --config-name pi05_so100
  5. 5
    Addestra

    La variabile consente a JAX di utilizzare il 90 percento della memoria GPU invece del 75 predefinito. Su una scheda da 80 GB, questo decide se l'esecuzione sopravvive.

    bash
    XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \
        --exp-name=my_experiment \
        --overwrite
  6. 6
    Servilo

    Il server ascolta sulla porta 8000 e risponde alle query di osservazione; il runtime del tuo robot è il client.

    bash
    uv run scripts/serve_policy.py policy:checkpoint \
        --policy.config=pi05_so100 \
        --policy.dir=checkpoints/pi05_so100/my_experiment/20000
Il percorso PyTorch non è il percorso JAX

L'implementazione PyTorch di openpi non supporta pi0-FAST, la precisione mista, FSDP, LoRA o i pesi EMA, quindi il LoRA che raggiunge i 22.5 GB è solo JAX, tramite le varianti gemma_2b_lora e gemma_300m_lora. Peggio: la configurazione copia i file patchati sui tuoi transformers 4.53.2 installati, e il README avverte che con la modalità hardlink predefinita di uv questo modifica permanentemente i transformers nella cache di uv e può propagarsi ad altri progetti. Annulla con uv cache clean transformers.

Percorso B: fine-tuning con lerobot pi05

La porta LeRobot racchiude gli stessi pesi nella CLI che già usi per ACT e SmolVLA. Tutto ciò che segue è stato verificato rispetto a lerobot 0.6.1, la release del 3 agosto 2026, e la documentazione di pi05 del 23 agosto 2026. Le versioni contano qui: i dataset v3.0 sono arrivati con la 0.4.0 nell'ottobre 2025, il blog 0.5.0 del 9 marzo 2026 presenta pi0-FAST e Real-Time Chunking, e la 0.6.0 del 6 luglio 2026 ha reso il pacchetto base leggero e ha spostato il deployment su lerobot-rollout.

Una cosa non è cambiata: lerobot-train e lerobot-record erano già entry point nella versione 0.3.2, agosto 2025. Un tutorial che chiama ancora python -m lerobot.scripts.train precede un anno di cambiamenti e merita di essere diffidato anche per il resto.

  1. 1
    Installazione con gli extra corretti

    Dalla versione 0.6.0, l'installazione base include solo le dipendenze ML principali, e l'extra 'pi' non aggiunge codice per dataset o training, quindi un fine-tuning richiede anche l'extra 'training'. Le vecchie istruzioni a riga singola falliscono qui al momento dell'importazione.

    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
    Autenticazione

    Accetta la licenza paligemma-3b-pt-224 in un browser, quindi accedi sulla macchina che esegue il training.

    bash
    hf auth login
  3. 3
    Aggiungi statistiche sui quantili

    Pi0.5 normalizza STATE e ACTION con i quantili, quindi meta/stats.json richiede q01 e q99. I dataset più vecchi contengono solo min, max, mean, std.

    bash
    lerobot-edit-dataset \
        --repo_id your_dataset \
        --new_repo_id your_dataset \
        --operation.type recompute_stats \
        --operation.overwrite true
  4. 4
    Fine-tuning da lerobot/pi05_base

    Imposta la dimensione del batch a quanto la tua scheda può gestire; la documentazione usa 64 su LIBERO a 80 GB. Passa bfloat16 esplicitamente, il default della configurazione è 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
    Eseguilo sul braccio

    Nella versione 0.6.x questo è lerobot-rollout: lerobot-record rifiuta una policy e i nomi dei dataset eval_. Base controlla il braccio, sentry registra il rollout.

    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
FlagCosa faNota
--policy.type=pi05seleziona Pi0.5richiesto con pretrained_path, omettere con --policy.path
--policy.pretrained_pathcarica solo i pesinomi delle feature dal tuo dataset, impostazioni salvate reimpostate
--policy.pathpesi più il config.json del checkpointle impostazioni salvate come n_action_steps vengono ereditate
--policy.n_action_stepspassi consumati per chunktorna a 50, mai sopra chunk_size (default 50)
--policy.train_expert_onlyblocca il VLM, addestra l'espertodefault false, meno memoria, qualche costo in termini di successo
--policy.gradient_checkpointingricalcola invece di memorizzare le attivazionidefault false, la prima leva quando un'esecuzione non si adatta
--peft.method_type=LORAadattatori LoRA invece di pesi completirichiede l'extra peft, l'esempio documentato è SmolVLA
--policy.rtc_training_max_delaycondizionamento del prefisso azione per RTCsolo nel branch principale, non in 0.6.1, deve rimanere sotto chunk_size
--rename_mapmappa le colonne del dataset sulle feature della policynecessario quando le chiavi della tua telecamera differiscono
L'errore più comune nelle prime esecuzioni

Senza quantili si ottiene ValueError: QUANTILES normalization mode requires q01 and q99 stats al primo batch. Ricalcola le statistiche, ma il risultato finisce in $HF_LEROBOT_HOME/your_dataset, non nella cache letta da --dataset.repo_id, quindi addestra con --dataset.root che punta lì o fai il push all'Hub. Oppure salta i quantili con --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}', come fa il comando di riferimento LIBERO.

Tre set di default, e quali raggiungono il trainer

TrainConfig di openpi è il riferimento, PI05Config di LeRobot è ciò che lerobot-train usa quando non si specifica nulla, e il modulo qui invia un terzo set. La sorpresa è il tasso di apprendimento: entrambi i valori predefiniti a monte raggiungono un picco di 2.5e-5, mentre la configurazione pi05_libero di openpi e questa piattaforma lo aumentano a 5e-5.

Impostazioneopenpi TrainConfiglerobot pi05 e lerobot-trainAY-Robots invia
Dimensione del batch3281
Tasso di apprendimento massimo2.5e-5, decadimento cosenooptimizer_lr 2.5e-55e-5
Passi di addestramento30,000100,00030,000
Intervallo di checkpoint1,000 passi20,000 passinon nel modulo
Seed421,000nel modulo
Blocco di azioniaction_horizon 50chunk_size 50, n_action_steps 50non nel modulo
Tipo di dato dei pesibfloat16float32 finché non si passa --policy.dtypenon nel modulo
Accumulo del gradientenessuna tale opzione, fsdp_devices inveceassente da ogni release finora16, e viene eliminato

La portabilità è fedele? Il team di LeRobot ha ottimizzato il modello base LIBERO per ulteriori 6k passi e ha confrontato i risultati con i numeri di riferimento di openpi su quattro suite: 97.5 percento di media contro 96.85, in vantaggio su Libero 10, in svantaggio su Spatial. Il percorso è una scelta di strumenti, non di qualità.

Ottimizzazione di Pi0.5 sui propri dati
Vantaggi
  • Più di 10,000 ore di pre-addestramento robotico alle spalle, quindi 50 episodi del tuo compito possono essere sufficienti.
  • Azioni continue: nessun tokenizer da ottimizzare, nessun limite di discretizzazione sugli angoli delle articolazioni.
  • La portabilità di LeRobot ottiene un punteggio del 97.5 percento sulla media LIBERO contro il 96.85 di openpi, quindi la CLI più amichevole non costa nulla di misurabile.
  • Percorsi efficienti in termini di parametri su entrambi i lati: varianti JAX LoRA di openpi, integrazione PEFT di LeRobot.
Compromessi
  • L'ottimizzazione completa richiede più di 70 GB. Il valore LoRA di 22.5 GB è il numero JAX di openpi; nessuno è pubblicato per pi05 sotto PEFT.
  • 485 ms per passo di azione, il più lento dei cinque qui: il doppio di SmolVLA, ventiquattro volte ACT.
  • È richiesta LeRobot v3.0, quindi un dataset registrato per un'esecuzione GR00T deve essere convertito, e viceversa.
  • Le nuove opzioni arrivano prima su main: la memoria RTC e MEM in fase di addestramento non sono nella versione 0.6.1, quindi la documentazione più recente può significare l'installazione da git.

La realtà dei 485 ms e dove smette di essere utilizzabile

Questo decide il tuo progetto, quindi viene prima della tabella dei costi. La per passo d'azione misurata qui per Pi0.5 è di 485 ms. Contro gli altri quattro:

PolicyInferenza per passo d'azioneParametriLivello GPUEpisodi minimi
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
La pagina di confronto AY-Robots per GR00T N1.7 contro Pi0.5, con parametri, livello GPU, latenza e formato del dataset
Stesso livello GPU, stesso limite inferiore di episodi, versione del dataset diversa, divario di latenza di tre volte.
L'inferenza deve risiedere vicino ai servi

Il ciclo di controllo attraverso questi cinque modelli impiega da 20 a 485 ms per passo d'azione. I round trip su internet pubblico, che si aggiungono ai 485 ms, trasformano una policy funzionante in una esitante. L'inferenza remota è praticabile per operazioni lente di pick-and-place, non per movimenti reattivi veloci. Preferiamo dire questo piuttosto che vendere una demo che funziona solo su una LAN. Se il tuo braccio si ferma tra un chunk e l'altro, inizia da la policy si blocca a metà movimento.

L'upstream ha una risposta, e metà di essa è già nella release che puoi installare. Il Real-Time Chunking genera il chunk successivo mentre il braccio sta ancora eseguendo quello attuale, quindi guida i passi sovrapposti del nuovo chunk a rimanere vicini alla parte già eseguita, in modo che il braccio non si blocchi o scatti alla giunzione. La forma a tempo di inferenza è stata inclusa nel changelog 0.4.2 per Pi0, Pi0.5 e SmolVLA ed è un flag di rollout, non un retrain:

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 indica quanti passi del chunk precedente il nuovo chunk deve concordare; la documentazione RTC indica da 8 a 12 come intervallo usuale. Il backend di inferenza predefinito è --inference.type=sync.

Non rende il modello più veloce. Nasconde il divario: i 485 ms vengono comunque spesi, ma fuori dal percorso critico, in modo che la coda non si esaurisca tra i chunk. La variante a tempo di training da arXiv 2512.05964 va oltre: il modello impara a condizionare su un prefisso d'azione pulito, quindi all'inferenza la sovrapposizione viene hard-inpainted con timestep di flusso per azione invece di essere guidata, e il passaggio all'indietro della guida scompare. Durante il training, campiona una lunghezza di prefisso per esempio e calcola la perdita di flusso sul suffisso rimanente. Quel flag è presente solo su main, non in 0.6.1, e il ritardo per cui si effettua il training deve rimanere al di sotto di chunk_size.

Due modi per ottenere un checkpoint Pi0.5

Noleggi o possiedi una scheda da 80 GB, installi uno degli stack sopra, converti il tuo dataset e segui l'esecuzione. Mantiene ogni controllo: JAX LoRA di openpi, adattatori PEFT di LeRobot, azioni relative, mappature di tasti personalizzate. Mantiene anche ogni fallimento.

  • Hardware: A100 80 GB o H100, o una scheda da 24 GB sul percorso JAX LoRA di openpi.
  • Configurazione: un pomeriggio per la prima esecuzione, principalmente mappatura dei tasti e il tokenizer gated.
  • Non disponibili nel modulo ospitato: adattatori PEFT, azioni relative, RTC in fase di training, memoria MEM.
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
Il comando che nessun modulo ospitato esegue, e pip non può installare: RTC in fase di training è un flag del branch principale.

Quando non funziona

SintomoCausa più probabile
Esecuzione rifiutata prima dell'avvioDataset v2.1 ma Pi0.5 richiede v3.0, o viceversa per GR00T
ImportError, pacchetto datasets mancantelerobot 0.6.x senza l'extra di training
ValueError su q01 e q99 sul batch unoNessun quantile in meta/stats.json; ricalcolare o usare MEAN_STD
CUDA out of memory al passo 0Fine-tune completo sotto i 70 GB; provare il checkpointing o train_expert_only
Errore 401 o repo gatedLicenza del tokenizer PaliGemma non accettata
La perdita diminuisce, il robot non fa nullaDiscrepanza di normalizzazione, o la policy copia lo stato
Il braccio si ferma tra i chunkLatenza per passo più round trip; la coda dei chunk si esaurisce
Funziona in una configurazione, fallisce in un'altraTroppi pochi episodi, o tutti in una sola configurazione

Quanto costa un'esecuzione

Pi0.5 si trova nel livello costoso perché richiede una scheda da 80 GB, e i prezzi spot variano, quindi la cifra è un intervallo piuttosto che un prezzo. Per molte attività SO-100, addestra SmolVLA o ACT sul livello da 24 GB per prima cosa, conferma che l'attività sia apprendibile, quindi dedica ore A100 ad essa. Addestra la tua prima policy illustra quel ciclo più economico, e prezzi riporta i livelli attuali.

LivelloPoliciesEsecuzione tipicaPrezzo per oraCosto per esecuzione
A100 80 GB or H100Pi0.5, GR00T N1.7, GR00T N1.53 to 6 hours1.20 to 2.00 USDabout 4 to 12 USD
RTX 4090 or any 24 GB cardSmolVLA, ACT2 to 5 hours0.30 to 0.60 USDabout 1 to 3 USD
La tabella dei costi di AY-Robots che mostra quale GPU richiede ogni policy, il tempo di esecuzione e il prezzo tipici, e quanti episodi sono necessari prima che una policy sia utile
Gli stessi due livelli sulla pagina del prodotto: Pi0.5 noleggia la scheda da 80 GB, SmolVLA e ACT si adattano a una 4090.

Prima di impegnare una serata: e presentano gli stessi numeri a confronto. L' contiene 85 modelli VLA con 332 risultati di benchmark, ciascuno collegato alla sua fonte, e il contesto sulla famiglia si trova in .

Addestra Pi0.5 senza costruire lo stack

Scegli il dataset e gli iperparametri in un modulo. Il backend noleggia una scheda da 80 GB sul mercato spot, esegue il trainer e scrive i checkpoint nell'object storage. Guide per SO-100, SO-101, Koch v1.1 e LeKiwi.

Apri le guide di addestramento
Posso effettuare il fine-tuning di Pi0.5 su una RTX 4090?

Non un fine-tuning completo: openpi elenca più di 70 GB per questo, quindi una A100 da 80 GB o una H100. La sua cifra di 22.5 GB per LoRA appartiene al percorso JAX; l'implementazione PyTorch non ha LoRA. L'integrazione PEFT di LeRobot esiste, ma il suo esempio documentato è SmolVLA e nessun dato sulla VRAM è pubblicato per pi05.

Di quanti episodi ho bisogno?

Cinquanta, lo stesso minimo di GR00T e ACT; solo SmolVLA scende più in basso, a 30. Il checkpoint di base porta più di 10.000 ore di pre-addestramento, quindi il fine-tuning si adatta piuttosto che imparare da zero: 50 episodi puliti e vari battono duecento da una singola configurazione.

Qual è la differenza tra --policy.path e --policy.pretrained_path?

--policy.path carica i pesi e il config.json del checkpoint, quindi le impostazioni memorizzate come n_action_steps vengono ereditate e --policy.type deve essere omesso. --policy.pretrained_path carica solo i pesi: i nomi delle feature provengono dal tuo dataset, le impostazioni memorizzate vengono reimpostate, --policy.type è richiesto. Ecco perché il comando LIBERO passa n_action_steps=10 ed empty_cameras=1 esplicitamente; altrimenti tornerebbero a 50 e 0.

La versione open mi fornisce il Pi0.5 completo del paper?

No. Entrambi supportano solo l'action head di flow matching. La fase di pre-addestramento con token discreti con il tokenizer di azione FAST e la previsione di sottocompiti di alto livello non sono stati rilasciati, e la card lerobot/pi05_base aggiunge RL a quella lista anche se il paper di pi0.5 non descrive alcuna fase di apprendimento per rinforzo. Si addestra una policy di basso livello condizionata da una stringa di linguaggio fornita, non un modello che scompone un compito lungo da solo.

Contro quali versioni è scritta questa guida?

openpi su main e lerobot 0.6.1, la release dal 3 agosto 2026, entrambi letti il 23 agosto 2026. I dataset v3.0 sono arrivati con la 0.4.0 nell'ottobre 2025. La 0.6.0 ha reso il pacchetto base leggero, quindi lerobot[pi] da solo non installa più uno stack di addestramento, e ha spostato il deployment a lerobot-rollout. L'RTC in fase di addestramento è solo su main; il trainer ospitato qui esegue la 0.5.1.

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started