Learnに戻る

自動機器のデータセットでOpenVLAをフィニチューニングする方法

ローラでOpenVLA-7Bを自分のRLDSロボットデータセットに調整します GPUサイズ,PEFT設定,データロード,トレーニングループ,評価は3時間未満です

OpenVLA-7Bは最も人気のあるオープンビジョン言語アクションモデルです.このチュートリアルでは,ローラベースのRLDSデータセットの微調整を介して行きます.ハードウェアサイズ,PEFT設定,データローダー設定,トレーニング,および実行されたエピソードまたは実際のロボットでの評価.

VLA / 調整 総時間:約3時間 (訓練時間加) 困難:高度 更新:2026年4月

達成する事

このチュートリアルが終わると ロラで調整された OpenVLA-7B チェックポイントが 特別にあなたの任務とあなたの実施形態に 合わせられます LoRA (ローランク・アダプテーション) はほとんどのチームにとって正しい選択です. 完全な微調整のために VRAM の要求を~100 GB から約24 GB に減らし,適量なデータセット (数百話) に迅速に収束し,分散が容易な小さなアダプターを生産します.

OpenVLAはスタンフォードのIRISラボと共同研究者が維持している.ベース7Bモデルは22種実施形態のほぼ100万の軌跡を集めたOpen X-Embodimentで訓練された.精細調整は,その以前の知識を特定のロボット,オブジェクト,指示に集中させる.

必須条件

  • **A100 40/80 GB,H100,RTX 4090またはL40Sはすべて動作します.RTX 3090は24 GBで動作しますが,緊密です.
  • 画像観測,プロピオセプション,自然言語のタスク指示を含む少なくとも50話 (200+推奨) のRLDSデータセット.
  • PyTorch,HuggingFaceトランスフォーマー,そして模倣学習の基礎知識を熟知する.
  • Ubuntu 22.04 または 20.04 CUDA 12.1+ ドライバで.
  • モデル重量,チェックポイント,データセットの 200GBの無料ディスク

データのセットがまだない場合は,まず1つ集めてください. [LeRobot録音教程] (T18) を参照してください.またはRCSVデータセットハブで [オープンデータセット] (T19) を閲覧してください.また,公開データセットを自分のエピソードの小集と混合して,モデルにターゲット設定をすることができます.

ステップ

  1. ハードウェアと環境をチェック

GPUと CUDAを確認する

```
nvidia-smi
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0), torch.version.cuda)"
```

T8,GPU名,そしてPyTorchビルドに匹敵する CUDAバージョンが欲しい.

```
conda create -n openvla python=3.10 -y
conda activate openvla
```
  1. OpenVLAと依存をインストールする

OpenVLAコードベースとPEFTスタックをインストールする.最も最新のインストール目標の場合は [github.com/openvla/openvla] (T20) の上流レポを参照してください. 一般的なパターンは:

```
git clone https://github.com/openvla/openvla.git
cd openvla
pip install -e .
pip install peft bitsandbytes accelerate wandb
```

PEFTは LoRA実装を提供します. bitsandbytesはベースモデルに8ビット量子化を提供しますので 24 GBに収まる.

  1. RLDS 形式でデータセットを準備する

OpenVLA は,Google Research のTFDS サポートされた形式の RLDS (Reinforcement Learning Datasets) を使用する.各エピソードにはステップの配列が含まれ,各ステップには T9 (画像,状態), T10, T11,および T12があります.

オープンソースX-Embodiment リポジトリには,リファレンスのコンバータが含まれています.最小RLDSビルダーは,以下のように見える:

```
import tensorflow_datasets as tfds

class MyRobotDataset(tfds.core.GeneratorBasedBuilder):
    VERSION = tfds.core.Version('1.0.0')

    def _info(self):
        return tfds.core.DatasetInfo(
            builder=self,
            features=tfds.features.FeaturesDict({
                'steps': tfds.features.Dataset({
                    'observation': tfds.features.FeaturesDict({
                        'image': tfds.features.Image(shape=(224, 224, 3)),
                        'state': tfds.features.Tensor(shape=(7,), dtype=tf.float32),
                    }),
                    'action': tfds.features.Tensor(shape=(7,), dtype=tf.float32),
                    'language_instruction': tfds.features.Text(),
                    'is_terminal': tfds.features.Scalar(dtype=tf.bool),
                }),
            })
        )
```

このビルダーをエピソードファイルに指し,OpenVLAデータセット設定にデータセット名を登録します.アクション正常化統計 (次元ごとに平均/std) を計算して保存する必要があります.

  1. ダウンロード OpenVLA-7B ベース重量

HuggingFace Hubからベースモデルを引っ張る

```
huggingface-cli download openvla/openvla-7b --local-dir ./openvla-7b
```

プロジェクトで再利用するために T13 の下にキャッシュしてください.

  1. ロラを設定する

標準的な開設点は,PEFTでは,注意モジュールを対象としたLoRAランク32です.

```
from peft import LoraConfig, get_peft_model

lora_config = LoraConfig(
    r=32,
    lora_alpha=16,
    target_modules="all-linear",
    lora_dropout=0.0,
    bias="none",
    task_type="CAUSAL_LM",
)
```

ランク32は50〜500話のデフォルトで合理的です.VRAMが狭ければ16に下がり,より大きなデータセットでは64に上がります. T14をターゲットにすることはOpenVLA参照レシピに一致します.メモリが制限の場合,注意のみのプロジェクションに制限することができます.

  1. 微調整を開始する

OpenVLA レポから参照のフィニチューンスクリプトを使用します.正確なエントリーポイントはリリース間で移動します. レポの README をチェックします.

```
torchrun --standalone --nnodes 1 --nproc-per-node 1 \
  vla-scripts/finetune.py \
  --vla_path ./openvla-7b \
  --data_root_dir /path/to/rlds \
  --dataset_name my_robot_dataset \
  --run_root_dir ./runs \
  --adapter_tmp_dir ./adapter-tmp \
  --lora_rank 32 \
  --batch_size 16 \
  --grad_accumulation_steps 1 \
  --learning_rate 5e-4 \
  --image_aug True \
  --wandb_project openvla-finetune
```

A100 80 GB の単一のデータセットでは,1k ステップに約1時間を期待します 通常200エピソードのデータセットは 20〜40k ステップで収束します

ランダムな作物と色が50エピソードデータセットで大きな違いを生む.

  1. ###訓練を監視する

WandBまたはテンソボードの3つの信号を注意してください. アクション MSE (あなたの初頭損失), グラディエンタル・norm (安定でピークしない) と 次元へのアクション精度 (トークン化されたアクションヘッドのトークン精度). 5kステップ後に 0.1以上のアクション MSE平原であれば,データセットは小さすぎます.またはあなたの言語指示はポリシーヘッドのトレーニング配分と一致しません.

  1. ローラを統合して評価する

訓練終了後,LoRAアダプターをベースモデルに統合して,より迅速な推論を行う.

```
from peft import PeftModel
from transformers import AutoModelForVision2Seq

base = AutoModelForVision2Seq.from_pretrained('./openvla-7b', torch_dtype=torch.bfloat16)
model = PeftModel.from_pretrained(base, './runs/my_robot_dataset/adapter')
merged = model.merge_and_unload()
merged.save_pretrained('./openvla-7b-my-robot')
```

評価: 既定のエピソードで合併モデルを実行して予測されたアクションを真相に比較するか,実際のロボットに展開して,実際のロボットでの成功率を20回の試験で測定します.

次にどうする?

LoRA アダプターが動作すると,自然に3つのフォローアップが行われます. (1) データを増やし, [Open X-Embodiment] (T21) または他の公開データセットからエピソードを追加して,モデルにより広い先駆けを与え, (2) 80 GB GPUで完全なフィーナティューニングを試みる場合,通常,タスクの成功率の2~5パーセントポイントを追加し, (3) 他の [VLAモデル] (T22) Pi-Zero,Octo,RT-2変数はそれぞれ異なる強さを持っています.

撮影側をカバーする [LeRobot録音教程]T23) のデータセットがLeRobotで収集された場合.双手作業については, [ALOHA電波装置教程]T24を参照してください.

常識の故障モード

OOM 起動時に: T16またはパッチサイズを落とす8ビット量子化を有効にします.

アクションMSEは減少しない: 動作正常化統計が正しいか確認します. 頻繁に発生するバグは,間違った分割の計算統計です.

ポリシーはロボットを共同の限界に駆動します: データセットにおける言語指導分布は狭すぎます.学習する代わりに記憶されたモデルです. より多様なタスクに混ぜてください.

** 推移は遅い:** ローラを合併した後,常に T17と bfloat16 を実行します.

深い潜水: LoRA vs 完全精調 vs ゼロから

スペクトラムには3つのオプションがあります. Full fine-tuneは7Bモデルのすべてのパラメータを更新します.通常,十分なデータ (500+エピソード) と80GBのGPUがあるときに最高のタスク成功率を生成します.モデルがすべての表示をあなたの実施形態に適応することができます. LoRAは層次に低級アダプターを追加し,ベースを凍結し,より小さなデータセットに迅速に収束します. 計算の4分の1で, LoRAは中規模な操作データセットの実験で,完全な細かな調子の性能の90%から95%に達します. ゼロから VLAスケールモデルではほとんど意味がない.

第4回,引力を増している経路は DoRA (重量分解低級調整) です.この経路は重量と方向の構成要素に分割します.DoRAはLoRAに小さなパラメータを追加し,しばしば完全な細かな調節までギャップを閉じます.PEFTはDoRAを箱からサポートします.

深い潜水:データセットの品質はデータセットのサイズよりも

チームではエピソード数量に過剰投資し,エピソード多様性に低投資しています. 20つの照明とオブジェクトポーズ変異で200エピソードが同じシーンの1000エピソードに勝っています. 理由はモデル理論である.VLAの微調整は主に何をすべきか学ぶことではなく, 基礎モデルは既に粗略な操作先例を知っている. 政策をカメラ内在, 作業空間, 言語指示に基に構築することを学んでいる. これらの変数における多様性は,政策に実施形態を任務から分離する自由の度を増やします.

動作する具体的なレシピ: 200 回の内,20cm x 20cm のグリッド (最低 10 箇所) で最初のオブジェクトの位置を変化させ, 3 つの照明条件下で記録し,同じ指示の 5 つの自然言語のフレーズを回します.これは収集中に約 50% の作業を増やしますが,細かな調節を劇的に改善します.

深い潜水: 評価はチームが間違える場所です

記録のセッションの 長い時間しか 評価できない 最も一般的な誤りは 収録のセッションの 長い時間しか 評価できないことです リアル評価には3つのレベルがあります: (1) 同じセッションから締め切った** 能力の低い境界線, (2) 異なる日/照明から締め切った** リアル世界の強度チェック,および (3) 新たに作られるタスクのフレーズや少し新しいオブジェクトのゼロショット** により,使用可能なVLAがデモのみの間で分離されます.適切な評価のために候補者チェックポイントごとに少なくとも30分のリアルロボット時間を予算します.

よく聞かれる質問

何回か必要ですか 50は軽い結果のための最小値です. 200は良い目標です. 500+はほとんどの単一の作業のための LoRA能力を飽和します.

複数のタスクデータに微調整できるか?

**Pi-ZeroやOctoについてはどうですか?**Pi-Zeroは,Fisical Intelligenceのフローマッチング VLA の異なるトレーニングレシピです.通常,エピソードごとに成功率が高いが,独自の重量が必要です.Octoは研究に役立つ小さなオープンモデルです. [VLAモデル比較](T25を参照してください.

** 推移遅延は私のアプリケーションにとって重要です.** OpenVLA-7B推移は,単一のA100で約200msです.それが遅すぎると,より小さなVLA,量化,またはアクション・チャッキング戦略を見てください.

関連チュートリアルとリソース