2時間で65MパラメータのVLMをゼロから訓練:MiniMind-V徹底解説

たった2時間、3ドル未満で65MパラメータのVision-Language Modelをゼロから訓練する方法を、完全なコードとデータセットの詳細とともに学びます。

Vision-Language Model(VLM)をゼロから構築するのは、大規模なチームと莫大な計算予算を必要とする困難な作業に聞こえます。しかし、コーヒー一杯分よりも安い費用で、たった2時間で訓練できるとしたらどうでしょう?それがまさにMiniMind-Vプロジェクトが提供するものです。単一のNVIDIA 3090 GPUで訓練可能な、完全に機能する65MパラメータのVLMです。

これは単なるおもちゃではありません。MiniMind-Vは、データ準備、事前学習、教師ありファインチューニング(SFT)、推論というパイプライン全体をカバーする、完全なオープンソース実装です。LLaVAやQwen-VLのような最新のVLMが内部でどのように動作するかを理解したい人向けの学習リソースとして設計されています。

MiniMind-Vが重要な理由

プロジェクトのキャッチフレーズ「大道至簡」(偉大な真理はシンプル)は、その哲学を捉えています。ほとんどのVLMチュートリアルは実装の詳細を曖昧にするか、個人の開発者が持っていないリソースを必要とします。MiniMind-Vは複雑さを取り除き、VLMの中核が驚くほど単純であることを示しています。

わずか65Mパラメータ(GPT-3の約1/2600のサイズ)で、MiniMind-Vはコンシューマーハードウェアで実行できるほど小さいです。SFTフェーズ全体は、単一のRTX 3090で約2時間かかり、GPUレンタル費用は約3ドルです。これにより、実験、学習、さらには小さなモデルで十分な実用的なアプリケーションにもアクセスしやすくなっています。

アーキテクチャ:最小限のVLM

MiniMind-VはLLaVA-1.5と同じアーキテクチャに従い、3つの主要コンポーネントがあります:

  1. ビジョンエンコーダ:SigLIP2(siglip2-base-p32-256-ve)— 約95MパラメータのViT-B/32モデルで、訓練中は凍結されます。
  2. プロジェクションモジュール:2層MLP(Linear → GELU → Linear)とLayerNormで、視覚的特徴をLLMの隠れ次元にマッピングします。
  3. 言語モデル:MiniMindの64MパラメータLLM(隠れサイズ768、8層)で、最初と最後の層のみがファインチューニングされます。

重要な洞察は、ビジョンエンコーダが画像の「外国語辞書」として機能することです。ピクセルデータをLLMが理解できるトークンに変換します。次に、プロジェクションモジュールがこれらの視覚トークンをテキストトークンの埋め込み空間に整列させます。

トークンの流れ

画像を入力すると、SigLIP2エンコーダは256×256の画像を64個のパッチトークン(8×8グリッド、patch_size=32)に処理します。これらはMLPプロジェクターを通過して64個の視覚トークンになり、テキストプロンプト内の<|image_pad|>プレースホルダーを置き換えます。結合されたシーケンスは、通常どおりLLMを流れます。

# プロンプト構造の例
"<|image_pad|>" * 64 + "\nこの画像には何が写っていますか?"

訓練パイプライン

MiniMind-Vは2段階の訓練プロセスを使用しますが、時間がない場合は最初の段階をスキップすることもできます。

ステージ1:事前学習(オプション)

  • データ:ALLaVA-4V(LAION + VFLANサブセット)からの約127万の画像-キャプションペア
  • 目的:視覚トークンを言語トークンに整列させる
  • 凍結戦略:LLMとビジョンエンコーダの両方を凍結し、プロジェクターのみを訓練(--freeze_llm 2
  • 学習率:4e-4
  • 最大シーケンス長:450トークン

このステージはオプションです。なぜなら、SFTデータセットにはすでにすべての事前学習サンプルが含まれているからです。ただし、最初に実行すると、LLMをファインチューニングする前にプロジェクターがよりきれいに収束するのに役立ちます。

ステージ2:教師ありファインチューニング(SFT)

  • データ:約290万の混合サンプル(画像指示、キャプション、プレーンテキスト)
  • 目的:モデルに画像に関する質問に答えることを教える
  • 凍結戦略:プロジェクター + 最初と最後のLLM層を訓練(--freeze_llm 1
  • 学習率:5e-6
  • 最大シーケンス長:768トークン

凍結戦略は重要です。わずか64Mパラメータで、LLMを完全に凍結解除すると、言語能力の壊滅的な忘却が発生します。中間層を凍結したままにすることで、モデルはマルチモーダル入力に適応しながら、事前学習済みの知識を保持します。

# SFT訓練の開始
python train_sft_vlm.py --epochs 2 --from_weight llm

データセットの詳細

すべての訓練データはALLaVA-4Vコレクションから取得され、高品質なバイリンガル(中国語 + 英語)の画像-テキストペアを提供します。SFTデータセットには以下が含まれます:

  • 画像指示:約140万の推論QAペア
  • 画像キャプション:約127万(事前学習からマージ)
  • プレーンテキスト:約23万の対話(言語能力を維持するために黒いプレースホルダー画像を使用)

画像は256×256にリサイズされ、効率的な読み込みのためにParquet形式でJPEGとして保存されます。Parquet形式は、遅い画像ファイルの抽出を不要にします—すべてが1つの圧縮ファイルに含まれています。

# データセット形式(parquet)
# 列:conversations(json文字列)、image_bytes(バイナリ)

評価結果

モデルは6つの多様な画像(犬、傘、自転車、車、スーパーヒーロー、レースカー)でテストされました。高密度(65M)とMoE(200M-A65M)の両方のバージョンが、6つのケースすべてで主要な被写体を正しく識別しました。MoEバージョンはより豊かなシーン記述を生成しましたが、高密度バージョンはより簡潔で繰り返しが少なかったです。

ただし、両方のモデルは、一般的な小規模モデルの問題を示しています:時折の繰り返しと詳細の幻覚です。著者は、これは予想通りであると述べています—視覚信号はLLMにとって「外国語」のようなものであり、理解の質は基本的にLLMの容量によって制限されます。バックボーンを数十億パラメータにスケーリングすると、精度が劇的に向上します。

はじめに

自分でMiniMind-Vを実行するには:

# リポジトリをクローン
git clone --depth 1 https://github.com/jingyaogong/minimind-v
cd minimind-v

# 依存関係をインストール
pip install -r requirements.txt

# ビジョンエンコーダとLLMの重みをダウンロード
modelscope download --model gongjy/siglip2-base-p32-256-ve --local_dir ./model/siglip2-base-p32-256-ve
modelscope download --model gongjy/minimind-3v-pytorch llm_768.pth --local_dir ./out

# SFTデータをダウンロード
wget https://hf-mirror.com/datasets/jingyaogong/minimind-v_dataset/resolve/main/sft_i2t.parquet -P ./dataset

# 訓練(SFTのみ、RTX 3090で約2時間)
python train_sft_vlm.py --epochs 2 --from_weight llm

今後の改善点

プロジェクトはいくつかの有望な方向性を示しています:

  • 動的解像度とタイルベースのエンコーディング(LLaVA-NeXTのように)
  • より細かい特徴のためのより強力なビジョンエンコーダ
  • マルチ画像理解、動画理解、および視覚的グラウンディング

結論

MiniMind-Vは、VLM研究の民主化における顕著な成果です。機能的なマルチモーダルモデルを構築するために、大規模なクラスターや巨額の予算は必要ないことを証明しています。コードはクリーンで、十分に文書化されており、ビジョン言語モデルを理解または実験したい人にとって優れた出発点となります。

学生、研究者、趣味人を問わず、このプロジェクトはVLM革命に参加するためのツールを提供します。著者が言うように:「LEGOで飛行機を作ることは、ファーストクラスで飛ぶよりもはるかにエキサイティングです。」

ソース

jingyaogong/minimind-v: 👀「大模型」2時間で65Mパラメータの視覚マルチモーダルVLMをゼロから訓練!Train a 65M-parameter VLM from scratch in just 2h!