LeRobot documentation
FineART-VLA
FineART-VLA
FineART-VLAは、Physical Intelligenceのπ0.5とそのopenpi実装を基盤としており、LeRobotのPi05ポリシーを通じて構築されています。この基盤を拡張し、学習可能なPaliGemma言語ヘッドと、言語生成とアクション生成を交互に実行するランタイムを追加しています。単一のチェックポイントで、低レベルのサブタスクを予測し、必要に応じてメモリを更新したり視覚的な質問に答えたり、またそのテキストを条件としてフローマッチングアクションエキスパートを制御できます。
タスク条件付きアクションのみが必要な場合は Pi05 を使用してください。ロールアウト中にポリシーが中間言語を生成または消費する必要がある場合は FineART-VLA を使用してください。
FineART-VLAとPi05の違い
| 機能 | Pi05 | FineART-VLA |
|---|---|---|
| アクションモデル | PaliGemmaのビジョン言語プレフィックス + Gemmaのアクションエキスパート | 同じベースアーキテクチャ |
| 言語ヘッド | ランタイム生成用にトレーニングされていません | テキストのクロスエントロピーで再有効化して学習 |
| アクション条件付け | エピソードタスク | アクティブな低レベルサブタスクと正規化されたロボット状態 |
| 学習ターゲット | Flow-matchingアクション | Flowアクション、レシピで選択されたテキスト、およびオプションのFASTアクショントークン |
| データセットの要件 | 標準的な画像、状態、アクション、タスク | トレーニングするすべての言語機能に対する言語アノテーションを含む、同じフィールド |
| ロールアウト | タスクからアクションへの直接ポリシー | 階層的なタスク → サブタスク → アクションのループ、オプションのメモリとVQA |
FineART-VLAはPi05のチェックポイントから初期化できます。ポリシーのアーキテクチャは互換性を保ったまま、FineART-VLAは独自のプロセッサを構築するため、レシピラベルやFASTラベルがPi05のプロセッサスタックによって黙って置き換えられることはありません。
インストール
FineART-VLAの依存関係を含むLeRobotをインストールします:
git clone https://github.com/huggingface/lerobot.git
cd lerobot
python -m venv .venv
source .venv/bin/activate
pip install -e ".[fineart_vla]"fineart_vla 追加パッケージには、PaliGemma/FAST の依存関係が含まれています。Linux 環境で CUDA GPU を使用する場合の任意の融合学習カーネルについては、代わりに ".[fineart_vla_kernels]" をインストールしてください。これにより、liger-kernel と、FlashRT バックエンドで使用される Hugging Face の kernels パッケージが追加されます。FlashRT カーネルは一部の PyTorch バージョンのみで公開されているため、対応するビルドがない場合、FlashRT バックエンドは警告をログに記録し、PyTorch にフォールバックします。Liger は --policy.use_liger_kernels=true でオプトインできます。これにより、プロセス全体で transformers の PaliGemma RoPE/GeGLU がパッチされるため、同じプロセス内で読み込まれた他の PaliGemma ベースのポリシーも融合カーネルで実行されます。
言語アノテーション付きデータの準備
FineART-VLAは、通常のLeRobotデータセットから教師ありサブタスクを推論してトレーニングを行うわけではありません。データセットには、選択したレシピで使用される言語ターゲットを、任意のlanguage_persistentおよびlanguage_eventsカラムに含める必要があります。
少なくとも、連続的なsubtaskタイムラインをアノテーションし、各トレーニングフレームにアクティブな低レベルの指示があるようにしてください。memory、VQA、間投詞、発話のアノテーションは、レシピがそれらの能力をトレーニングする場合にのみ追加してください。
FineART-VLAは、EO-1と同様に、デフォルトのレシピをFineARTVLAConfigに埋め込んでいます。高レベルのタスク→サブタスク予測を30%、低レベルのサブタスク条件付きアクション学習を70%サンプリングします。各設定は自身のレシピ辞書を保持し、保存されたチェックポイントは推論時にその辞書を保持します。
--policy.recipe_path=/path/to/custom.yaml を使用してデフォルトを上書きできます。
src/lerobot/configs/recipes/ にある共有レシピは main のセマンティクスを維持しており、FineART-VLA によって置き換えられることはありません。ゴールのみの学習には、${task} を含む 1 つの低レベルユーザーメッセージを含むインラインレシピを使用するか、recipe=None を設定してテキスト/FAST の損失を無効にし、プレーンな PI05 パイプラインを使用してください。
デフォルトでは、推論を π(a|o, subtask)・π(subtask|o, task) に因数分解します。 カスタムのジョイントシーケンスレシピには、タスクと生成されたアシスタントの区間を、トレーニングと同じ因果マークでレンダリングする、対応するランタイムプロセッサが必要です。 従来のポリシー側のジョイントプロンプトビルダーは、ロールアウトではもはや使用されていません。
Rollout は計画の頻度(--autosteer_interval_s=3)、対話コマンド、および同期/RTC スケジューリングを管理します。FineART-VLA はクエリされた場合のみテキストを生成し、通常のアクション呼び出しではランタイムの背後で別のサブタスクを生成することはありません。
統合メモリ/サブタスクスクラッチパッドはデフォルトでは有効になっておらず、カスタムレシピとメモリ対応のランタイムコントローラーが必要です。通常のサブタスク生成ではmemory_scratchpad=falseを維持してください。古いスクラッチパッドチェックポイントは、統合レスポンスをアクション制御に直接渡すことに対する明示的なガードを保持しています。
lerobot-annotate を使用してこれらの列を生成します。リポジトリには、ソースデータセットと宛先データセットに合わせて編集できる Hugging Face Jobs ランチャーが含まれています。ローカルでのアノテーション実行を行う場合は、まず pip install -e ".[annotations]" をインストールしてください。
HF_TOKEN=hf_... uv run python examples/annotations/run_hf_job.py
長時間のトレーニング実行の前に、複数のエピソードを検査し、サブタスクが時間的に正しく、デモ全体をカバーしていることを確認してください。生成と検証についてはアノテーションパイプラインを、スキーマとレシピリゾルバーについては言語カラムとレシピを参照してください。
If a dataset has no language columns, recipe rendering becomes a no-op and FineART-VLA falls back to the plain Pi05 prompt path. This is useful for compatibility but does not train the language planner.
FineART-VLAの学習
この例では、lerobot/fineart_vla_base から FineART-VLA を初期化します。このチェックポイントは、FineART 上で中間学習され、自身の次のサブタスクを予測するように訓練されたものです。また、埋め込まれた 70/30 サブタスクレシピを訓練します。--policy.path はベースチェックポイント自身の設定を読み込むため、ファインチューニングでは FAST トークンレイアウト(fast_skip_tokens)と、ベースが訓練されたレシピが保持されます。その他の --policy.* フラグはこれを上書きします。
lerobot-train \
--dataset.repo_id=${HF_USER}/my_language_annotated_dataset \
--policy.path=lerobot/fineart_vla_base \
--policy.tokenizer_max_length=256 \
--policy.dtype=bfloat16 \
--policy.device=cuda \
--policy.freeze_vision_encoder=false \
--policy.gradient_checkpointing=true \
--batch_size=8 \
--steps=30000 \
--output_dir=outputs/fineart_vla \
--job_name=fineart_vla \
--trackio.enable=true小さな実行から始め、スケールアップする前に、Trackio ダッシュボードで損失が期待通りに振る舞っていることを確認してください。
プレーンなPI0.5チェックポイントから開始するには、FineART-VLAのデフォルト設定を維持したまま、--policy.pretrained_pathをそれに設定します: --policy.type=fineart_vla --policy.pretrained_path=lerobot/pi05_base。OpenPI形式の重みは読み込み時に変換され、テキスト損失とFAST損失はFineARTのミッドトレーニングではなく、PaliGemmaの言語ヘッドから開始されます。
メインの学習コントロール
| オプション | デフォルト | 目的 |
|---|---|---|
policy.recipe_path | None | 組み込みの70/30サブタスクレシピの任意の上書き |
policy.text_loss_weight | 1.0 | 言語ヘッドのクロスエントロピー重み。0に設定するとテキストの学習が無効になります |
policy.flow_loss_weight | 10.0 | 連続アクションフロー損失重み |
policy.enable_fast_action_loss | true | 離散的なFASTアクショントークンの教師信号を追加します |
policy.fast_action_loss_weight | 1.0 | FASTクロスエントロピー重み |
policy.knowledge_insulation | true | VLMのK/Vパスを介して、アクション損失の勾配をブロックします |
policy.flow_num_repeats | 5 | 独立したノイズ除去ターゲットに対して、1つのVLMプレフィックスを再利用します |
policy.lm_head_lr_scale | 1.0 | 言語ヘッドの学習率をスケーリングします。1.0の場合、ベースレートを使用します |
policy.fast_skip_tokens | 1152 | FAST id オフセット;<seg>+<loc> をスキップするため、VQA と FAST が衝突しません |
fast_skip_tokens=1152 は、FAST コードを PaliGemma の <loc> 範囲の下に配置します。
openpi の pi0-FAST の慣例は 128 です(FAST が <loc> の id を占有します)。この値は、そのように学習されたチェックポイントとの重みの互換性を保つためにのみ使用し、<loc> のターゲットが FAST コードと埋め込み行列を共有してしまう VQA レシピとの組み合わせは避けてください。
損失の重みは出発点であり、データセットに依存しない定数ではありません。フロー損失とテキスト/FAST損失を個別に追跡し、生成されたサブタスクを検証してください。総損失のみを根拠にチェックポイントを選択しないでください。
データセット固有のFASTトークナイザ
デフォルトでは(--policy.auto_fit_fast_tokenizer=true)、学習時にトレーニングデータセットに対して FAST トークナイザーをフィットさせます。この処理は --policy.action_tokenizer_name を起点として行われ、結果は --policy.fast_tokenizer_cache_dir にキャッシュされます。lerobot/fineart_vla_base のようなチェックポイントからのファインチューニングの場合も同様であり、これにより FAST のターゲットが新しいロボットのアクション分布に一致します。フィットされたトークナイザーはチェックポイントのプロセッサ成果物内に保存されるため、推論時には再利用されます。action_tokenizer_name を変更せずに使用するには、--policy.auto_fit_fast_tokenizer=false を設定してください。
トレーニングのパフォーマンス
FineART-VLA はデフォルトで最適化された学習パスを使用します:
- Pythonで小さな操作を再生する代わりに、バッチでフローターゲットとサフィックスの射影を繰り返します。
- caches定数のアクションマスクをキャッシュし、1回のforwardごとにRoPEの位置を1回だけ計算します。
- ターゲットの形状とスパース性から、テキスト/FASTクロスエントロピーの実装を選択します。
- 知識隔離されたフロー専用のバッチにおいて、数学的に不要なVLM/ビジョンのバックプロパゲーションをスキップします。
- グラデーション チェックポイントリングが有効な場合、ネイティブな非再帰型SigLIPレイヤーチェックポイントリングを使用します。また、
- LigerのRoPE/GeGLUカーネルを維持しつつ、SigLIPの形状におけるより低速なLayerNormパッチを回避します。
オプションのトレーニングバックエンドは、デフォルトで無効になっています:
| オプション | 試すタイミング |
|---|---|
policy.use_flashrt_adarms=true | 対応する CUDA GPU 上で、融合された適応型 RMSNorm とゲーティング付き残差 |
policy.use_compiled_text_ce=true | コンパイル済みマテリアライズド・ロジットCEバケット |
policy.use_compiled_vision=true | ビジョンパスに勾配がない場合のみ、ビジョンをコンパイル |
policy.use_flex_attention=true | 知識の分離とflow_num_repeats > 1を備えたプロファイル済み CUDA セットアップ; それ以外の場合は SDPA が使用されます |
policy.use_manual_attention=true | マテリアライズされたアテンションが高速になることが明示的にプロファイルされた形状 |
policy.manual_attention_scope=action | 手動アテンションをアクションクエリに制限します |
すべてのバックエンドを盲目的に有効にしないでください。Flexと手動attentionは互いに排他であり、attention/AdaRMSの代替実装には知識の分離が必要です。ベンチマークで最良の結果を出した設定では、コンパイル済みテキストCEとFlashRT AdaRMSを使用し、Flex/手動attentionとコンパイル済みビジョンは無効化されていました。
推論パフォーマンス
FineART-VLAには2つの推論ループがあり、どちらも高コストなマルチモーダルプレフィックスを繰り返しエンコードすることを回避します。
- Action denoisingは、画像/言語プレフィックスを一度だけエンコードし、フローステップ間でそのKVキャッシュを再利用し、デバイス上でアクションサフィックスのマスクを構築し、プレフィックスキャッシュのクローン作成の代わりに、一時的なサフィックスK/Vをクロップします。この実装は、チャンクごとに一度だけデバイス上でタイムステップスケジュールを作成し、従来のタイムステップ演算を維持します。この実装の詳細は、ベンチマークなしではエンドツーエンドの高速化を保証するものではありません。
- Language decoding は自己回帰型 KV キャッシングを使用するため、各新しいトークンは、完全なプレフィックスを再実行するのではなく、サンプリングされたトークンをキャッシュされた画像/言語キーに対してのみ処理します。
共有ランタイムは、言語とアクションを異なるレートで実行します。サブタスクがより長く有効なままである場合は--autosteer_interval_sを大きくし、言語生成なしで直接指示を渡すには/subtaskを使用します。間隔を長くすると生成コストは削減されますが、再計画も遅くなります。
チェックポイントを実行する
チェックポイントに一致するロボット/カメラ構成でlerobot-rolloutを使用し、--interactive=trueと--autosteer_interval_s=3を指定します。--inference.type=syncまたは--inference.type=rtcを選択します。インタラクティブなターミナルでは、/autosteer <goal>で生成されたサブタスクを有効にし、/subtask <instruction>で1つを手動で指定し、/startでロボットの制御を開始します。完全なハードウェアセットアップ、安全動作、および録画制御については、インタラクティブな言語制御を参照してください。従来の--sim、--mode、および--high_level_hzアダプターCLIオプションは、このインターフェースの一部ではありません。
トラブルシューティング
- 大きな flow-loss 勾配: FineART-VLA は、PyTorch SDPA の math バックエンド上で FP32 による attention 演算を実行し、その出力をモデルの dtype にキャストして、KI-off による joint prefix/action attention を実行します(標準の PI0.5 は eager attention を維持しています)。これにより、大きな query/key アクティベーションを持つ低 flow timestep で勾配を不安定にさせる可能性のある低精度の attention を回避できます。既存のチェックポイントと正規化層は変更されず、KI-off は引き続き VLM の keys と values を通じて学習します。有限な総損失だけに頼るのではなく、
flow_loss、text_loss、およびクリッピング前の勾配ノルムを個別に監視してください。 - テキストの損失や生成されたサブタスクがない場合:選択したレシピがサンプリングされたフレームのアノテーションをバインドできることを確認し、
policy.text_loss_weight > 0になっていることを確認してください。 - サブタスクは妥当に見えますが、アクションが失敗します: サブタスクの境界、正規化された状態/アクションの統計量、およびローレベルのレシピサンプルが存在することを確認してください。
- テキストが繰り返しトークンや位置トークンに崩壊する: text-targetのカバレッジ、language-headの学習率、およびflow、FAST、textの損失間のバランスを確認してください。
- メモリ不足: まずバッチサイズを減らし、次に勾配チェックポイントを有効にしてください。カメラ数でのメモリ使用量をプロファイリングせずに、コンパイル済みまたは代替の注意機構バックエンドを有効にしないでください。
- ロールアウトが遅い: アクションのレイテンシと言語のレイテンシを分離し、
--autosteer_interval_s(新しいサブタスクが生成される頻度)と--policy.num_inference_steps(フローのデノイジングステップ数)を調整します。
引用
FineART-VLAまたはFineARTデータセットを使用する場合は、以下の引用を記載してください。
@misc{choghari2026fineart,
title = {FineART: Fine-Grained Annotated Robotic Trajectory Dataset and Vision-Language-Action Model for Bimanual Manipulation},
author = {Choghari, Jade and Kooijmans, Pepijn and Agarwal, Mansi and Ciftci, Yusuf Umut and Doriwala, Aseem and Weaver, Catherine and Sivapurapu, Mouli and Yang, Kai and Lee, Jackson and Wolf, Thomas and Mannam, Pragna},
year = {2026},
}FineART-VLAは、Physical Intelligenceのπ₀.₅とknowledge insulationを基盤としています。
ライセンス
このモデルは、PI0.5バックボーンがベースにしている元のOpenPIリポジトリと一貫して、Apache 2.0ライセンスに従っています。
Update on GitHub