高火力 DOKはコンテナー型の GPU サービスで、NVIDIA V100 や H100 を実行時間課金で利用できるサービスです。
今回はこの高火力 DOK を使って、オープンソースのマルチモーダル AI のMolmoを試してみました。
Molmo について
Molmo はオープンソース、かつサイズが小さいながらも GPT-4o や Gemini 1.5 Pro といった AI に匹敵する性能があるというマルチモーダル AI です。例えば写真などを指定して、その中に写っているオブジェクトに関する情報を取得できます。
参考
今回の記事はMolmo を試すを参考にさせてもらいました。
Notebook で試す
高火力 DOK は、Docker コンテナの実行の他、Jupyter Notebook をすぐに起動できる機能があります。今回はこちらを使っています。なお、GPU は H100 です。V100 ではメモリ不足になります。
必要なライブラリのインストール
まず、必要なライブラリを pip でインストールします。
!pip install einops torchvision bitsandbytes
モデルの読み込み
次にモデルを読み込みます。
from transformers import AutoModelForCausalLM, AutoProcessor, GenerationConfig
from PIL import Image
import requests
processor = AutoProcessor.from_pretrained(
'allenai/Molmo-7B-D-0924',
trust_remote_code=True,
torch_dtype='auto',
device_map='auto'
)
model = AutoModelForCausalLM.from_pretrained(
'allenai/Molmo-7B-D-0924',
trust_remote_code=True,
torch_dtype='auto',
device_map='auto'
)
写真の指定
写真は任意のものを使えますが、今回は https://picsum.photos/id/237/536/354
を指定しています(ライセンスはこちら)。text は日本語でもいいようですが、精度が下がるようです。
inputs = processor.process(
images=[Image.open(requests.get("https://picsum.photos/id/237/536/354", stream=True).raw)],
text="What do you see in this picture?"
)
inputs = {k: v.to(model.device).unsqueeze(0) for k, v in inputs.items()}
認識処理
認識処理のコードです。
output = model.generate_from_batch(
inputs,
GenerationConfig(max_new_tokens=200, stop_strings="<|endoftext|>"),
tokenizer=processor.tokenizer
)
generated_tokens = output[0,inputs['input_ids'].size(1):]
generated_text = processor.tokenizer.decode(generated_tokens, skip_special_tokens=True)
print(generated_text)
処理結果
認識処理の結果です。元画像はこちら。
得られたテキストは以下の通りです。
I see an adorable black Labrador puppy sitting on what appears
to be a wooden deck. The puppy is looking up at the camera with
a curious and attentive expression. Its ears are slightly floppy,
and its eyes are a warm brown color. The puppy's front paws are
visible, and it seems to be in a relaxed posture. The wooden
deck has a light brown color with some darker spots, and you can
see the grain of the wood. The image has a slightly darker tone
overall, which makes the puppy's black fur stand out nicely against
the lighter background.
DeepL で日本語にした結果がこちら。かなり詳細な説明になっているのではないでしょうか。
かわいい黒いラブラドールの子犬が、木製のデッキの上で座っています。
子犬はカメラの方を好奇心旺盛で真剣な表情で上を見上げています。耳は少し垂れており、
目は温かい茶色をしています。前足が見えており、リラックスした姿勢を取っています。
木製のデッキは淡い茶色で、いくつかの濃い斑点があり、木の木目が見えます。
全体的にやや暗いトーンの映像で、パピーの黒い毛並みが明るい背景に美しく映えています。
注意点
高火力 DOK はタスク実行時間(秒単位)の課金です。利用し終わったら、Jupyter Notebook を忘れずに終了してください。特に H100 は V100 と比べても高いので、利用時には注意してください。
まとめ
今回は Molmo を使って、高火力 DOK 上でマルチモーダル AI を試しました。Jupyter Notebook を使えば、ハードウェア環境を用意することなく、すぐに機械学習をはじめられます。Jupyter Notebook 上であれば、インタラクティブに結果を確認しながら進められるのが便利です。
Jupyter Notebook で開発し、終わったら Docker イメージにして高火力 DOK で並列実行できます。ぜひ試してください。