Learnに戻る

ロボット の VLA モデル を 調整 する 方法

遠隔操作データセットのOpenVLAまたはpi0を細かく調整するためのステップバイ・ステップガイド データ準備,トレーニング設定,評価,展開.

操作データセットのOpenVLAまたはpi0を細かく調整するためのステップバイ・ステップガイド データ準備,トレーニング構成,評価,量化,実際のハードウェアに展開する

進歩 12日 更新された2026年4月

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] (T12) または [Lambda Labs] (T13) を使用する.A100 80GB は1.502.50$/h.典型的なLoRAのフィーナチューニング実行は612時間かかります.

2 について

OpenVLA 依存をインストールする

OpenVLAをクローンして必要なパッケージをインストールする

コピー# 仮想環境 python3 -m venv ~/vla_env源 ~/vla_env/bin/activate # クローン OpenVLA git クローン T17 cd openvla # 依存関係性インストール pip インストール -e ".[all]" # 追加訓練依存関係性インストール pip インストール wandb 加速 peft bitsandbytes pip インストール flash-attn --no-build-isolation # 実験追跡 wandb ログイン # ダウンロード先訓練の OpenVLA チェックポイントダウンロード python3 -c "抱擁_輸入スナップショット_ダウンロード; 瞬間に_('openvla/openvla-7b',_dir='checkpoints /open-7b') "

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 ファイネ・チューニング コンフィギュス OpenArm Pick & Place モデル: 訓練前の_チェックポイント: チェックポイント/openvla-7b 使用_lora: true # セットの偽の完全なフィネ・チューン・lora_rank: 32 lora_alpha: 64 lora_dropout: 0.05 データセット_path: ~/datasets/open_arm 任務_description: "赤いブロックを拾って緑のターゲットゾーンに配置する" イメージ_サイズの: 224_dim: 7 # 6 標準の場所 + 1GBのグリッパー_split: 0.9 シュフ_ワーク: true_work: 4 シュフ・ララップ: 4 ステップ: ランニング: ランニング: ランキング: ランキング: ランキング: ランキング: ランキング:

ハイパーパラメータガイド: LoRA の学習速率 2e-5 は安全なデフォルトです.完全な微調整のために, 1e-5 を使用してください. 500 ステップ後,トレーニング損失が減少しない場合は, 5e-5 を試してみてください. 梯度蓄積 4 の バッチサイズ 8 は 32 の有効な バッチサイズを与えます.これは 300 〜 500 回のデータセットでうまく機能します.

5 について

調整 を 開始 する

訓練を実行を開始する.単一のGPUではT0を使用する.

複製#単一の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 ステップ45で落としたオブジェクト # # # 成功率: 14/20 (70.0%) # Avg完成時間: 13.5s

成功率基準: 60~80%は,最初の微調整実行で強い結果です.50%以下は,データ品質の問題やエピソード数少ないことを示唆します.80%以上は,モデルが繰り返し改善により導入準備ができていることを意味します.

8 について

部署のための量度

リアルタイム制御には遅すぎる 25Hzで動作するフル精度VLAモデルは,INT4の量化により1025Hzまで行われます.

コピー# 量子化して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モデルを実行し,1020Hzでロボットにコマンドを送信する ROS2アクションサーバーを作成します.

複製# 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 (データセット統合) ループは,各サイクルで政策パフォーマンスを改善することが証明されています.展開 →失敗を特定 →ターゲットデモを収集 →再訓練 →評価.ほとんどのチームは,回復ごとに515%の成功率改善をみ出し,34サイクルで8595%に達します.

トラブルシューティング

訓練中に CUDA Out of Memory (OOM) を使用する

T2を4または2に減らします.設定にT3を追加することで梯度チェックポイントを有効にします.LoRAでは,T4を32から16に減らしてください.最後の手段として,DeepSpeed ZeRO-3でCPUのオフロードを使用します.

訓練の損失は NaN

学習率を1e-5に減らして,データセットの NaN値をT5でチェックします. 数値問題をデバッグするにはT7ではなくT6を有効にします.

モデルで恒定/同一の動作が生成されます

モデルが平均行動を予測するのに崩れ落ちた可能性があります.あなたの行動空間が正常化されていることを確認してください (ゼロ平均,単位変数).タスク説明がデータ収集中に使用されたものと一致していることを確認してください.トレーニングステップまたは学習速度を増加してみてください.

線路はリアルタイム制御には遅すぎる

INT4 量化 (ステップ8) を適用します. 2030% のスピードアップのために T8 を使用します. 別々のマシンで推論を実行し,ネットワーク上でストリーミングアクションを実行することを検討してください.腕操作の最小目標は10 Hz です.

量子モデルでは成功率ははるかに低い

品質の低下が予想される (15%減少). 10%以上減少した場合,INT4ではなくINT8を試してみてください. 定量化中に校正データを使用します:T9. AWQ定量化では,VLAモデルではGPTQよりも多くの品質を維持します.

関連 チュートリアル

[ 固定リンク ]

ロボット訓練データ収集

必須の教程 遠隔操作を設定し,質の高いデータセットを構築する.

T14) [

レロボット クイックスタート

VLAモデルに取り組む前に,よりシンプルな政策 (ACT,拡散政策) を訓練する.

T15) [

ROS2 設定ガイド

ロボット部署と推理ノード開発のために ROS2 を設定する.

T16)

よく 聞かれる 質問

VLAモデルを調整するのに費用はどれくらいかかりますか?

標準的な微調整実行は,Lambda LabsやVast.aiなどのクラウドプロバイダーでGPU計算で150400ドルかかります.これは1248時間12A100GPUを想定します.LoRAを使用することで,メモリとトレーニングステップが少ないことで,これを50150ドルに削減します.

OpenVLA と pi0 の違いは何ですか?

OpenVLAはスタンフォード大学で開源で開発された7Bパラメータビジョン言語行動モデルで,カメラ画像と言語指示を入力とロボットアクションとして出力する. pi0 (物理知能から) は流量マッチングベースの VLAで,巧妙な操作で優れている. OpenVLAは細かく調節しやすく. pi0は複雑な作業でしばしばより高い成功率を達成する.

VLAの調整には 何回のデモエピソードが必要ですか?

単一の作業では300500の高品質のデモが良い出発点である.より複雑な作業や多作業の微調整には8001,200以上のエピソードが必要になる. 品質は量よりも重要だ. 300の清潔なデモは1000の騒音な演示よりも優れている.

消費者のGPUに VLAモデルを調整できますか?

ローラ (ローランク・アダプテーション) を使用すると,RTX 4090 (24 GB VRAM) またはRTX 3090 で OpenVLA を細かく調節できます.完全な細かな調節には 4080 GB VRAM (A100または多GPU 設定) が必要です.LoRA は通常,完全な細かな調節性能の8595%を達成します.

精巧なVLAモデルから どんな成功率を期待すべきか?

配分中の作業 (同じオブジェクト,トレーニングデータと同じ位置) では,最初の微調整実行で6080%の成功率を期待してください. 繰り返すデータ収集と再訓練 (DAgger式) で,これを8595%に押し上げることができます. 配分外の一般化は大きく異なります.

このチュートリアルが役に立ったのか?

👍 はい いや

ロボット に 進歩 し て ください

ロボット部署,データ収集,物理的なAIに関する最新情報を メールボックスに届けます