Zurück zu Learn

Wie man ein VLA-Modell für den Roboter anpasst

Schritt-für-Schritt-Leitfaden zur Fein-Tuning von OpenVLA oder pi0 auf Ihrem Teleoperationsdatensatz <unk> Datenvorbereitung, Ausbildungskonfiguration, Bewertung und Bereitstellung.

Schritt-für-Schritt-Leitfaden zum Fein-Tuning von OpenVLA oder pi0 auf Ihrem Teleoperationsdatensatz Datenvorbereitung, Schulungskonfiguration, Bewertung, Quantifizierung und Bereitstellung auf der echten Hardware.

Weiterentwicklung 12 Tage Aktualisiert April 2026

1. Voraussetzungen 2. Installieren 3. Datensatz 4. Konfiguration 5. Zug 6. Monitor 7. Beurteilung 8. Quantifizieren 9. Bereitstellung 10. Iteration

Voraussetzungen

  • Ein Teleoperationsdatensatz mit mehr als 300 hochwertigen Episoden im RLDS-Format ([siehe Datenerhebungslehrbuch](T10))
  • NVIDIA-GPU mit 24 GB+ VRAM (RTX 4090 für LoRA, A100/H100 für vollständige Feintuning)
  • Python 3.10+ mit CUDA 12.1+
  • Bekanntschaft mit PyTorch und HuggingFace Transformers
  • Gewichte & Vorurteile (für Holzbau, kostenlose Arbeiten)
  • ROS2 installiert auf Ihrer Robotermaschine ([siehe Einrichtungsanleitung](T11))

Was du bauen wirst

Sie nehmen ein vorgeübtes VLA-Modell (OpenVLA-7B), passen es auf die Demonstrationsdaten Ihres Robots ein, bewerten es mit Ausführungsexperimenten, quantifizieren es für Echtzeit-Förderung und setzen es als ROS2-Aktionsserver auf Ihrem Roboter ein. Erwarten Sie eine Erfolgsrate von 6080% bei Aufgaben im Vertrieb bei Ihrem ersten Lauf, verbessert sich mit iterativer Datenerhebung.

VLA-Feinabstimmung-Pipeline

RLDS Datensatz Mehr als 300 Episoden

Die

OpenVLA / pi0 Vorgebildeter 7B

Die

  • Schöne Ton LoRA oder Voll

Die

Beurteilung Ausführungstests

Die

Einsatz ROS2 + INT4

1

Überprüfen Sie die Vorbedingungen und die GPU-Einstellung

Überprüfen Sie Ihre GPU, CUDA-Version und verfügbare VRAM vor dem Start.

Method Min VRAM GPU Cost Estimate
LoRA fine-tune 24 GB RTX 4090, A5000 $50–150
Full fine-tune 40 GB A100 40GB $150–300
Full fine-tune (multi-GPU) 2x 40 GB 2x A100 $250–400

Kopieren# Verifizieren CUDA und GPU nvidia-smi python3 -c "Import Torch; print(f'CUDA: {torch.cuda.is_available()}, Gerät: {torch.cuda.get_device_name(0)}, VRAM: {torch.cuda.get_device_properties(0).total_mem / 1e9:.1f}GB')" # Verifizieren CUDA-Version (Bedarf 12.1+ nvcc) --Version

** Budget Tipp:** Verwenden Sie Vast.ai oder Lambda Labs für die Cloud-GPU-Vermietung. Ein A100 80GB kostet 1,502,50 USD/Std. Ein typischer LoRA-Feinabstimmung-Run dauert 612 Stunden, also Budget $1030 für die GPU allein.

2 .

Installieren von OpenVLA-Abhängigkeiten

Klonen Sie OpenVLA und installieren Sie alle erforderlichen Pakete.

Kopieren# Erstellen Sie virtuelle Umgebung python3 -m venv ~/vla_env Quelle ~/vla_env/bin/aktivieren # Clone OpenVLA git clone T17 cd openvla # Installieren Sie Abhängigkeiten pip installieren -e ".[all]" # Installieren Sie zusätzliche Trainingsabhängigkeiten pip installieren Sie wandb beschleunigen peft bitsandbytes pip installieren flash-attn --no-build-isolation # Login zu wandb für das Experiment-Tracking wandb login # Download vorgeübter OpenVLA Checkpoint python3 -c "von der Umarmung_Import-Snapshot_download; snap_(((openvla/openvla-7b',\dir_='checkpoint local/open-7b') "

3

Bereiten Sie Ihren Datensatz vor

OpenVLA erwartet Daten in einem bestimmten Format. Konvertieren Sie Ihren RLDS-Datensatz oder Ihren LeRobot-Datensatz in das OpenVLA-Trainingsformat.

Copy# Umwandeln Sie Ihren RLDS-Datensatz in OpenVLA-Format python3 scripts/convert_rlds_to_openvla.py \ --input-dir=/datensets/openarm_pick_place_rlds \ --output-dir=/datensets/openarm_openvla \ --image-key="observation/image" \ --state-key="observation/state" \ --action-key="action" \ --language-key="language\instruction" \ \"meta\"#\" Überprüfen Sie den konvertierten Datensatz " json, osson = json.openos.odes.exp.opener's_dim/action/arm\open_task((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

Datenformatprüfung: OpenVLA erwartet Bilder als 224x224 RGB (es vergrößert intern), Aktionen als 7D-kontinuelle Vektoren (6 DOF + Griff) und eine Textspracheanweisung pro Episode. Überprüfen Sie diese Dimensionen vor dem Training Formungleichheiten sind der häufigste Trainingstörung.

4

Einrichten der Ausbildung

Erstellen Sie eine Trainingskonfiguration YAML. Diese Hyperparameter sind für einen typischen Ein-Task-Feinabstimmung-Run abgestimmt.

Kopieren# Speichern als Konfigurationen/finetune_openarm.yaml cat > configs/finetune_openarm.yaml << 'EOF' # OpenVLA Feinabstimmung Config OpenArm Pick & Place Modell: vorgebildet_checkpoint: Checkpoints/openvla-7b use_lora: true # Set false for full-fine-tune lora_rank: 32 lora_alpha: 64 lora_dropout rate: 0.05 Daten: Datensatz_path: ~/datasets/open\arm_open Task_names: "Pick up the red block and place it on the green target zone" Image: 224_size: 7 # 6 # Standards joints + 1 gripper_open_split: 0.9\flap: true_workers: 4\flap: 4\flap: 0\flap: 0\flap: 0\flap: 0\flap: 0\flap: 0\flap: 0\flap: 0\flap: 0\flap

Hypperparameter-Anleitung: Lernrate 2e-5 ist eine sichere Standardregelung für LoRA. Für eine vollständige Fein-Tuning-Verwendung 1e-5. Wenn der Trainingsabzug nach 500 Schritten nicht abnimmt, versuchen Sie 5e-5. Batchgröße 8 mit Gradient-Akkumulation 4 gibt eine effektive Batchgröße von 32, die gut für 300500 Episode-Datensätze funktioniert.

5

Ein Schritt zur Fein-Tuning

Beginnen Sie den Trainingslauf. Für eine einzige GPU verwenden Sie T0; für mehrere GPU verwenden Sie T1.

Copy# Single GPU (RTX 4090 / A100) python3 Skripts/finetune.py \ --config=configs/finetune_openarm.yaml \ --output-dir=runs/openarm-pick-place-v1 \ # Multi-GPU (2x A100) Torchrunnproc-per-Node=2 Skripts/finetune.py \ config=configs/finetune_openarm.yaml \ --output-dir=runs/openarm-pick-place-v1 \ # Erwartete Ausgabe: # 10/5000 \ Loss: 2.34\ LR: 2.0e-6\ TM Time: 1.2s/step # 100/5000 \ Loss: 0.87 \ LR: 1.1e-5e Time: - Step / s / Step: # 0.42 / Loss: # 500/5000 \ ...

Schätzungen der Ausbildungszäle:

Setup Steps/sec Time for 5K steps GPU Cost
RTX 4090 (LoRA) ~0.8 ~1.7 hours $5–10
A100 40GB (LoRA) ~1.5 ~55 min $2–4
A100 80GB (Full) ~0.6 ~2.3 hours $5–8
2x A100 (Full) ~1.0 ~1.4 hours $6–10

6

Überwachen Sie die Ausbildung

Beobachten Sie die Verlustkurve und die Gradientnormen in Gewichten und Biasen.

  • Verluste sollten für die ersten 1.0002.000 Schritte stetig sinken, dann Plateau
  • Die Gradiale Norm sollte zwischen 0,1 und 10,0 liegen Spitzen über 50 zeigen Instabilität
  • Checkpoints werden alle 500 Schritte gespeichert Sie können von jedem Checkpoint aus aufnehmen, wenn das Training abstürzt

Kopieren Sie# Öffnen Sie das Dashboard in Browser wandb öffnen Sie # oder überprüfen Sie die Trainingslogs direkt Schwanz -f-Run/openarm-pick-place-v1/training.log # Liste der gespeicherten Checkpoints ls -la runs/openarm-pick-place-v1/checkpoints/

Wenn die Verlustplateaus über 1.0 liegen: Ihr Datensatz kann Qualitätsprobleme haben. Überprüfen Sie, ob fehlerhafte Episoden, inkonsistente Aktionsskalien oder beschädigte Bilder auftreten. Versuchen Sie, die Lernrate auf 5e-5 zu erhöhen oder die Batchgröße auf 4 zu reduzieren.

7

Beurteilung des Kontrollpunkts

Führen Sie eine Ausführungserhöhung auf Ihrem Roboter (oder in Simulationen) durch, um die Erfolgsrate des fein abgestimmten Modells zu messen.

Kopie# Beurteilen Sie den besten Checkpoint (niedrigsten Valverlust) Python3 Skripts/evaluate.py \ --checkpoint=runs/openarm-pick-place-v1/checkpoints/step-4500 \ --robot-type=openarm \ --robot-port=/dev/ttyUSB0 \ --num-rollouts=20 \ --task="Pick up the red block and place it on the green target zone" # Erwartete Ausgabe: # Rollout 1/20: SUCCESS (14.2s) # Rollout 2/20: SUCCESS (12.8s) # Rollout 3/20: FAILURE Objekt im Schritt 45 # ... # Erfolgsrate: 14/20 (70.0%) # Avg Fertigungszeit: 13.5s

** Erfolgsquote-Benchmarks:** 6080% bei Ihrem ersten Feintuning-Run ist ein starkes Ergebnis. Unter 50% deuten Datenqualitätsprobleme oder zu wenige Episoden auf.

8

Quantiz für den Einsatz

Die VLA-Modelle mit voller Präzision laufen bei 25 Hz, was für die Echtzeitsteuerung zu langsam ist.

Kopieren# Quantizieren Sie auf INT4 mit Bit-und-Bytes python3 Skripts/quantize.py \ --checkpoint=runs/openarm-pick-place-v1/checkpoints/step-4500 \ --quantization=int4 \ --output-dir=runs/openarm-pick-place-v1/quantiziert \ # Benchmark-Inferenzgeschwindigkeit python3 Skripts/benchmark_inference.py \ --checkpoint=runs/openarm-pick-place-v1/quantiziert \ --num-steps=100 \ # Erwartete Ausgabe: # Modellgröße: 4.2 GB (unter 14,8 GB) # Inferenzgeschwindigkeit: 18,3 Hz (± 1,2 Hz) # Latenz: 54,6 ms pro Schritt

Präzision Model Size Inference Hz Min GPU
FP16 (baseline) 14.8 GB 3–5 Hz 24 GB VRAM
INT8 7.4 GB 8–15 Hz 12 GB VRAM
INT4 4.2 GB 15–25 Hz 8 GB VRAM

9

Auf Robot über ROS2 eingesetzt

Erstellen Sie einen ROS2-Aktionsserver, der das quantifizierte VLA-Modell ausführt und Kommandos zum Roboter bei 1020 Hz sendet.

Kopieren Sie das ROS2-Paket für den VLA-Inferenzknoten cd ~/ros2_ws/src ros2 pkg erstellen Sie --build-type ament_python vla_inference \ --dependencies rclpy sensor_msgs std_msgs # Kopieren Sie das Inferenzschrift (einfachere Version unten) cat > ~/ros2_ws/srcvla_inference/vla_inference/inference\self_node.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py.py

Kopieren Sie# Erstellen und ausführen Sie den Ableitungsknoten cd ~/ros2_ws Colcon Build --Packs-Select vla_Inferenzquelle Installation/Setup.bash # Start Roboter + Kameras + VLA Ableitungs-Ros2 Start Openarm_bringup Openarm.launch.py & ros2 Run vla_Inferenz-Inferenz_Node

10

Iterate: Sammeln Sie mehr Daten, Retrain

Ihr erstes Modell wird Fehlermodus haben. Der effektivste Weg, um zu verbessern, ist gezielte Demonstrationen über die Fehlerfälle zu sammeln und neu zu trainieren.

Kopie # 1. Identifizieren Sie Fehlermodi aus den Auswertungsrollen # Häufige Fehler: Objekte in Randpositionen, ungewöhnliche Orientierungen, # Lichtänderungen, Objekte, die das Modell nicht gesehen hat # 2. Sammeln Sie 50-100 gezielte Demonstrationen für Fehlerfälle lerobot-Record \ --robot-type=openarm \ --task="pick_red_block_edge_positions" \ --num-episodes=50 \ --output-dir=~/datasets/openarm_pick_place_v2 # 3. Fusion mit dem ursprünglichen Datensatz python3 scripts/merge_datasets.py \ --datasets ~/datasets/openarm_pick_place ~/datasets/openarm_pick_place_v2 \ --output /datasets/openarm_pick_place_merged # 4. -Fine-Tune wieder (von dem besten vorherigen Checkpoint) python3 scripts/finetune.py \ --config=configs/finetune_openarm.yaml \ --resume-from=runs/openarm-pick-place-v1/checkpoints/step-4500 \ --output-dir=runs/openarm-pick-place-v2 \ --data.dataset_path=/datasets/openarm_pick_place_merged

Iterationsschleife

Die DAgger-Schleife (Dataset Aggregation) hat nachweislich die politische Leistung bei jedem Zyklus verbessert: Bereitstellen → Fehler erkennen → Zieldemos sammeln → Retrain → Beurteilen. Die meisten Teams sehen eine Erfolgsrate von 515% pro Iteration, die innerhalb von 34 Zyklen 8595% erreicht.

Fehlerbehebung

CUDA Out of Memory (OOM) während des Trainings

Reduzieren Sie T2 auf 4 oder 2. Aktivieren Sie die Gradient-Checkpointing, indem Sie T3 in Ihren Konfiguration hinzufügen. Für LoRA reduzieren Sie T4 von 32 auf 16. Als letztes Mittel verwenden Sie die CPU-Ablade mit DeepSpeed ZeRO-3.

Training Verlust ist NaN

Dies bedeutet in der Regel eine zu hohe Lernrate oder beschädigte Daten. Verringern Sie die Lernrate auf 1e-5. Überprüfen Sie mit T5 nach NaN-Werten in Ihrem Datensatz.

Modell erzeugt konstante/identielle Aktionen

Das Modell ist möglicherweise nicht in der Lage, die mittlere Aktion vorherzusagen. Überprüfen Sie, ob Ihr Aktionsraum normalisiert ist (Null-Mittel, Einheitsvarianz). Überprüfen Sie, ob die Aufgabenbeschreibung mit der während der Datenerhebung verwendeten Übereinstimmung übereinstimmt. Versuchen Sie, die Trainingsschritte oder die Lernrate zu erhöhen.

Die Inferenz ist zu langsam für die Echtzeitkontrolle

Verwenden Sie die INT4-Quantifizierung (Schritt 8). Verwenden Sie T8 für eine 2030%ige Beschleunigung. Überlegen Sie, Abschluss auf einer separaten Maschine zu laufen und Aktionen über das Netz zu streamen. Das Mindestziel für die Armmanipulation ist 10 Hz.

Das Quantifizierte Modell hat eine viel niedrigere Erfolgsrate

Einiger Qualitätsverlust wird erwartet (15% Rückgang). Wenn der Rückgang mehr als 10% beträgt, versuchen Sie INT8 anstelle von INT4. Verwenden Sie Kalibrierungsdaten während der Quantifizierung: T9. AWQ-Quantifizierung behält häufig mehr Qualität als GPTQ für VLA-Modelle.

Verwandte Tutorials

  • Ich weiß .

Sammeln Sie Roboter-Training-Daten

Das Vorkursum Teleoperation einrichten und einen Qualitätsdatensatz erstellen.

](T14) [

LeRobot Quickstart

Einfachere Richtlinien (ACT, Diffusionspolitik) vor der Bekämpfung von VLA-Modellen zu entwickeln.

](T15) [

ROS2-Setup-Leitfaden

Einrichten Sie ROS2 für die Roboterteilung und die Entwicklung von Ableitknoten.

](T16)

Häufig gestellte Fragen

Wie viel kostet es, ein VLA-Modell zu optimieren?

Ein typischer Feintuning-Run kostet 150400 USD in GPU-Rechen auf Cloud-Anbietern wie Lambda Labs oder Vast.ai. Dies setzt 12 A100 GPUs für 1248 Stunden voraus. Mit LoRA reduziert dies auf 50150 USD, indem weniger Speicher und weniger Trainingsschritte erforderlich sind.

Was ist der Unterschied zwischen OpenVLA und pi0?

OpenVLA ist ein Open-Source-Vision-Language-Action-Modell mit 7B-Parameter von Stanford, das Kamerabilder und Sprachanweisungen als Eingabe und Ausgabe von Roboteraktionen nimmt. pi0 (aus der physischen Intelligenz) ist ein Flow-Matching-basiertes VLA, das bei geschickter Manipulation hervorragend ist. OpenVLA ist leichter zu feinen Ton; pi0 erreicht oft höhere Erfolgsraten bei komplexen Aufgaben.

Wie viele Demonstrationen-Episoden brauche ich für VLA-Feinabstimmung?

Für eine einzelne Aufgabe sind 300500 hochwertige Demonstrationen ein guter Ausgangspunkt. Komplexere Aufgaben oder mehrfach-Finionierung benötigen möglicherweise 8001,200+ Episoden. Qualität ist mehr wichtig als Menge 300 saubere Demonstrationen übertreffen 1.000 laute.

Kann ich ein VLA-Modell auf eine GPU des Konsumenten feinen Ton anpassen?

Ja, mit LoRA (Low-Rank Adaptation) können Sie OpenVLA auf einem RTX 4090 (24 GB VRAM) oder sogar einem RTX 3090 feinen Ton machen.

Welche Erfolgsrate kann ich von einem feinem VLA-Modell erwarten?

Bei Aufgaben in der Verteilung (gleiche Objekte, ähnliche Positionen wie Trainingsdaten) erwarten Sie bei Ihrem ersten Feinschaltungslauf eine Erfolgsrate von 6080%.

War dieses Tutorial hilfreich?

👍 Ja Nein

Bleiben Sie bei der Robotik vorne

Erhalten Sie die neuesten Informationen zu Robotern, Datenerhebung und physischer KI in Ihren Posteingang.