
Fine-tune Pi0.5, das Flow-Matching VLA von Physical Intelligence, mit Ihren eigenen Roboterdaten. Echte Befehle für openpi und lerobot pi05, Fallstricke im Datensatzformat, VRAM- und Latenzgrenzen.
Pi0.5 ist das Modell der Wahl, wenn eine Policy in einem Raum funktionieren muss, den sie noch nie zuvor gesehen hat. Es ist auch das umständlichste der fünf trainierbaren Policies hier, um manuell feinabzustimmen: Das Upstream-Repository ist primär JAX, der LeRobot-Port hat die Bereitstellung in 0.6.0 aus lerobot-record verschoben und die Basisinstallation zu klein gemacht, um damit zu trainieren, und ein vollständiges Fine-Tuning passt nicht auf eine 4090. Unten: was Flow Matching bei der Inferenz kostet, die beiden Befehlsrouten und die Zahl von 485 ms, die entscheidet, ob das Ergebnis nutzbar ist.
Was Sie wissen müssen
- •Ein Flow-Matching VLA: ein 3B PaliGemma VLM plus ein 300M Action Expert, der kontinuierliche Aktions-Chunks dekodiert. Zwei Wege zum Fine-Tuning, openpi und LeRobot pi05, 0.65 Punkte Unterschied im LIBERO-Durchschnitt.
- •Ein vollständiges Fine-Tuning benötigt mehr als 70 GB VRAM. openpi listet LoRA mit 22.5 GB, nur auf seinem JAX-Pfad.
- •Der Datensatz muss LeRobotDataset v3.0 mit q01- und q99-Quantilen in meta/stats.json sein, sonst schlägt der erste Batch fehl.
- •Überprüfen Sie zuerst Ihre lerobot-Version: 0.6.0 hat das Basispaket leichtgewichtig gemacht und die Bereitstellung aus lerobot-record verschoben.
- •Hier läuft es mit 485 ms pro Aktionsschritt, benötigt 50 Episoden und kostet etwa 4 bis 12 USD pro Lauf.
Was Pi0.5 tatsächlich ist
Physical Intelligence veröffentlichte pi0 im Oktober 2024: ein Flow-Matching Vision-Sprache-Aktions-Modell auf einem vortrainierten VLM: PaliGemma mit 3 Milliarden Parametern plus einem 300M Action Expert, der von Grund auf initialisiert wurde, insgesamt 3.3 Milliarden. Das Paper berichtet über ein Vortraining mit über 10.000 Stunden Robotikdaten über 7 Roboterkonfigurationen und 68 Aufgaben hinweg. Mehr dazu im pi0-Artikel.
Pi0.5 (arXiv 2504.16054, 22. April 2025) behält dieses Skelett bei und ändert die Trainingsdiät: Webdaten, Objekterkennung, verbale Anweisungen von Menschen, die den Roboter coachen, Unteraufgaben-Labels, Cross-Embodiment-Daten von Robotern in vielen Haushalten. Das Ergebnis ist ein Roboter, der Küchen in Häusern reinigt, die nicht im Trainingsdatensatz waren. Die openpi README fügt ein Detail hinzu, das der Titel nicht enthält: Das veröffentlichte pi0.5 wurde mit Wissensisolation (arXiv 2505.23705) trainiert.
| Eigenschaft | pi0 | pi0.5 |
|---|---|---|
| VLM-Backbone-Variante | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) |
| Aktions-Experten-Variante | gemma_300m | gemma_300m |
| action_dim | 32 | 32 |
| Aktionshorizont Standard | 50 | 50 |
| max_token_len | 48 | 200 |
| discrete_state_input | false | true, Zustand in Bins im Prompt diskretisiert |
| Basis-Checkpoint | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
Die openpi README ist explizit: Das Repository unterstützt nur den Flow-Matching-Head, sowohl für das Training als auch für die Inferenz von pi0.5. Das Paper beschreibt zwei Stufen, und der Code enthält nur die zweite: Das Vortraining stellt jede Aktion als diskrete Tokens über den FAST-Tokenizer dar, und bei der Bereitstellung leitet das Modell eine übergeordnete Unteraufgabe vor jedem Aktions-Chunk ab. Keines davon ist im Repository enthalten. Die lerobot/pi05_base-Karte gibt dieselbe Liste an und fügt RL hinzu, obwohl das pi0.5-Paper überhaupt keine Reinforcement-Learning-Stufe beschreibt. Der LeRobot-Port erbt diesen Umfang, ebenso wie jeder darauf gehostete Trainer, einschließlich des hier. Die Lizenzierung ist ebenfalls geteilt: Die pi05-Dokumentationsseite sagt Apache 2.0, die lerobot/pi05_base-Karte ist mit license: gemma getaggt.
Was Flow Matching an Training und Inferenz ändert
Eine Policy die Sie auf einem SO-100 trainieren können, regrediert entweder Aktionen direkt (ACT) oder tokenisiert sie und dekodiert autoregressiv (pi0-FAST). Flow Matching tut keines von beidem: Es lernt ein Vektorfeld, das Rauschen zu einem sauberen Aktions-Chunk, und integriert es dann. Das pi0-Paper verwendet 10 Integrationsschritte mit einer Schrittgröße von 0.1; LeRobots pi05-Konfiguration enthält dieselbe num_inference_steps: int = 10.
- Training: Der Verlust regrediert einen verrauschten Aktions-Chunk. Kein Tokenizer zum Abstimmen, keine Diskretisierung Ihrer Gelenkwinkel.
- Inferenz: Ein Chunk kostet zehn Vorwärtsdurchläufe durch den Aktions-Experten. Das ist strukturell, kein Abstimmungsproblem.
- Ausgabe: Kontinuierliche Aktionen der Dimension 32, intern aufgefüllt, Verlust wird auf den Dimensionen berechnet, die Ihr Roboter hat. Ein 6-DoF-Arm plus Greifer verwendet 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 TrueDas PaliGemma-Backbone und das Gate davor
PaliGemma (arXiv 2407.07726) ist ein SigLIP-So400m Vision-Encoder auf einem Gemma-2B Sprachmodell mit etwa 3 Milliarden Parametern. Pi0.5 erbt seinen Tokenizer, und dieser Tokenizer befindet sich in einem geschützten Repository. Dies ist der häufigste Grund, warum ein erster Durchlauf scheitert, noch vor dem ersten Trainingsschritt.
Die LeRobot pi05 Dokumentation besagt es deutlich: pi0.5 verwendet den geschützten google/paligemma-3b-pt-224 Tokenizer, akzeptieren Sie daher dessen Lizenz auf dem Hub und führen Sie zuerst hf auth login aus. Der Zugriff wird manuell gewährt, nicht sofort. Überspringen Sie dies, starten Sie einen kostenpflichtigen Cloud-Lauf, und Sie bezahlen für einen Pod, der keinen Tokenizer herunterladen kann.
Bevor Sie beginnen: Datensatzformat, Episoden, Hardware
Pi0.5 in LeRobot liest einen LeRobot-Datensatz im v3.0-Layout, das mit lerobot 0.4.0 im Oktober 2025 eingeführt wurde: viele Episoden pro Parquet- und MP4-Datei anstelle einer Datei pro Episode, mit Begrenzungen in meta/episodes/ anstatt in Dateinamen. Nehmen Sie mit dem Desktop-Client auf oder folgen Sie Aufnahme Ihres ersten Datensatzes und Sie haben es.
| Modus | Benötigter GPU-Speicher | Beispiel-GPU |
|---|---|---|
| Inferenz | mehr als 8 GB | RTX 4090 |
| Feinabstimmung, LoRA | mehr als 22,5 GB | RTX 4090 |
| Feinabstimmung, vollständig | mehr als 70 GB | A100 80 GB oder H100 |
Pi0.5 und SmolVLA benötigen LeRobot v3.0. GR00T N1.7 und GR00T N1.5 benötigen v2.0 oder v2.1 und stürzen bei einem v3.0-Datensatz ab. Eine Aufnahmesitzung kann nicht beide ohne Konvertierung versorgen, und der Fehler meldet nicht "falsche Datensatzversion". Siehe Datensatz abgelehnt: v3 erforderlich.
# 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 offsetsDie Plattform benötigt mindestens 50 Episoden für Pi0.5, die gleiche Untergrenze wie für GR00T und ACT. Das Vortraining leistet die Hauptarbeit, daher sind 50 saubere Episoden besser als 200 schlampige. Neu hier? Beginnen Sie mit dem Leitfaden zur Datenerfassung.

Route A: Feinabstimmung mit dem openpi-Repository
Die Referenzimplementierung: Zuerst JAX, nur unter Ubuntu 22.04 getestet, gesteuert durch Konfigurationsobjekte statt Flags. Ein PyTorch-Pfad kam im September 2025, validiert auf LIBERO. Drei Schritte: Daten konvertieren, Konfiguration definieren, trainieren und bereitstellen.
- 1Klonen und installieren
openpi verwendet uv. GIT_LFS_SKIP_SMUDGE ermöglicht es LeRobot, als Abhängigkeit ohne LFS-Blobs zu fungieren.
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 . - 2Ihre Daten in ein LeRobot-Dataset konvertieren
Upstream liefert Konverter für LIBERO und DROID und erwartet, dass Sie einen davon anpassen. Die Arbeit besteht in der Schlüsselzuordnung.
bashuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data - 3Eine Trainingskonfiguration hinzufügen
Konfigurationen sind TrainConfig-Einträge in src/openpi/training/config.py. Diese hier passt pi05_droid_finetune an, wobei der Weight Loader auf pi05_base zeigt.
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, ) - 4Normierungsstatistiken berechnen
Läuft gegen den Konfigurationsnamen, nicht gegen das Dataset. Diesen Schritt zu überspringen, ist hier der klassische erste Fehler.
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5Trainieren
Die Variable lässt JAX 90 Prozent des GPU-Speichers nutzen, anstatt der standardmäßigen 75. Auf einer 80-GB-Karte entscheidet dies, ob der Lauf überlebt.
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6Bereitstellen
Der Server lauscht auf Port 8000 und beantwortet Beobachtungsanfragen; Ihre Roboter-Laufzeitumgebung ist der Client.
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
openpi's PyTorch-Implementierung unterstützt keine pi0-FAST, Mixed Precision, FSDP, LoRA oder EMA-Gewichte, daher ist die LoRA, die 22.5 GB erreicht, nur JAX-basiert, über die Varianten gemma_2b_lora und gemma_300m_lora. Schlimmer noch: Das Setup kopiert gepatchte Dateien über Ihre installierten transformers 4.53.2, und die README warnt, dass dies im Standard-Hardlink-Modus von uv transformers im uv-Cache dauerhaft modifiziert und in andere Projekte eindringen kann. Machen Sie dies rückgängig mit uv cache clean transformers.
Route B: Fine-Tuning mit lerobot pi05
Der LeRobot-Port kapselt dieselben Gewichte in der CLI, die Sie bereits für ACT und SmolVLA. Alles Folgende wurde mit lerobot 0.6.1, der Veröffentlichung vom 3. August 2026, und den pi05-Dokumenten vom 23. August 2026 überprüft. Versionen sind hier wichtig: v3.0-Datensätze kamen mit 0.4.0 im Oktober 2025, der 0.5.0-Blog vom 9. März 2026 stellt pi0-FAST und Real-Time Chunking vor, und 0.6.0 vom 6. Juli 2026 machte das Basispaket leichtgewichtig und verlagerte die Bereitstellung auf lerobot-rollout.
Eines hat sich nicht geändert: lerobot-train und lerobot-record waren bereits in 0.3.2, August 2025, Einstiegspunkte. Ein Tutorial, das immer noch python -m lerobot.scripts.train aufruft, ist älter als ein Jahr voller Änderungen und sollte auch im Übrigen misstrauisch betrachtet werden.
- 1Installation mit den richtigen Extras
Seit 0.6.0 enthält die Basisinstallation nur die Kern-ML-Abhängigkeiten, und das Pi-Extra fügt keinen Datensatz- oder Trainingscode hinzu, daher benötigt ein Fine-Tuning auch das Trainings-Extra. Ältere Einzeiler schlagen hier zur Importzeit fehl.
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]' - 2Authentifizieren
Akzeptieren Sie die paligemma-3b-pt-224-Lizenz in einem Browser und melden Sie sich dann auf der Trainingsmaschine an.
bashhf auth login - 3Quantilstatistiken hinzufügen
Pi0.5 normalisiert STATE und ACTION mit Quantilen, daher benötigt meta/stats.json q01 und q99. Ältere Datensätze enthalten nur 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 von lerobot/pi05_base
Stellen Sie die Batch-Größe so ein, dass Ihre Karte damit zurechtkommt; die Dokumentation verwendet 64 auf LIBERO bei 80 GB. Übergeben Sie bfloat16 explizit, der Standardwert der Konfiguration ist 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 - 5Auf dem Arm ausführen
In 0.6.x ist dies lerobot-rollout: lerobot-record lehnt eine Policy ab und weist eval_-Datensatznamen zurück. Base steuert den Arm, sentry zeichnet den Rollout auf.
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 | Was es tut | Hinweis |
|---|---|---|
| --policy.type=pi05 | wählt Pi0.5 aus | erforderlich mit pretrained_path, weglassen mit --policy.path |
| --policy.pretrained_path | lädt nur Gewichte | Feature-Namen aus Ihrem Datensatz, gespeicherte Einstellungen werden zurückgesetzt |
| --policy.path | Gewichte plus die Checkpoint config.json | gespeicherte Einstellungen wie n_action_steps werden übernommen |
| --policy.n_action_steps | Schritte pro Chunk verbraucht | fällt auf 50 zurück, nie über chunk_size (Standard 50) |
| --policy.train_expert_only | friert das VLM ein, trainiert den Experten | Standard false, weniger Speicher, einige Kosten im Erfolg |
| --policy.gradient_checkpointing | Neuberechnung statt Speicherung von Aktivierungen | Standard false, der erste Hebel, wenn ein Lauf nicht passt |
| --peft.method_type=LORA | LoRA-Adapter anstelle vollständiger Gewichte | benötigt das peft-Extra, dokumentiertes Beispiel ist SmolVLA |
| --policy.rtc_training_max_delay | Action-Präfix-Konditionierung für RTC | nur im Main-Branch, nicht in 0.6.1, muss unter chunk_size bleiben |
| --rename_map | ordnet Datensatzspalten Policy-Features zu | erforderlich, wenn Ihre Kameratasten abweichen |
Ohne Quantile erhalten Sie ValueError: QUANTILES normalization mode requires q01 and q99 stats im ersten Batch. Berechnen Sie die Statistiken neu, aber das Ergebnis landet in $HF_LEROBOT_HOME/your_dataset, nicht im Cache, den --dataset.repo_id liest. Trainieren Sie also mit --dataset.root, das dorthin zeigt, oder pushen Sie es zum Hub. Oder überspringen Sie Quantile mit --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}', wie es der LIBERO-Referenzbefehl tut.
Drei Sätze von Standardwerten und welche davon den Trainer erreichen
openpis TrainConfig ist die Referenz, LeRobots PI05Config wird von lerobot-train verwendet, wenn Sie nichts angeben, und das Formular hier sendet einen dritten Satz. Die Überraschung ist die Lernrate: Beide Upstream-Standardwerte erreichen 2.5e-5, während openpis eigene pi05_libero Konfiguration und diese Plattform sie auf 5e-5 erhöhen.
| Einstellung | openpi TrainConfig | lerobot pi05 und lerobot-train | AY-Robots sendet |
|---|---|---|---|
| Batch-Größe | 32 | 8 | 1 |
| Maximale Lernrate | 2.5e-5, Cosinus-Zerfall | optimizer_lr 2.5e-5 | 5e-5 |
| Trainingsschritte | 30,000 | 100,000 | 30,000 |
| Checkpoint-Intervall | 1,000 Schritte | 20,000 Schritte | nicht im Formular |
| Seed | 42 | 1,000 | im Formular |
| Aktions-Chunk | action_horizon 50 | chunk_size 50, n_action_steps 50 | nicht im Formular |
| Gewichts-Datentyp | bfloat16 | float32 until you pass --policy.dtype | nicht im Formular |
| Gradientenakkumulation | kein solcher Regler, stattdessen fsdp_devices | bisher in keiner Version vorhanden | 16, und es wird verworfen |
Ist der Port originalgetreu? Das LeRobot-Team hat das LIBERO-Basismodell für weitere 6k Schritte feinabgestimmt und mit den Referenzzahlen von openpi auf vier Suiten verglichen: 97.5 Prozent im Durchschnitt gegenüber 96.85, vorne bei Libero 10, hinten bei Spatial. Die Route ist eine Werkzeugwahl, keine Qualitätswahl.
- Mehr als 10,000 Stunden Roboter-Vortraining dahinter, sodass 50 Episoden Ihrer Aufgabe ausreichen können.
- Kontinuierliche Aktionen: kein Tokenizer zum Abstimmen, keine Diskretisierungsuntergrenze für Ihre Gelenkwinkel.
- Der LeRobot-Port erreicht 97.5 Prozent im LIBERO-Durchschnitt gegenüber openpis 96.85, sodass die benutzerfreundlichere CLI keine messbaren Kosten verursacht.
- Parameter-effiziente Pfade auf beiden Seiten: openpis JAX LoRA-Varianten, LeRobots PEFT-Integration.
- Vollständiges Fine-Tuning benötigt mehr als 70 GB. Die 22.5 GB LoRA-Zahl ist openpis JAX-Wert; für pi05 unter PEFT ist keine veröffentlicht.
- 485 ms pro Aktionsschritt, der langsamste der fünf hier: doppelt so langsam wie SmolVLA, vierundzwanzigmal so langsam wie ACT.
- LeRobot v3.0 ist erforderlich, daher muss ein für einen GR00T-Lauf aufgezeichneter Datensatz konvertiert werden und umgekehrt.
- Neue Optionen landen zuerst auf main: RTC- und MEM-Speicher zur Trainingszeit sind nicht in 0.6.1 enthalten, daher kann die neueste Dokumentation eine Installation von git bedeuten.
Die 485 ms Realität und wo sie unbrauchbar wird
Dies entscheidet über Ihr Projekt, daher steht es vor der Kostentabelle. Die pro Aktionsschritt, hier für Pi0.5 gemessen, beträgt 485 ms. Im Vergleich zu den anderen vier:
| Policy | Inferenz pro Aktionsschritt | Parameter | GPU-Klasse | Minimale Episoden |
|---|---|---|---|---|
| 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 |

Die Regelschleife dieser fünf Modelle läuft 20 bis 485 ms pro Aktionsschritt. Öffentliche Internet-Roundtrips zusätzlich zu den 485 ms verwandeln eine funktionierende Policy in eine zögerliche. Remote-Inferenz ist für langsames Pick-and-Place praktikabel, nicht für schnelle reaktive Bewegungen. Das sagen wir lieber, als eine Demo zu verkaufen, die nur im LAN funktioniert. Wenn Ihr Arm zwischen den Chunks pausiert, beginnen Sie bei Policy friert mitten in der Bewegung ein.
Upstream hat eine Antwort, und die Hälfte davon ist bereits in der Release enthalten, die Sie installieren können. Real-Time Chunking generiert den nächsten Chunk, während der Arm noch den aktuellen ausführt, und führt dann die überlappenden Schritte des neuen Chunks so, dass sie nahe am bereits ausgeführten Teil bleiben, damit der Arm an der Nahtstelle nicht stoppt oder ruckelt. Die Inferenz-Zeit-Form wurde im 0.4.2 Changelog für Pi0, Pi0.5 und SmolVLA ausgeliefert und ist ein Rollout-Flag, kein 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=60Es macht das Modell nicht schneller. Es verbirgt die Lücke: Die 485 ms werden immer noch aufgewendet, aber außerhalb des kritischen Pfades, sodass die Warteschlange zwischen den Chunks nicht leerläuft. Die Trainingszeit-Variante von arXiv 2512.05964 geht noch weiter: Das Modell lernt, sich an ein sauberes Aktionspräfix zu konditionieren, sodass bei der Inferenz die Überlappung mit aktionsspezifischen Fluss-Zeitschritten hart eingefärbt wird, anstatt geführt zu werden, und der Guidance-Rückwärtspass verschwindet. Während des Trainings wird pro Beispiel eine Präfixlänge abgetastet und der Flussverlust auf dem verbleibenden Postfix berechnet. Dieses Flag existiert nur im Main-Branch, nicht in 0.6.1, und die Verzögerung, für die Sie trainieren, muss unter chunk_size bleiben.
Zwei Wege, einen Pi0.5-Checkpoint zu erhalten
Sie mieten oder besitzen eine 80-GB-Karte, installieren einen der oben genannten Stacks, konvertieren Ihren Datensatz und überwachen den Lauf. Sie behalten jede Einstellung: openpis JAX LoRA, LeRobots PEFT-Adapter, relative Aktionen, benutzerdefinierte Tastenbelegungen. Sie behalten auch jeden Fehler.
- Hardware: A100 80 GB oder H100, oder eine 24-GB-Karte auf dem JAX LoRA-Pfad von openpi.
- Setup: ein Nachmittag für den ersten Lauf, hauptsächlich Tastenbelegung und der gated Tokenizer.
- Nicht im gehosteten Formular: PEFT-Adapter, relative Aktionen, Trainingszeit-RTC, MEM-Speicher.
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=1000Sie wählen Modell und Datensatz im Trainingsformular aus, das Backend mietet eine GPU auf einem Spotmarkt nach benötigtem VRAM, führt den Trainer aus und schreibt Checkpoints in den Objektspeicher. Pi0.5 ist hier nur in der Cloud verfügbar. Anleitungen existieren für SO-100, SO-101, Koch v1.1 und LeKiwi.
| Einstellung | Was die Plattform für Pi0.5 sendet |
|---|---|
| Basis-Checkpoint | lerobot/pi05_base |
| Policy-Typ | pi05 |
| Batch-Größe | 1 |
| Lernrate | 5e-5 |
| Max. Schritte | 30000 |
| Gradientenakkumulation | 16, aber siehe die Warnung unten |
| Zusätzliche Einstellungen im Formular | seed, logFreq |
| Datensatzformat | LeRobot v3.0 |
| GPU-Tier | A100 80 GB oder H100 80 GB |
Der Trainer sendet einen Gradientenakkumulationswert von 16, und lerobot 0.5.1 hat kein Flag, um diesen zu empfangen, sodass er verworfen wird. Keine veröffentlichte lerobot-Version hat ein solches: Die Einstellung existiert nur im Hauptzweig, als --accelerator.gradient_accumulation.steps. Die effektive Batch-Größe beträgt hier 1, im Gegensatz zu den 256, die openpis pi05_libero-Konfiguration verwendet. Gut zu wissen, bevor Sie eine Verlustkurve lesen. Die Einstellung gilt für GR00T N1.7 und GR00T N1.5 Läufe.
Die Inferenz funktioniert auf die gleiche Weise: Ein Pod wird bereitgestellt, um die Policy zu bedienen, und Ihr lokaler Client kommuniziert mit ihm. Der Pod verfügt über einen Idle-Watchdog und zerstört sich selbst, sodass ein vergessener Tab nicht stillschweigend Kosten verursacht. Der Latenzvorbehalt gilt, weshalb ACT bei 20 ms oft eine schnelle Aufgabe gewinnt.
Wenn es nicht funktioniert
| Symptom | Wahrscheinlichste Ursache |
|---|---|
| Lauf vor dem Start abgelehnt | Datensatz v2.1, aber Pi0.5 benötigt v3.0, oder umgekehrt für GR00T |
| ImportError, datasets-Paket fehlt | lerobot 0.6.x ohne das Trainings-Extra |
| ValueError bezüglich q01 und q99 bei Batch eins | Keine Quantile in meta/stats.json; neu berechnen oder MEAN_STD verwenden |
| CUDA out of memory bei Schritt 0 | Volles Fine-Tuning unter 70 GB; versuchen Sie Checkpointing oder train_expert_only |
| 401 oder gated Repo-Fehler | PaliGemma Tokenizer-Lizenz nicht akzeptiert |
| Verlust fällt, Roboter tut nichts | Normalisierungs-Mismatch, oder die Policy kopiert den Zustand |
| Arm pausiert zwischen Chunks | Latenz pro Schritt plus Roundtrip; die Chunk-Warteschlange läuft leer |
| Funktioniert in einem Setup, schlägt in einem anderen fehl | Zu wenige Episoden, oder alle in einer Konfiguration |
- Datensatz abgelehnt: v3 erforderlich
- Speicherüberlauf während des Trainings
- Verlust sinkt, aber die Policy tut nichts
- Policy friert mitten in der Bewegung ein
- Policy funktioniert nur in einem Setup
- Trainingsjob in Warteschlange festgefahren
Was ein Durchlauf kostet
Pi0.5 befindet sich in der teuren Stufe, da es eine 80-GB-Karte benötigt und die Spotpreise schwanken, sodass die Angabe eher eine Spanne als ein fester Preis ist. Für viele SO-100-Aufgaben trainieren Sie zunächst SmolVLA oder ACT auf der 24-GB-Stufe, um zu bestätigen, dass die Aufgabe überhaupt erlernbar ist, und investieren Sie dann A100-Stunden dafür. Trainieren Sie Ihre erste Policy beschreibt diesen günstigeren Ablauf, und Preise enthält die aktuellen Stufen.
| Stufe | Policies | Typischer Durchlauf | Preis pro Stunde | Kosten pro Durchlauf |
|---|---|---|---|---|
| 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 |

Bevor Sie einen Abend investieren: und legen die gleichen Zahlen direkt gegenüber. Die enthält 85 VLA-Modelle mit 332 Benchmark-Ergebnissen, jedes mit seiner Quelle verknüpft, und Hintergrundinformationen zur Familie finden Sie in .
Pi0.5 trainieren, ohne den Stack aufzubauen
Wählen Sie den Datensatz und die Hyperparameter in einem Formular aus. Das Backend mietet eine 80-GB-Karte auf dem Spotmarkt, führt den Trainer aus und schreibt die Checkpoints in den Objektspeicher. Anleitungen für SO-100, SO-101, Koch v1.1 und LeKiwi.
Trainingsanleitungen öffnenKann ich Pi0.5 auf einer RTX 4090 feinabstimmen?▾
Kein vollständiges Fine-Tuning: openpi listet dafür mehr als 70 GB auf, also eine A100 80 GB oder eine H100. Die 22,5 GB LoRA-Angabe gehört zum JAX-Pfad; die PyTorch-Implementierung hat kein LoRA. Die PEFT-Integration von LeRobot existiert, aber das dokumentierte Beispiel ist SmolVLA und es wird keine VRAM-Angabe für pi05 veröffentlicht.
Wie viele Episoden benötige ich?▾
Fünfzig, die gleiche Untergrenze wie GR00T und ACT; nur SmolVLA geht tiefer, bei 30. Der Basis-Checkpoint enthält mehr als 10.000 Stunden Vortraining, sodass das Fine-Tuning eher anpasst als von Grund auf lernt: 50 saubere, abwechslungsreiche Episoden schlagen zweihundert aus einer Konfiguration.
Was ist der Unterschied zwischen --policy.path und --policy.pretrained_path?▾
--policy.path lädt Gewichte und die config.json des Checkpoints, sodass gespeicherte Einstellungen wie n_action_steps übernommen werden und --policy.type weggelassen werden muss. --policy.pretrained_path lädt nur Gewichte: Feature-Namen stammen aus Ihrem Datensatz, gespeicherte Einstellungen werden zurückgesetzt, --policy.type ist erforderlich. Deshalb übergibt der LIBERO-Befehl n_action_steps=10 und empty_cameras=1 explizit; andernfalls fallen sie auf 50 und 0 zurück.
Bietet mir die offene Version das vollständige Pi0.5 aus dem Paper?▾
Nein. Beide unterstützen nur den Flow-Matching-Action-Head. Die diskrete Token-Vortrainingsphase mit dem FAST-Action-Tokenizer und die High-Level-Subtask-Vorhersage wurden nicht veröffentlicht, und die lerobot/pi05_base-Karte fügt RL zu dieser Liste hinzu, obwohl das pi0.5-Paper keine Reinforcement-Learning-Phase beschreibt. Sie trainieren eine Low-Level-Policy, die auf einer von Ihnen bereitgestellten Sprachzeichenfolge konditioniert ist, nicht ein Modell, das eine lange Aufgabe selbst zerlegt.
Auf welche Versionen bezieht sich diese Anleitung?▾
openpi auf main und lerobot 0.6.1, die Veröffentlichung seit dem 3. August 2026, beide gelesen am 23. August 2026. v3.0-Datensätze kamen mit 0.4.0 im Oktober 2025. 0.6.0 machte das Basispaket leichtgewichtig, sodass lerobot[pi] allein keinen Trainings-Stack mehr installiert und die Bereitstellung auf lerobot-rollout verschob. Trainingszeit-RTC ist nur auf main; der hier gehostete Trainer läuft mit 0.5.1.
Quellen
- 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
Bereit für hochwertige Robotik-Daten?
AY-Robots verbindet Ihre Roboter mit qualifizierten Operatoren weltweit.
Jetzt starten