
Affinez Pi0.5, le VLA de correspondance de flux de Physical Intelligence, sur vos propres données de robot. Commandes réelles pour openpi et lerobot pi05, pièges du format de jeu de données, limites de VRAM et de latence.
Pi0.5 est le modèle à privilégier lorsqu'une politique doit fonctionner dans une pièce qu'elle n'a jamais vue. C'est aussi le plus délicat des cinq politiques entraînables ici à affiner à la main : le dépôt amont est d'abord JAX, le port LeRobot a déplacé le déploiement hors de lerobot-record en 0.6.0 et a rendu l'installation de base trop petite pour l'entraînement, et un affinage complet ne tient pas sur une 4090. Ci-dessous : ce que le flow matching coûte à l'inférence, les deux chemins de commande, et le nombre de 485 ms qui décide si le résultat est utilisable.
Ce qu'il faut savoir
- •Un VLA de type flow-matching : un VLM PaliGemma de 3 milliards de paramètres plus un expert d'action de 300 millions de paramètres décodant des blocs d'action continus. Deux voies pour l'affiner, openpi et LeRobot pi05, avec 0,65 point d'écart sur la moyenne LIBERO.
- •L'affinage complet nécessite plus de 70 Go de VRAM. openpi liste LoRA à 22,5 Go, uniquement sur son chemin JAX.
- •Le jeu de données doit être LeRobotDataset v3.0 avec les quantiles q01 et q99 dans meta/stats.json, sinon le premier lot échoue.
- •Vérifiez d'abord votre version de lerobot : la version 0.6.0 a allégé le paquet de base et a déplacé le déploiement hors de lerobot-record.
- •Ici, il s'exécute à 485 ms par étape d'action, nécessite 50 épisodes et coûte environ 4 à 12 USD par exécution.
Ce qu'est réellement Pi0.5
Physical Intelligence a publié pi0 en octobre 2024 : un modèle vision-langage-action de type flow matching basé sur un VLM pré-entraîné : PaliGemma avec 3 milliards de paramètres plus un expert d'action de 300 millions de paramètres initialisé à partir de zéro, soit 3,3 milliards au total. L'article rapporte un pré-entraînement sur plus de 10 000 heures de données robotiques à travers 7 configurations de robots et 68 tâches. Plus d'informations dans l'article sur pi0.
Pi0.5 (arXiv 2504.16054, 22 avril 2025) conserve cette architecture et modifie le régime d'entraînement : données web, détection d'objets, instructions verbales d'humains coachant le robot, étiquettes de sous-tâches, données inter-incarnations provenant de robots dans de nombreux foyers. Le résultat est un robot nettoyant des cuisines dans des maisons qui ne faisaient pas partie de l'ensemble d'entraînement. Le README d'openpi ajoute un détail que le titre n'indique pas : le pi0.5 publié a été entraîné avec une isolation des connaissances (arXiv 2505.23705).
| Propriété | pi0 | pi0.5 |
|---|---|---|
| Variante du backbone VLM | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) |
| Variante de l'expert d'action | gemma_300m | gemma_300m |
| action_dim | 32 | 32 |
| horizon d'action par défaut | 50 | 50 |
| max_token_len | 48 | 200 |
| discrete_state_input | false | true, l'état est discrétisé en bins dans le prompt |
| Checkpoint de base | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
Le README d'openpi est explicite : le dépôt ne prend en charge que la tête de "flow matching", pour l'entraînement et l'inférence de pi0.5. L'article décrit deux étapes et le code ne contient que la seconde : le pré-entraînement représente chaque action comme des tokens discrets via le tokenizer FAST, et lors du déploiement, le modèle infère une sous-tâche de haut niveau avant chaque bloc d'action. Aucune de ces étapes n'est dans le dépôt. La carte lerobot/pi05_base donne la même liste et ajoute le RL, bien que l'article sur pi0.5 ne décrive aucune étape d'apprentissage par renforcement. Le port LeRobot hérite de cette portée, tout comme chaque entraîneur hébergé, y compris celui-ci. La licence est également divisée : la page de documentation de pi05 indique Apache 2.0, la carte lerobot/pi05_base est étiquetée license: gemma.
Ce que le "flow matching" change dans l'entraînement et l'inférence
Une politique que vous pouvez entraîner sur un SO-100 régresse soit directement les actions (ACT) ou les tokenise et les décode de manière autorégressive (pi0-FAST). Le flow matching ne fait ni l'un ni l'autre : il apprend un champ vectoriel qui transporte le bruit vers un morceau d'action, puis l'intègre. L'article pi0 utilise 10 étapes d'intégration avec un pas de 0,1 ; la configuration pi05 de LeRobot utilise le même `num_inference_steps: int = 10`.
- Entraînement : la perte régresse un morceau d'action bruité. Pas de tokenizer à ajuster, pas de discrétisation de vos angles articulaires.
- Inférence : un morceau coûte dix passages avant à travers l'expert d'action. C'est structurel, pas un problème d'ajustement.
- Sortie : actions continues de dimension 32, complétées en interne, perte calculée sur les dimensions de votre robot. Un bras à 6-DoF plus pince utilise 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 TrueLe backbone PaliGemma, et la porte devant lui
PaliGemma (arXiv 2407.07726) est un encodeur de vision SigLIP-So400m basé sur un modèle de langage Gemma-2B, d'environ 3 milliards de paramètres. Pi0.5 hérite de son tokenizer, et ce tokenizer se trouve dans un dépôt à accès restreint. C'est la manière la plus courante pour qu'une première exécution échoue, avant la première étape d'entraînement.
La documentation de LeRobot pi05 l'indique clairement : pi0.5 utilise le tokenizer google/paligemma-3b-pt-224 à accès restreint, alors acceptez sa licence sur le Hub et exécutez hf auth login en premier. L'accès est accordé manuellement, pas instantanément. Si vous ignorez cette étape, démarrez une exécution cloud payante, et vous paierez pour un pod qui ne peut pas télécharger de tokenizer.
Avant de commencer : format du jeu de données, épisodes, matériel
Pi0.5 dans LeRobot lit un jeu de données LeRobot au format v3.0, qui est apparu avec lerobot 0.4.0 en octobre 2025 : plusieurs épisodes par fichier Parquet et MP4 au lieu d'un fichier par épisode, avec des limites dans meta/episodes/ plutôt que dans les noms de fichiers. Enregistrez avec le client de bureau ou suivez enregistrez votre premier jeu de données et vous l'aurez.
| Mode | Mémoire GPU requise | Exemple de GPU |
|---|---|---|
| Inférence | more than 8 GB | RTX 4090 |
| Fine-tuning, LoRA | more than 22.5 GB | RTX 4090 |
| Fine-tuning, complet | more than 70 GB | A100 80 GB or H100 |
Pi0.5 et SmolVLA nécessitent LeRobot v3.0. GR00T N1.7 et GR00T N1.5 nécessitent v2.0 ou v2.1 et plantent sur un jeu de données v3.0. Une session d'enregistrement ne peut pas alimenter les deux sans conversion, et l'erreur n'indique pas "mauvaise version du jeu de données". Voir jeu de données rejeté : v3 requis.
# 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 plateforme requiert au moins 50 épisodes pour Pi0.5, le même seuil que pour GR00T et ACT. Le pré-entraînement fait le plus gros du travail, donc 50 épisodes propres valent mieux que 200 bâclés. Nouveau dans ce domaine ? Commencez par le guide de collecte de données.

Voie A : affiner avec le dépôt openpi
L'implémentation de référence : JAX d'abord, testée uniquement sur Ubuntu 22.04, pilotée par des objets de configuration plutôt que par des drapeaux. Un chemin PyTorch est arrivé en septembre 2025, validé sur LIBERO. Trois étapes : convertir vos données, définir une configuration, entraîner et servir.
- 1Cloner et installer
openpi utilise uv. GIT_LFS_SKIP_SMUDGE permet à LeRobot d'être une dépendance sans les objets 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 . - 2Convertir vos données en un jeu de données LeRobot
L'amont fournit des convertisseurs pour LIBERO et DROID et s'attend à ce que vous en adaptiez un. Le travail consiste à mapper les clés.
bashuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data - 3Ajouter une configuration d'entraînement
Les configurations sont des entrées TrainConfig dans src/openpi/training/config.py. Celle-ci adapte pi05_droid_finetune, avec le chargeur de poids pointant vers 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, ) - 4Calculer les statistiques de normalisation
S'exécute par rapport au nom de la configuration, pas au jeu de données. Le sauter est la première erreur classique ici.
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5Entraîner
La variable permet à JAX d'utiliser 90 % de la mémoire GPU au lieu des 75 % par défaut. Sur une carte de 80 Go, cela détermine si l'exécution survit.
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6Servir
Le serveur écoute sur le port 8000 et répond aux requêtes d'observation ; votre environnement d'exécution robotique est le client.
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
L'implémentation PyTorch d'openpi ne prend pas en charge pi0-FAST, la précision mixte, FSDP, LoRA ou les poids EMA, donc le LoRA qui atteint 22.5 GB est uniquement JAX, via les variantes gemma_2b_lora et gemma_300m_lora. Pire encore : la configuration copie des fichiers patchés sur votre installation de transformers 4.53.2, et le README avertit qu'avec le mode de lien physique par défaut d'uv, cela modifie de manière permanente transformers dans le cache d'uv et peut se propager à d'autres projets. Annulez cela avec uv cache clean transformers.
Route B : affiner avec lerobot pi05
Le port LeRobot encapsule les mêmes poids dans l'interface de ligne de commande que vous utilisez déjà pour ACT et SmolVLA. Tout ce qui suit a été vérifié par rapport à lerobot 0.6.1, la version depuis le 3 août 2026, et la documentation de pi05 du 23 août 2026. Les versions sont importantes ici : les jeux de données v3.0 sont arrivés avec la version 0.4.0 en octobre 2025, le blog 0.5.0 du 9 mars 2026 présente pi0-FAST et le Real-Time Chunking, et la version 0.6.0 du 6 juillet 2026 a allégé le package de base et déplacé le déploiement vers lerobot-rollout.
Une chose n'a pas changé : lerobot-train et lerobot-record étaient déjà des points d'entrée dans la version 0.3.2, en août 2025. Un tutoriel qui appelle encore python -m lerobot.scripts.train est antérieur à une année de changements et mérite d'être mis en doute sur le reste également.
- 1Installer avec les bons extras
Depuis la version 0.6.0, l'installation de base ne contient que les dépendances ML essentielles, et l'extra pi n'ajoute aucun code de jeu de données ou d'entraînement. Une mise au point nécessite donc également l'extra d'entraînement. Les anciennes commandes en une ligne échouent ici au moment de l'importation.
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]' - 2S'authentifier
Acceptez la licence paligemma-3b-pt-224 dans un navigateur, puis connectez-vous sur la machine d'entraînement.
bashhf auth login - 3Ajouter des statistiques de quantiles
Pi0.5 normalise STATE et ACTION avec des quantiles, donc meta/stats.json a besoin de q01 et q99. Les anciens jeux de données ne contiennent que min, max, mean, std.
bashlerobot-edit-dataset \ --repo_id your_dataset \ --new_repo_id your_dataset \ --operation.type recompute_stats \ --operation.overwrite true - 4Affiner à partir de lerobot/pi05_base
Définissez la taille du lot en fonction de ce que votre carte peut supporter ; la documentation utilise 64 sur LIBERO avec 80 Go. Passez bfloat16 explicitement, la valeur par défaut de la configuration est 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 - 5L'exécuter sur le bras
Dans la version 0.6.x, c'est lerobot-rollout : lerobot-record refuse une politique et rejette les noms de jeux de données eval_. Base pilote le bras, sentry enregistre le déploiement.
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
| Option | Ce qu'il fait | Remarque |
|---|---|---|
| --policy.type=pi05 | sélectionne Pi0.5 | requis avec pretrained_path, à omettre avec --policy.path |
| --policy.pretrained_path | charge uniquement les poids | noms des caractéristiques de votre jeu de données, les paramètres stockés sont réinitialisés |
| --policy.path | poids plus le fichier config.json du checkpoint | les paramètres stockés tels que n_action_steps sont hérités |
| --policy.n_action_steps | étapes consommées par chunk | revient à 50, jamais au-dessus de chunk_size (par défaut 50) |
| --policy.train_expert_only | gèle le VLM, entraîne l'expert | par défaut false, moins de mémoire, un certain coût en termes de succès |
| --policy.gradient_checkpointing | recalcule au lieu de stocker les activations | par défaut false, le premier levier lorsqu'une exécution ne rentre pas |
| --peft.method_type=LORA | adaptateurs LoRA au lieu de poids complets | nécessite l'extra peft, l'exemple documenté est SmolVLA |
| --policy.rtc_training_max_delay | conditionnement du préfixe d'action pour RTC | branche principale uniquement, pas dans 0.6.1, doit rester en dessous de chunk_size |
| --rename_map | mappe les colonnes du jeu de données sur les caractéristiques de la politique | nécessaire lorsque les clés de votre caméra diffèrent |
Sans quantiles, vous obtenez ValueError: QUANTILES normalization mode requires q01 and q99 stats dès le premier lot. Recalculez les statistiques, mais le résultat atterrit dans $HF_LEROBOT_HOME/your_dataset, et non dans le cache lu par --dataset.repo_id. Entraînez donc avec --dataset.root pointant vers cet emplacement ou poussez vers le Hub. Ou ignorez les quantiles avec --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}', comme le fait la commande de référence LIBERO.
Trois ensembles de valeurs par défaut, et lesquels atteignent l'entraîneur
TrainConfig d'openpi est la référence, PI05Config de LeRobot est ce que lerobot-train utilise par défaut, et le formulaire ici envoie un troisième ensemble. La surprise est le taux d'apprentissage : les deux valeurs par défaut en amont culminent à 2.5e-5, tandis que la configuration pi05_libero d'openpi et cette plateforme le portent à 5e-5.
| Paramètre | TrainConfig d'openpi | lerobot pi05 et lerobot-train | AY-Robots envoie |
|---|---|---|---|
| Taille du lot | 32 | 8 | 1 |
| Taux d'apprentissage maximal | 2.5e-5, décroissance cosinus | optimizer_lr 2.5e-5 | 5e-5 |
| Étapes d'entraînement | 30,000 | 100,000 | 30,000 |
| Intervalle de sauvegarde | 1,000 étapes | 20,000 étapes | pas dans le formulaire |
| Graine | 42 | 1,000 | dans le formulaire |
| Bloc d'action | action_horizon 50 | chunk_size 50, n_action_steps 50 | pas dans le formulaire |
| Type de données des poids | bfloat16 | float32 until you pass --policy.dtype | pas dans le formulaire |
| Accumulation de gradient | pas de tel réglage, fsdp_devices à la place | absent de toutes les versions jusqu'à présent | 16, et il est abandonné |
Le portage est-il fidèle ? L'équipe LeRobot a affiné le modèle de base LIBERO sur 6k étapes supplémentaires et a comparé les résultats avec les chiffres de référence d'openpi sur quatre suites : 97.5 pour cent en moyenne contre 96.85, en avance sur Libero 10, en retard sur Spatial. Le choix de l'implémentation est un choix d'outillage, pas de qualité.
- Plus de 10,000 heures de pré-entraînement de robot derrière lui, donc 50 épisodes de votre tâche peuvent suffire.
- Actions continues : pas de tokenizer à régler, pas de seuil de discrétisation sur vos angles articulaires.
- Le portage LeRobot obtient 97.5 pour cent en moyenne sur LIBERO contre 96.85 pour openpi, donc l'interface CLI plus conviviale ne coûte rien de mesurable.
- Chemins efficaces en paramètres des deux côtés : les variantes LoRA JAX d'openpi, l'intégration PEFT de LeRobot.
- L'affinage complet nécessite plus de 70 Go. Le chiffre LoRA de 22.5 Go est celui de JAX d'openpi ; aucun n'est publié pour pi05 sous PEFT.
- 485 ms par étape d'action, le plus lent des cinq ici : deux fois SmolVLA, vingt-quatre fois ACT.
- LeRobot v3.0 est requis, donc un jeu de données enregistré pour une exécution GR00T doit être converti, et vice versa.
- Les nouvelles options arrivent d'abord sur main : la mémoire RTC et MEM au moment de l'entraînement ne sont pas dans la version 0.6.1, donc les documentations les plus récentes peuvent impliquer une installation depuis git.
La réalité des 485 ms, et où cela cesse d'être utilisable
Cela détermine votre projet, donc cela précède le tableau des coûts. La par étape d'action mesurée ici pour Pi0.5 est de 485 ms. Comparé aux quatre autres :
| Politique | Inférence par étape d'action | Paramètres | Niveau de GPU | Épisodes minimum |
|---|---|---|---|---|
| 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 |

La boucle de contrôle de ces cinq modèles s'exécute en 20 à 485 ms par étape d'action. Des allers-retours sur l'internet public, en plus des 485 ms, transforment une politique fonctionnelle en une politique hésitante. L'inférence à distance est viable pour des tâches lentes de 'pick-and-place', mais pas pour des mouvements réactifs rapides. Nous préférons dire cela plutôt que de vendre une démo qui ne fonctionne que sur un réseau local. Si votre bras marque une pause entre les segments, commencez par la politique se fige en plein mouvement.
L'amont a une réponse, et la moitié est déjà dans la version que vous pouvez installer. Le 'Real-Time Chunking' génère le segment suivant pendant que le bras exécute encore le segment actuel, puis guide les étapes qui se chevauchent du nouveau segment pour qu'elles restent proches de la partie déjà exécutée, afin que le bras ne cale pas ou ne saccade pas à la jonction. La forme d'inférence a été livrée dans le changelog 0.4.2 pour Pi0, Pi0.5 et SmolVLA et est un flag de déploiement, pas un réentraînement :
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=60Cela ne rend pas le modèle plus rapide. Cela masque le délai : les 485 ms sont toujours dépensées, mais hors du chemin critique, de sorte que la file d'attente ne se vide pas entre les segments. La variante au moment de l'entraînement, issue d'arXiv 2512.05964, va plus loin : le modèle apprend à se conditionner sur un préfixe d'action propre, de sorte qu'à l'inférence, le chevauchement est 'hard-inpainted' avec des pas de temps de flux par action au lieu d'être guidé, et le passage arrière de guidage disparaît. Pendant l'entraînement, il échantillonne une longueur de préfixe par exemple et calcule la perte de flux sur le suffixe restant. Ce flag n'est disponible que sur 'main', pas dans la version 0.6.1, et le délai pour lequel vous entraînez doit rester inférieur à chunk_size.
Deux façons d'obtenir un checkpoint Pi0.5
Vous louez ou possédez une carte de 80 Go, installez l'une des piles ci-dessus, convertissez votre jeu de données et supervisez l'exécution. Vous conservez tous les réglages : JAX LoRA d'openpi, adaptateurs PEFT de LeRobot, actions relatives, mappages de touches personnalisés. Vous conservez également tous les échecs.
- Matériel : A100 80 Go ou H100, ou une carte de 24 Go sur le chemin JAX LoRA d'openpi.
- Configuration : un après-midi pour la première exécution, principalement le mappage des touches et le tokenizer à accès contrôlé.
- Non disponible sur le formulaire hébergé : adaptateurs PEFT, actions relatives, RTC au moment de l'entraînement, mémoire 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=1000Vous choisissez le modèle et le jeu de données dans le formulaire d'entraînement, le backend loue un GPU sur un marché spot en fonction de la VRAM requise, exécute l'entraîneur et écrit les checkpoints dans le stockage d'objets. Pi0.5 est uniquement disponible dans le cloud ici. Des guides existent pour SO-100, SO-101, Koch v1.1 et LeKiwi.
| Paramètre | Ce que la plateforme envoie pour Pi0.5 |
|---|---|
| Checkpoint de base | lerobot/pi05_base |
| Type de politique | pi05 |
| Taille du lot | 1 |
| Taux d'apprentissage | 5e-5 |
| Étapes max. | 30000 |
| Accumulation de gradient | 16, mais voir l'avertissement ci-dessous |
| Réglages supplémentaires dans le formulaire | seed, logFreq |
| Format du jeu de données | LeRobot v3.0 |
| Niveau de GPU | A100 80 GB ou H100 80 GB |
L'entraîneur envoie une valeur d'accumulation de gradient de 16 et lerobot 0.5.1 n'a pas de flag pour la recevoir, elle est donc ignorée. Aucune version de lerobot n'en a : le réglage n'existe que sur la branche principale, sous la forme de --accelerator.gradient_accumulation.steps. La taille de lot effective ici est de 1, contre les 256 utilisés par la configuration pi05_libero d'openpi. Bon à savoir avant de lire une courbe de perte. Le réglage s'applique aux exécutions de GR00T N1.7 et GR00T N1.5.
L'inférence fonctionne de la même manière : un pod est provisionné pour servir la politique et votre client local communique avec lui. Le pod dispose d'un watchdog d'inactivité et se détruit, de sorte qu'un onglet oublié ne facture pas silencieusement. La mise en garde sur la latence s'applique, c'est pourquoi ACT à 20 ms l'emporte souvent sur une tâche rapide.
Quand cela ne fonctionne pas
| Symptôme | Cause la plus probable |
|---|---|
| Exécution rejetée avant de commencer | Jeu de données v2.1 mais Pi0.5 veut v3.0, ou l'inverse pour GR00T |
| ImportError, package datasets manquant | lerobot 0.6.x sans l'extra d'entraînement |
| ValueError concernant q01 et q99 sur le premier lot | Pas de quantiles dans meta/stats.json ; recalculer ou utiliser MEAN_STD |
| CUDA out of memory à l'étape 0 | Fine-tune complet en dessous de 70 Go ; essayez le checkpointing ou train_expert_only |
| Erreur 401 ou de dépôt à accès contrôlé | Licence du tokenizer PaliGemma non acceptée |
| La perte diminue, le robot ne fait rien | Inadéquation de la normalisation, ou la politique copie l'état |
| Le bras s'interrompt entre les chunks | Latence par étape plus aller-retour ; la file d'attente de chunks se vide |
| Fonctionne dans une configuration, échoue dans une autre | Trop peu d'épisodes, ou tous dans une seule configuration |
- Jeu de données rejeté : v3 requise
- Mémoire insuffisante pendant l'entraînement
- La perte diminue mais la politique ne fait rien
- La politique se fige en plein mouvement
- La politique ne fonctionne que dans une seule configuration
- Tâche d'entraînement bloquée en file d'attente
Ce que coûte une exécution
Pi0.5 se situe dans la catégorie coûteuse car il nécessite une carte de 80 Go, et les prix spot varient, donc le chiffre est une fourchette plutôt qu'un prix. Pour de nombreuses tâches SO-100, entraînez SmolVLA ou ACT sur la catégorie 24 Go d'abord, confirmez que la tâche est bien apprenable, puis consacrez-y des heures A100. Entraînez votre première politique parcourt cette boucle moins chère, et la tarification contient les catégories actuelles.
| Catégorie | Politiques | Exécution typique | Prix par heure | Coût par exécution |
|---|---|---|---|---|
| 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 |

Avant de vous engager pour une soirée : GR00T N1.7 contre Pi0.5 et Pi0.5 contre SmolVLA présentent les mêmes chiffres côte à côte. L'Arène contient 85 modèles VLA avec 332 résultats de benchmark, chacun lié à sa source, et des informations de fond sur la famille se trouvent dans notre aperçu des VLA.
Entraînez Pi0.5 sans construire la pile
Choisissez le jeu de données et les hyperparamètres dans un formulaire. Le backend loue une carte de 80 Go sur le marché spot, exécute l'entraîneur et écrit les points de contrôle dans le stockage d'objets. Guides pour SO-100, SO-101, Koch v1.1 et LeKiwi.
Ouvrir les guides d'entraînementPuis-je affiner Pi0.5 sur une RTX 4090 ?▾
Pas un réglage fin complet : openpi indique plus de 70 Go pour cela, donc une A100 80 Go ou une H100. Son chiffre LoRA de 22,5 Go appartient au chemin JAX ; l'implémentation PyTorch n'a pas de LoRA. L'intégration PEFT de LeRobot existe, mais son exemple documenté est SmolVLA et aucun chiffre de VRAM n'est publié pour pi05.
Combien d'épisodes me faut-il ?▾
Cinquante, le même seuil que GR00T et ACT ; seul SmolVLA descend plus bas, à 30. Le point de contrôle de base contient plus de 10 000 heures de pré-entraînement, donc le réglage fin s'adapte plutôt que d'apprendre de zéro : 50 épisodes propres et variés l'emportent sur deux cents provenant d'une seule configuration.
Quelle est la différence entre --policy.path et --policy.pretrained_path ?▾
--policy.path charge les poids et le config.json du point de contrôle, de sorte que les paramètres stockés tels que n_action_steps sont hérités et --policy.type doit être omis. --policy.pretrained_path ne charge que les poids : les noms des caractéristiques proviennent de votre jeu de données, les paramètres stockés sont réinitialisés, --policy.type est requis. C'est pourquoi la commande LIBERO passe n_action_steps=10 et empty_cameras=1 explicitement ; sinon, ils reviennent à 50 et 0.
La version ouverte me donne-t-elle le Pi0.5 complet de l'article ?▾
Non. Les deux ne prennent en charge que la tête d'action de correspondance de flux. L'étape de pré-entraînement par jetons discrets avec le tokenizer d'action FAST et la prédiction de sous-tâches de haut niveau n'ont pas été publiées, et la carte lerobot/pi05_base ajoute le RL à cette liste même si l'article pi0.5 ne décrit aucune étape d'apprentissage par renforcement. Vous entraînez une politique de bas niveau conditionnée par une chaîne de caractères que vous fournissez, et non un modèle qui décompose lui-même une tâche longue.
Contre quelles versions ce guide est-il écrit ?▾
openpi sur main et lerobot 0.6.1, la version depuis le 3 août 2026, toutes deux lues le 23 août 2026. Les jeux de données v3.0 sont arrivés avec la version 0.4.0 en octobre 2025. La version 0.6.0 a allégé le package de base, de sorte que lerobot[pi] seul n'installe plus de pile d'entraînement, et a déplacé le déploiement vers lerobot-rollout. Le RTC au moment de l'entraînement n'est que sur main ; l'entraîneur hébergé ici exécute la version 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