GPUクラスタを購入せずにペットプロジェクトを実現するビジョン
画像認識や写真ベースのQ&Aをプロジェクトに追加する必要があるたびに、クラウドAPIに手を伸ばしてしまう了吧。でも、各OpenAIコールのたびに料金を支払ったり、サードパーティサービスを介してリクエストをルーティングしたりすることは、必ずしも望ましいわけではありません。重いマルチモーダルモデルをローカルで実行することも簡単ではありません。ほとんどのオープンソースソリューションは、24GB以上のメモリを持つGPUが必要です。
リポジトリ moondream は、まさにこの問題を解決します。m87-labsの開発者たちは、数ギガバイトの重さでありながら画像を確実に解析できるコンパクトなマルチモーダルモデル собрали。手頃なハードウェアでもスムーズに動作します。
moondreamできること
このモデルは、画像とテキストクエリを入力として受け取り、自然言語で意味のあるレスポンスを返します。リポジトリには2つのバージョンが含まれています:
- キャプション生成、ビジュアル質問応答、オブジェクト検出など標準的なタスク向けの20億パラメータを持つmoondream 2B
- 蒸留によって圧縮された5億パラメータのmoondream 0.5B。スマートフォン、シングルボードコンピュータ、最小限のRAM消費量のマイクロサービスでの実行に対応
リポジトリからの例をいくつか紹介します:

写真の中の人が何をしているかをモデルに尋ねると、「女の子はテーブルに座って大きなハンバーガーを食べています」と答えます。髪の色を聞かれると、白であると明確に指定します。
2番目の例では、環境のより詳細な分析を示しています:

「これは何ですか?」と尋ねると、moondreamは詳細な段落を生成します。サーバーラックを認識し、接続された電源ケーブル、床のカーペット、近くのソファ、背景のレンガの壁を指摘します。
ローカルで実行する方法
モデルはPythonで書かれており、ほんの十数行のコードでプロジェクトに統合できます。基本的な推論には、標準的なHugging Faceライブラリのみが必要です。
from PIL import Image
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "vikhyatk/moondream2"
revision = "2024-08-26"
model = AutoModelForCausalLM.from_pretrained(
model_id,
trust_remote_code=True,
revision=revision
)
tokenizer = AutoTokenizer.from_pretrained(model_id, revision=revision)
image = Image.open("photo.jpg")
enc_image = model.encode_image(image)
answer = model.answer_question(enc_image, "Describe this image in detail.", tokenizer)
print(answer)
0.5Bバージョンは、致命的な遅延なしにベアCPUでも動作します。ローカルリソースがまったく利用できない場合、作者たちはサーバーレスのプラットフォームModalを介したデプロイメントの例を用意しています。
実践での活用例
小型であることから、大きなモデルが予算やレイテンシ要件に合わないシナリオが開けます:
- ローカルメディアアーカイブでの自動タグ付けとキャプション生成。
- アプリケーションサーバーで直接、ボットやWebフォームのコンテンツモデレーション。
- 安定したインターネットへのアクセスがないRaspberry PiベースのロボティクスやDIYデバイス。
- 重い後処理への送信前の高速画像フィルタリング。
もちろん、5億パラメータのモデルに複雑なグラフや手書きテキストの理解を期待すべきではありません。しかし、基本的な画像ナビゲーションとシーン描述には、moondreamは優れたパフォーマンスを発揮します。
サーバーに多額の費用をかけず、ノートパソコンでも動作する高速で軽量なVLMモジュールが必要な場合、moondreamはサンドボックスでテストする価値があります。プロジェクトの公式サイトにあるPlaygroundセクションで、ブラウザーでモデルを試すことができます。
関連プロジェクト