VLM-R1入門:GRPOで視覚言語モデルの外挿性能を引き出す
Solve Visual Understanding with Reinforced VLMs
ひと目でわかる
- これは何?
- VLM-R1はQwen2.5-VLやInternVLに対してGRPOベースの強化学習を適用し、RECやOVDタスクでの汎化性能を狙う研究実装です。SFTとの挙動差、実行スクリプト、ライセンス面の注意点を整理します。
- 誰に向いている?
- VLM-R1は、RECやOVDのようなタスクでSFTではなくGRPOによる強化学習を試したい研究・検証チーム向けです。特にQwen2.5-VLやInternVLを使い、freeze_vision_modulesやLoRAで計算資源を抑えつつ外挿性能を確認したい場合に候補となります。
- 商用利用できる?
- できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 71 日前です。
- 何の言語で書かれている?
- 主に Python です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
VLM-R1が解こうとしている問題:SFTの外挿劣化
VLM-R1の出発点は、視覚言語モデルのファインチューニングにおける汎化の弱さです。READMEでは、Referring Expression Comprehension(REC)タスクでQwen2.5-VLをSFTとR1(強化学習)の両方で訓練した結果が示されています。ドメイン内テストでは、訓練ステップが100から600程度と少ないうちはSFTモデルの性能変化は小さい一方、R1モデルは着実に改善します。問題はドメイン外テストにあります。SFTモデルはステップが増えるにつれて性能がわずかに悪化するのに対し、RLモデルは推論能力をドメイン外データへ外挿します。この差が、VLM-R1が対象とする課題です。向いているのは、限られたデータで特定タスクを訓練しつつ、未知の入力分布でも性能を落としたくないケースです。逆に、訓練データとテストデータが同じ分布で、単純に精度を上げたいだけなら、SFTで十分な可能性があります。
GRPOと報酬設計:grpo_jsonl.pyに集約された処理
VLM-R1の訓練機構の中心はGRPO(Group Relative Policy Optimization)です。2025-04-16の更新で、RECの処理はgrpo_jsonl.pyに統合され、タスク間で実装が統一されました。ここで重要なのがis_reward_customized_from_vlm_moduleというパラメータです。これをtrueにすると、報酬ロジックは選択したモデルに応じてQwenVL2ModuleまたはInternVLModule側で処理されます。つまり、報酬計算をモデルモジュールに委譲するか、共通のgrpo_jsonl.py側で扱うかを切り替えられる設計です。OVDタスク向けにはodLength、weighted_sum、cosineという報酬が追加されており、これらもgrpo_jsonl.pyに実装されています。報酬の詳細はブログ記事とfindingsに譲られていますが、タスクごとに報酬の組み合わせを変える必要がある点は、導入時の設計コストになります。報酬関数を自前で書く前提の構成であり、既製の損失関数を差し替えるだけの使い方ではありません。
対応モデルとモジュール構成:QwenVLとInternVL
READMEによると、VLM-R1はQwenVLとInternVLをサポートしています。新しいモデルを追加する手順はassets/add_new_model.mdに記載されています。モデルごとの差分はvlm_modules配下に吸収されており、Qwen向けはqwen_module.py、InternVL向けはinternvl_module.pyが対応します。2025-06-26の更新では、QwenVL向けにバウンディングボックスのpost-resize処理が訓練側(qwen_module.pyの124から129行目付近)と評価側(test_rec_r1.pyの92から97行目付近)に追加され、結果がわずかに改善したとされています。このように、モデル固有の前処理がモジュール側に閉じているため、対応モデルを切り替える際は前処理の差異を確認する必要があります。逆に言えば、サポート外のVLMを試す場合はadd_new_model.mdの手順に従ってモジュールを追加する作業が発生し、スクリプトを差し替えるだけでは済みません。
実行手順:run_scripts配下のスクリプトと設定キー
訓練の入口はrun_scriptsディレクトリのシェルスクリプトです。フルファインチューニングのGRPOはrun_grpo_rec.sh、LoRAはrun_grpo_rec_lora.sh、マルチノードはmultinode_training_demo.sh、マルチ画像入力はrun_grpo_gui.shがそれぞれ対応します。視覚モジュールを凍結したい場合は、スクリプト内でfreeze_vision_modulesをtrueに設定します。独自データを使う場合はREADMEのFor your own dataセクション、モデル追加はassets/add_new_model.mdを参照する流れです。報酬をモデルモジュール側で処理させる場合は、前述のis_reward_customized_from_vlm_moduleをtrueにします。評価側はsrc/eval/test_rec_r1.pyがREC用のテストを担います。これらはあくまでリポジトリに置かれたスクリプトと設定キーの話であり、実際の起動可否や所要時間はGPU構成とデータセットに依存します。READMEには具体的なハードウェア要件や学習時間の記載がないため、その点は各自の環境で確認が必要です。
マルチノード・マルチ画像・LoRA:拡張機能の位置づけ
VLM-R1は単一GPUの訓練だけでなく、マルチノード訓練、マルチ画像入力、LoRAファインチューニングをサポートします。マルチ画像入力の例はrun_grpo_gui.shで、GUI操作に関連するデータ形式を想定しています。LoRAを使えば全パラメータを更新せずにGRPOを回せるため、計算資源が限られる環境では現実的な選択肢になります。ただし、これらのスクリプトはあくまで出発点です。マルチノード訓練はネットワーク構成やチェックポイント同期の設計が別途必要になり、スクリプトをそのまま実行すれば動くという性質のものではありません。また、freeze_vision_modulesをtrueにすると視覚モジュールは固定されるため、視覚表現自体をタスクに適応させたい場合には向きません。拡張機能の豊富さは、そのまま設定項目の多さでもあります。
Ascend対応とxllm:推論側の最適化
2025-08-22の更新で、VLM-R1シリーズモデルはHuawei Ascend Atlas 800T A2およびAtlas 300I Duoシリーズにvllm-ascendフレームワーク経由で適応しました。参照先はascend_inference/910B/vllm_ascend/README.mdとascend_inference/300IDuo/README.mdです。さらに2025-08-29には、JDのオープンソース推論フレームワークxllmに基づく最適化が追加され、vllm-ascendと比較してTTFTが50パーセント削減、全体スループットが127パーセント増加したとREADMEは述べています。ただしこれらはプロジェクト側の記載値であり、独立した検証結果ではありません。Ascend環境を持たない場合、これらのパスは実質的に関係ありません。NVIDIA GPU環境で訓練する場合、推論最適化の恩恵を受けるにはxllmまたはvllm-ascendの導入が前提となり、構成が別系統になります。
ライセンスと保守コスト:Apache-2.0の範囲
VLM-R1はApache-2.0ライセンスで公開されています。このライセンスは商用利用や改変、再配布を許可しますが、著作権表示とライセンス表示の保持が条件です。ただし、これはリポジトリのコードに対するライセンスであり、公開されているチェックポイントやデータセットの利用条件は別に確認する必要があります。Hugging FaceやModelScopeで配布されているモデル重みには、それぞれのページに記載された条件が適用されます。保守の観点では、リポジトリは2026年7月時点でアーカイブされておらず、最終プッシュも同日付です。リリースはv0.1.0(2025-03-17)、v0.2.0(2025-03-24)、v0.2.1(2025-04-15)の3件が確認できます。更新履歴にはAscend対応や報酬関数の追加などが並び、活発に変更が入っている一方、破壊的変更の可能性も否定できません。特定のリリースに固定して運用する方が安全です。
代替手段との比較:SFTベースのアプローチ
VLM-R1の直接の比較対象は、同じQwen2.5-VLやInternVLを使ったSFTベースのファインチューニングです。READMEの実験では、ドメイン内ではSFTとR1の差は訓練初期には小さく、ドメイン外ではSFTがステップ増加とともにわずかに劣化するのに対しR1は外挿します。この違いは、報酬設計とGRPOの訓練ループを維持するコストと引き換えです。SFTであれば既存の訓練パイプラインをほぼそのまま使えますが、VLM-R1では報酬関数の選択、is_reward_customized_from_vlm_moduleの切り替え、モデルモジュール側の前処理確認が必要になります。タスクがRECやOVDのように報酬を定義しやすい場合、VLM-R1のアプローチは意味を持ちます。逆に、報酬を数値化しにくい自由記述的な視覚理解タスクでは、GRPOの利点を引き出すのが難しくなります。
編集部の結論
VLM-R1は、RECやOVDのようなタスクでSFTではなくGRPOによる強化学習を試したい研究・検証チーム向けです。特にQwen2.5-VLやInternVLを使い、freeze_vision_modulesやLoRAで計算資源を抑えつつ外挿性能を確認したい場合に候補となります。一方、本番推論だけが目的でファインチューニングを予定していない場合や、GRPOの報酬設計を自前で調整する余力がない場合は、提供済みチェックポイントの利用や別のSFTベース手法を検討すべきです。導入前に、run_grpo_rec.shのis_reward_customized_from_vlm_moduleの値と、使用モデルに対応するvlm_modules配下のモジュールが一致しているかを確認してください。
コミュニティノート