
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à | pi0 | pi0.5 |
|---|---|---|
| Variante backbone VLM | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) |
| Variante esperto di azione | gemma_300m | gemma_300m |
| action_dim | 32 | 32 |
| action_horizon predefinito | 50 | 50 |
| max_token_len | 48 | 200 |
| input stato discreto | false | true, stato discretizzato in bin nel prompt |
| Checkpoint di base | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
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.
# 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 TrueIl 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.
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 richiesta | GPU di esempio |
|---|---|---|
| Inferenza | più di 8 GB | RTX 4090 |
| Fine-tuning, LoRA | più di 22.5 GB | RTX 4090 |
| Fine-tuning, completo | più di 70 GB | A100 80 GB o H100 |
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.
# 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 offsetsLa 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.

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.
- 1Clona e installa
openpi utilizza uv. GIT_LFS_SKIP_SMUDGE è ciò che permette a LeRobot di essere una dipendenza senza blob LFS.
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 . - 2Converti 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.
bashuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data - 3Aggiungi 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.
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, ) - 4Calcola le statistiche di normalizzazione
Viene eseguito rispetto al nome della configurazione, non al dataset. Saltarlo è il classico primo errore qui.
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5Addestra
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.
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6Servilo
Il server ascolta sulla porta 8000 e risponde alle query di osservazione; il runtime del tuo robot è il client.
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
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.
- 1Installazione 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]' - 2Autenticazione
Accetta la licenza paligemma-3b-pt-224 in un browser, quindi accedi sulla macchina che esegue il training.
bashhf auth login - 3Aggiungi 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.
bashlerobot-edit-dataset \ --repo_id your_dataset \ --new_repo_id your_dataset \ --operation.type recompute_stats \ --operation.overwrite true - 4Fine-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.
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 - 5Eseguilo 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.
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 | Cosa fa | Nota |
|---|---|---|
| --policy.type=pi05 | seleziona Pi0.5 | richiesto con pretrained_path, omettere con --policy.path |
| --policy.pretrained_path | carica solo i pesi | nomi delle feature dal tuo dataset, impostazioni salvate reimpostate |
| --policy.path | pesi più il config.json del checkpoint | le impostazioni salvate come n_action_steps vengono ereditate |
| --policy.n_action_steps | passi consumati per chunk | torna a 50, mai sopra chunk_size (default 50) |
| --policy.train_expert_only | blocca il VLM, addestra l'esperto | default false, meno memoria, qualche costo in termini di successo |
| --policy.gradient_checkpointing | ricalcola invece di memorizzare le attivazioni | default false, la prima leva quando un'esecuzione non si adatta |
| --peft.method_type=LORA | adattatori LoRA invece di pesi completi | richiede l'extra peft, l'esempio documentato è SmolVLA |
| --policy.rtc_training_max_delay | condizionamento del prefisso azione per RTC | solo nel branch principale, non in 0.6.1, deve rimanere sotto chunk_size |
| --rename_map | mappa le colonne del dataset sulle feature della policy | necessario quando le chiavi della tua telecamera differiscono |
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.
| Impostazione | openpi TrainConfig | lerobot pi05 e lerobot-train | AY-Robots invia |
|---|---|---|---|
| Dimensione del batch | 32 | 8 | 1 |
| Tasso di apprendimento massimo | 2.5e-5, decadimento coseno | optimizer_lr 2.5e-5 | 5e-5 |
| Passi di addestramento | 30,000 | 100,000 | 30,000 |
| Intervallo di checkpoint | 1,000 passi | 20,000 passi | non nel modulo |
| Seed | 42 | 1,000 | nel modulo |
| Blocco di azioni | action_horizon 50 | chunk_size 50, n_action_steps 50 | non nel modulo |
| Tipo di dato dei pesi | bfloat16 | float32 finché non si passa --policy.dtype | non nel modulo |
| Accumulo del gradiente | nessuna tale opzione, fsdp_devices invece | assente da ogni release finora | 16, 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à.
- 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.
- 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:
| Policy | Inferenza per passo d'azione | Parametri | Livello GPU | Episodi minimi |
|---|---|---|---|---|
| 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 |

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:
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=60Non 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.
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=1000Selezioni modello e dataset nel modulo di training, il backend noleggia una GPU su un mercato spot in base alla VRAM richiesta, esegue il trainer e scrive checkpoint nello storage oggetti. Pi0.5 è disponibile solo su cloud qui. Esistono guide per SO-100, SO-101, Koch v1.1 e LeKiwi.
| Impostazione | Cosa invia la piattaforma per Pi0.5 |
|---|---|
| Checkpoint di base | lerobot/pi05_base |
| Tipo di policy | pi05 |
| Dimensione del batch | 1 |
| Tasso di apprendimento | 5e-5 |
| Passi massimi | 30000 |
| Accumulo del gradiente | 16, ma vedi l'avviso sotto |
| Controlli extra nel modulo | seed, logFreq |
| Formato del dataset | LeRobot v3.0 |
| Livello GPU | A100 80 GB o H100 80 GB |
Il trainer invia un valore di accumulo del gradiente di 16 e lerobot 0.5.1 non ha un flag per riceverlo, quindi viene ignorato. Nessuna versione rilasciata di lerobot ne ha uno: il controllo esiste solo sul branch principale, come --accelerator.gradient_accumulation.steps. La dimensione effettiva del batch qui è 1, contro i 256 utilizzati dalla configurazione pi05_libero di openpi. È utile saperlo prima di leggere una curva di perdita. Il controllo si applica alle esecuzioni di GR00T N1.7 e GR00T N1.5.
L'inferenza funziona allo stesso modo: un pod viene provisionato per servire la policy e il tuo client locale comunica con esso. Il pod ha un watchdog di inattività e si autodistrugge, quindi una scheda dimenticata non fattura silenziosamente. Si applica l'avvertenza sulla latenza, motivo per cui ACT a 20 ms spesso vince un compito veloce.
Quando non funziona
| Sintomo | Causa più probabile |
|---|---|
| Esecuzione rifiutata prima dell'avvio | Dataset v2.1 ma Pi0.5 richiede v3.0, o viceversa per GR00T |
| ImportError, pacchetto datasets mancante | lerobot 0.6.x senza l'extra di training |
| ValueError su q01 e q99 sul batch uno | Nessun quantile in meta/stats.json; ricalcolare o usare MEAN_STD |
| CUDA out of memory al passo 0 | Fine-tune completo sotto i 70 GB; provare il checkpointing o train_expert_only |
| Errore 401 o repo gated | Licenza del tokenizer PaliGemma non accettata |
| La perdita diminuisce, il robot non fa nulla | Discrepanza di normalizzazione, o la policy copia lo stato |
| Il braccio si ferma tra i chunk | Latenza per passo più round trip; la coda dei chunk si esaurisce |
| Funziona in una configurazione, fallisce in un'altra | Troppi pochi episodi, o tutti in una sola configurazione |
- Dataset rifiutato: v3 richiesta
- Memoria esaurita durante l'addestramento
- La perdita diminuisce ma la policy non fa nulla
- La policy si blocca a metà movimento
- La policy funziona solo in una configurazione
- Job di addestramento bloccato in coda
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.
| Livello | Policies | Esecuzione tipica | Prezzo per ora | Costo per esecuzione |
|---|---|---|---|---|
| A100 80 GB or H100 | Pi0.5, GR00T N1.7, GR00T N1.5 | 3 to 6 hours | 1.20 to 2.00 USD | about 4 to 12 USD |
| RTX 4090 or any 24 GB card | SmolVLA, ACT | 2 to 5 hours | 0.30 to 0.60 USD | about 1 to 3 USD |

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