はじめに
ユニファイドメモリ 16GB の M4 MacBook Air で、ローカルLLM を試しているのですが、そのお試しの中の 1つです。
以下のポストを見かけて、試してみたものになります。画像を入力に使えるモデルです。
上記のポストをしたころである 8月中旬〜下旬に軽く手をつけて、記事の下書きも途中まで作っていたのですが、それを放置してしまっていました。そのため、そのお試しを最後までやって記事も完成させました。
今回使うモデル
今回使うモデルは、 mlx-community/LFM2-VL-1.6B 、mlx-community/LFM2-VL-450M のそれぞれに関するものです。
Hugging Face上で見ると、以下のようないくつかのバリエーションがあります。
●Models - Hugging Face
https://huggingface.co/models?sort=created&search=mlx-communityLFM2-VL-
2つのモデルを選択
これらを適当に見てみて、以下の 8bit の量子化のもの 2つをお試し用に選びました。
●mlx-community/LFM2-VL-1.6B-8bit · Hugging Face
https://huggingface.co/mlx-community/LFM2-VL-1.6B-8bit
●mlx-community/LFM2-VL-450M-8bit · Hugging Face
https://huggingface.co/mlx-community/LFM2-VL-450M-8bit
モデルのサイズは、それぞれ 2GB くらい・560MB という感じです。
自分の M4 の MacBook Air は、ユニファイドメモリ 16GB のうちローカルLLM用に 8GB ほどを使う形になるので、どちらのモデルも余裕で動く感じです。
さっそく試す
さっそく試してみます。
プロンプトと入力画像
プロンプトは「この画像を日本語で説明して」という内容で、画像は過去のお試しでも使っている以下を使いました。
エラーの対処
この後に書いているコマンドを実行したところ、以下のエラーがでました。
そのため、エラーメッセージに従って以下を実行して torch をインストールしました。
pip install torch
処理を実行するためのコマンド
あらためて、それぞれのモデルを使った処理を以下で実行してみます。
python -m mlx_vlm.generate --model mlx-community/LFM2-VL-1.6B-8bit --max-tokens 512 --temp 0.0 --prompt "この画像を日本語で説明して" --image "dragon.jpg"
python -m mlx_vlm.generate --model mlx-community/LFM2-VL-450M-8bit --max-tokens 512 --temp 0.0 --prompt "この画像を日本語で説明して" --image "dragon.jpg"
処理結果
処理結果は、以下のとおりです。
LFM2-VL-450M-8bit
のほうは、変な感じの出力が出てしまっていましたが、 LFM2-VL-1.6B-8bit
のほうは、まあまあ良い感じの結果が得られたと思います。
それぞれ、出力と処理スピードなどの部分をテキストとして掲載すると、以下となります。
【LFM2-VL-1.6B-8bit】
この画像は、対立する二つの力の対決を描いたファンタジー風のイラストです。左側には青い draco dragon が、右側には赤い draco dragon が描かれています。二つの dragon は互いに向かうように配置されており、彼らの口から激しい火花が飛び出しています。背景には、天空が二色に分かれており、左側は青く、右側は赤く、雷が放たれています。山々が描かれており、全体の色調は火と冷気の対比が強調されています。
==========
Prompt: 162 tokens, 117.816 tokens-per-sec
Generation: 138 tokens, 65.473 tokens-per-sec
Peak memory: 2.689 GB
【LFM2-VL-450M-8bit】
この画像は、二つの対立する世界の二つの王国を描いています。天空と地面の両方で、両方の王国が闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の両方で闇と光の
==========
Prompt: 162 tokens, 690.160 tokens-per-sec
Generation: 512 tokens, 202.014 tokens-per-sec
Peak memory: 0.965 GB