Databricks を使用して開発されました ❤️
専門家ベースのビジョン言語モデルをまばらに混合して作成する手順を説明するブログ: https://huggingface.co/blog/AviSoori1x/seemoe これは、Grok 1.5/GPT-4 Vision を最初から 1 つにまとめた単純なバージョンと考えることができます。 PyTorch ファイル。統合された実装は seeMoE.py にあります。ノートブックは seeMoE_from_scratch.ipynb です
これについて説明するブログ: https://avisoori1x.github.io/2024/04/22/seemore-_Implement_a_Vision_Language_Model_from_Scratch.html
https://huggingface.co/blog/AviSoori1x/seemore-vision- language-model
ビジョン言語モデル (VLM) のこの単純な実装には、3 つの主要なコンポーネントがあります。
画像から視覚的特徴を抽出する画像エンコーダ。この場合、CLIP で使用されるオリジナルのビジョン トランスフォーマーを最初から実装して使用します。これは実際、多くの最新の VLM で一般的な選択肢です。 1 つの注目すべき例外は Adept の Fuyu シリーズ モデルで、パッチされたイメージを投影レイヤーに直接渡します。
Vision-Language Projector - 画像の埋め込みは、デコーダで使用されるテキストの埋め込みと同じ形状ではありません。したがって、「投影」する必要があります。つまり、画像エンコーダーによって抽出された画像特徴の次元を変更して、テキスト埋め込み空間で観察されたものと一致させる必要があります。したがって、画像の特徴はデコーダにとっての「視覚トークン」になります。これは、単一レイヤーまたは MLP である可能性があります。 MLP は見せる価値があるので使用しました。
デコーダのみの言語モデル。これは、最終的にテキストを生成するコンポーネントです。私の実装では、投影モジュールをデコーダに組み込むことで、LLaVA などで見られるものから少し逸脱しています。通常、これは観察されず、デコーダのアーキテクチャ (通常はすでに事前トレーニングされたモデル) は変更されないままになります。
スケーリングされたドット積セルフ アテンションの実装は、Andrej Kapathy の makemore (https://github.com/karpathy/makemore) から借用しました。また、デコーダは、makemore と同様に、自己回帰型の文字レベル言語モデルです。これで、「seemore」という名前の由来が分かりました:)
すべては pytorch を使用して最初から書かれています。これには、アテンション メカニズム (ビジョン エンコーダーと言語デコーダーの両方)、ビジョン トランスフォーマーのパッチ作成、その他すべてが含まれます。これがリポジトリや関連ブログを参照する人にとって役立つことを願っています。
この実装に関して頻繁に参照されている出版物は次のとおりです。
seemore.py は、pytorch の単一ファイル内の実装全体です。
seemore_from_Scratch.ipynb では、モデル アーキテクチャ全体とすべてがどのように連携するかを直感的に説明します。ここから始めることをお勧めします。
seemore_Concise.ipynb は統合されたハッキング可能な実装であり、ハッキング、理解、改善し、独自のものを作成することをお勧めします。
tinyshakespear と Base64 でエンコードされた文字列表現と対応する説明を含む input.txt は、images ディレクトリの inputs.csv ファイルにあります。
modules サブディレクトリには、便宜上、各コンポーネントが独自の .py ファイルに含まれています (部分を個別にハッキングするか、独自のプロジェクトに再利用するかなど)。
コードはすべて、コンピューティングに単一の A100 を使用して Databricks 上で開発されました。これを Databricks で実行している場合は、選択したクラウド プロバイダー上の任意の大規模 GPU クラスターで問題なくスケールできます。
必要なすべてのメトリクスを追跡し、記録するのに役立つと考えたので、私は MLFlow (Databricks にプリインストールされています。完全にオープン ソースであり、他の場所から簡単に pip インストールできます) を使用することにしました。これは完全にオプションですが、推奨されます。
この実装ではパフォーマンスよりも読みやすさとハッキングのしやすさを重視しているため、これを改善する方法はたくさんあることに注意してください。ぜひ試してみて教えてください!
これがお役に立てば幸いです。ハッピーハッキング!!