ロボット の VLA モデル を 調整 する 方法
遠隔操作データセットのOpenVLAまたはpi0を細かく調整するためのステップバイ・ステップガイド データ準備,トレーニング設定,評価,展開.
操作データセットのOpenVLAまたはpi0を細かく調整するためのステップバイ・ステップガイド データ準備,トレーニング構成,評価,量化,実際のハードウェアに展開する
進歩
1.前提条件 2.インストール 3.データセット 4.設定 5.電車 6.モニター 7.評価 8.定量 9.展開 10.繰り返す
必須条件
- RLDS形式で300以上の高品質エピソードを持つ遠隔操作データセット (データ収集チュートリアル参照)
- NVIDIA GPU 24 GB+ VRAM (LoRA のRTX 4090 ,完全な微調整 の A100/H100)
- Python 3.10+ CUDA 12.1+
- PyTorchとハグ・フェイス・トランスフォーマーの熟知
- ウェイト&バイアス口座 (木材採掘,無料の作業)
- ロボットマシンにROS2がインストールされている (設定ガイドを参照)
建設するものは
ロープアウト実験で評価し,リアルタイム推論のために量化し,ロボットにROS2アクションサーバーとして部署します.最初の実行で配布中の作業で60~80%の成功率を期待し,再帰的なデータ収集で改善します.
VLA 細かな調節管道
RLDS データセット 300話以上
OpenVLA / pi0 訓練前の7B
ファイナ・チューン LORA またはフル
評価する 展開試験
展開 ROS2 + INT4
1 年間
必須条件とGPU設定を確認する
開始前に GPU,CUDAバージョン,および利用可能なVRAMを確認してください. 精細調整には,方法に応じて特定のハードウェアが必要です.
| 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 |
コピー# CUDAとGPU nvidia-smi python3 -c "輸入火花; プリント(f'CUDA: {torch.cuda.is_available() }, デバイス: {torch.cuda.get_device_name(0) },VRAM: {torch.cuda.get_device_properties(0).total_mem / 1e9:.1f}GB') " # CUDAバージョンを確認 (必要 12.1+ nvcc) --バージョン
予算提示: クラウドGPUレンタルのために [Vast.ai] (
2 について
OpenVLA 依存をインストールする
OpenVLAをクローンして必要なパッケージをインストールする
コピー# 仮想環境 python3 -m venv ~/vla_env源 ~/vla_env/bin/activate # クローン OpenVLA git クローン
3 について
資料を準備する
OpenVLA は特定の形式でデータを期待します RLDS データセットや LeRobot データセットを OpenVLA 訓練形式に変換します
コピー# RLDSデータセットを OpenVLA 形式 python3 スクリプト/convert_rlds_to_openvla.py \ --input-dir=/datasets/openarm_pick_place_rlds \ --output-dir=/datasets/openarm_openvla \ --image-key="observation/image" \ --state-key="observation/state" \ --action-key="action" \ --language-key="language\_instruction" \ \ meta\"# 変換されたデータセットを確認する " json, osson = json.open.odes.exp.exp.dimen/dimen/action/arm\open_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data_data
データフォーマットチェック: OpenVLAは画像を224x224 RGB (内部にサイズ変更) として,動作を7D連続ベクター (6 DOF + グリッパー) と,エピソードごとにテキスト言語指示として期待します.訓練前にこれらの次元を確認します 形状の不一致は最も一般的なトレーニング失敗です.
4 について
訓練を構成する
訓練設定 YAMLを作成します.これらの超パラメータは典型的な単作業の微調整実行のために調節されます.
コピー# コンフィギュス/フィネチューン_openarm.yaml猫 > コンフィギュス/フィネチューン_openarm.yaml << 'EOF' # OpenVLA ファイネ・チューニング コンフィギュス
ハイパーパラメータガイド: LoRA の学習速率 2e-5 は安全なデフォルトです.完全な微調整のために, 1e-5 を使用してください. 500 ステップ後,トレーニング損失が減少しない場合は, 5e-5 を試してみてください. 梯度蓄積 4 の バッチサイズ 8 は 32 の有効な バッチサイズを与えます.これは 300 〜 500 回のデータセットでうまく機能します.
5 について
調整 を 開始 する
訓練を実行を開始する.単一のGPUでは
複製#単一のGPU (RTX 4090 / A100) python3 スクリプト/finetune.py \ --config=configs/finetune_openarm.yaml \ --output-dir=runs/openarm-pick-place-v1 \ # 多型GPU (2x A100) トーチランnproc-per-node=2 スクリプト/finetune.py \ config=configs/finetune_openarm.yaml \ --output-dir=runs/openarm-pick-place-v1 \ # 予想輸出: # 10/5000\ \ Loss: 2.34 LR: 2.0e-6 度: 1.2秒/ステップ # 100/5000 \ Loss: 0.87 LR: 1.1e-5 度: ステップ / ステップ # ステップ / ステップ # ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント / ポイント /
訓練時間推定:
| 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 について
訓練を監視する
負の曲線と格radent 標準をチェックする.
- 最初の1,000~2,000歩で損失は安定して減少する
- ** 格radential norma** は 0.1 から 10.0 の間にとどまる
- チェックポイントは500歩ごとに保存されます 訓練が崩れた場合,どんなチェックポイントでも再開できます
ダウンロード# ブラウザで wandb ダッシュボードを開く # または訓練ログを直接チェック 尾 -fラン/openarm-pick-place-v1/training.log # 保存されたチェックポイントのリスト ls -laラン/openarm-pick-place-v1/チェックポイント/
1.0以上の損失平原の場合: データセットには品質の問題がある可能性があります.誤ったエピソード,不一致なアクションスケール,または腐敗した画像をチェックしてください.学習率を5e-5に増加させたり,バッチサイズを4に減らしてみてください.
7 について
チェックポイントを評価する
ローロットの展開評価を ロボット (またはシミュレーション) で実行して 改良されたモデルの成功率を測定します
コピー# 最良のチェックポイント (最低のバール損失) Python3 スクリプト/evaluate.py \ --checkpoint=runs/openarm-pick-place-v1/checkpoint/step-4500 \ --robot-type=openarm \ --robot-port=/dev/ttyUSB0 \ --num-rollouts=20 \ --task="赤ブロックを拾って緑のターゲットゾーンに配置する" # 予想される出力: # Rollout 1/20: SUCCESS (14.2s) # Rollout 2/20: SUCCESS (12.8s) # Rollout 3/20: FAILURE
成功率基準: 60~80%は,最初の微調整実行で強い結果です.50%以下は,データ品質の問題やエピソード数少ないことを示唆します.80%以上は,モデルが繰り返し改善により導入準備ができていることを意味します.
8 について
部署のための量度
リアルタイム制御には遅すぎる 2
コピー# 量子化してINT4 に bitandbytes python3 スクリプト/quantize.py \ --checkpoint=runs/openarm-pick-place-v1/checkpoints/step-4500 \ --quantization=int4 \ --output-dir=runs/openarm-pick-place-v1/quantized \ # 基準推論速度 python3 スクリプト/benchmark_inference.py \ --checkpoint=runs/openarm-pick-place-v1/quantized \ -num-steps=100 \ # 予想される輸出: # モデルサイズ: 4.2 GB (下降 14.8 GB) # 偏差速度: 18.3 Hz (±1.2 Hz) # 遅延: 54.6 ms/ステップ
| 精度(再現性) | 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 について
ROS2 を介してロボットに展開する
量子化されたVLAモデルを実行し,10
複製# VLA推論ノード cd ~/ros2_ws/src ros2 pkg の ROS2 パッケージを作成する - - 構築型修正_python vla_inference \ - 依存性 rclpy センサー_msgs std_msgs # 推論脚本をコピーする (以下簡略版) cat > ~/ros2_ws/srcvla_inference/vla_inference/vla_inference\self_node.py.py.py.py.py 'PYEOF' の輸入 rpy を作成する - - 構築型修正_python vla_inference \ --依存性 rclpy センサー_msgs std_msg 輸入 輸入 文字列の復元 輸入 命令 (以下簡略版) 輸入 輸入 命令 (以下) 輸入 命令 (以下 intl) 命令 (以下 intl) 命令 (以下) 命令 (以下) 命令 (以下) 命令 (以下) 命令 (以下) 命令 (以下) 命令
コピー# 推論ノードを構築し実行する cd ~/ros2_ws コラムビルド --パケット-選択 vla_inference source install/setup.bash # ロボット +カメラ + VLA推論 ros2 推論開機_bringup openarm.launch.py & ros2 推論 vla_inference 推論_node
10
繰り返す: データを集める,再訓練
失敗のモデルには 失敗モードが表示されます 改善の最も効果的な方法は 失敗事例の標的型デモを収集し 再訓練することです
評価展開から故障モードを識別する 標準故障: 端の位置にある物体,異常な方向, 照明の変化, モデルが見ていない物体 失敗事例の50100個の標的型デモを収集する ロボット記録 \ --robot-type=openarm \ --task="pick_red_block_edge_positions" \ --num-episodes=50 \ --output-dir=/datasets/openarm_pick_place_v2 # 3. 元のデータセット python3 スクリプト/merge_datasets.py \ --datasets ~/datasets/openarm_pick_place ~/datasets/openarm_pick_place_v2 \ --output /datasets/openarm_pick_place_merged # 4. 再びフィーネット (前回のベストチェックポイントから) python3 スクリプト/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
繰り返すループ
DAgger (データセット統合) ループは,各サイクルで政策パフォーマンスを改善することが証明されています.展開 →失敗を特定 →ターゲットデモを収集 →再訓練 →評価.ほとんどのチームは,回復ごとに5
トラブルシューティング
訓練中に CUDA Out of Memory (OOM) を使用する
訓練の損失は NaN
学習率を1e-5に減らして,データセットの NaN値を
モデルで恒定/同一の動作が生成されます
モデルが平均行動を予測するのに崩れ落ちた可能性があります.あなたの行動空間が正常化されていることを確認してください (ゼロ平均,単位変数).タスク説明がデータ収集中に使用されたものと一致していることを確認してください.トレーニングステップまたは学習速度を増加してみてください.
線路はリアルタイム制御には遅すぎる
INT4 量化 (ステップ8) を適用します. 20
量子モデルでは成功率ははるかに低い
品質の低下が予想される (1
関連 チュートリアル
[ 固定リンク ]
ロボット訓練データ収集
必須の教程
レロボット クイックスタート
VLAモデルに取り組む前に,よりシンプルな政策 (ACT,拡散政策) を訓練する.
ROS2 設定ガイド
ロボット部署と推理ノード開発のために ROS2 を設定する.
よく 聞かれる 質問
VLAモデルを調整するのに費用はどれくらいかかりますか?
標準的な微調整実行は,Lambda LabsやVast.aiなどのクラウドプロバイダーでGPU計算で150
OpenVLA と pi0 の違いは何ですか?
OpenVLAはスタンフォード大学で開源で開発された7Bパラメータビジョン言語行動モデルで,カメラ画像と言語指示を入力とロボットアクションとして出力する. pi0 (物理知能から) は流量マッチングベースの VLAで,巧妙な操作で優れている. OpenVLAは細かく調節しやすく. pi0は複雑な作業でしばしばより高い成功率を達成する.
VLAの調整には 何回のデモエピソードが必要ですか?
単一の作業では300500の高品質のデモが良い出発点である.より複雑な作業や多作業の微調整には8001,200以上のエピソードが必要になる. 品質は量よりも重要だ. 300の清潔なデモは1000の騒音な演示よりも優れている.
消費者のGPUに VLAモデルを調整できますか?
ローラ (ローランク・アダプテーション) を使用すると,RTX 4090 (24 GB VRAM) またはRTX 3090 で OpenVLA を細かく調節できます.完全な細かな調節には 40
精巧なVLAモデルから どんな成功率を期待すべきか?
配分中の作業 (同じオブジェクト,トレーニングデータと同じ位置) では,最初の微調整実行で6080%の成功率を期待してください. 繰り返すデータ収集と再訓練 (DAgger式) で,これを8595%に押し上げることができます. 配分外の一般化は大きく異なります.
このチュートリアルが役に立ったのか?
👍 はい
ロボット に 進歩 し て ください
ロボット部署,データ収集,物理的なAIに関する最新情報を メールボックスに届けます







