LM Studioでマルチモーダルを使ってみる
LM Studio 0.2.17 がマルチモーダルに対応したので試してみました。
環境は M1 mac です。メモリーは最低でも16GByteは欲しいところ。
手順をメモしておきます。
お手軽度はとっても低いです
いつものようにLM Studio を立ち上げて絵を放り込めば、という状態にはなっていません。
LM Studio をサーバーモードで起動して、OpenAIの互換APIに対してターミナルのpythonで聞き出す、というなんとも遠回りな方法です。
モデルの準備
モデルは LM Studio の検索画面からpsipi/liuhaotian_llava-v1.5-13b-GGUF からダウンロードしてくるんですがビジュアルモデルと、言語モデル の両方をダウンロードする必要があります。
私はメインメモリーが64GByteもあるので、贅沢にfp16バージョンをダウンロードしました
・ビジュアルモデルはmmproj-model-f16
・言語モデルは llava-v1.5-13b-f16.gguf
です。
事前準備 (macのターミナル)
Python3 の環境が必要です。私のmacは 3.10.9 でした。
Pythonのopen-aiライブラリをpipで導入します。venvを使える方はvenvの環境で構築する事を強く推奨します。
% python3 -V
% Python 3.10.9
% pip install open-ai
さらにVSCodeなどで pythonのコードを書きます。
ファイル名は a.py です。(ぇ
# Adapted from OpenAI's Vision example
from openai import OpenAI
import base64
import requests
# Point to the local server
client = OpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio")
# Ask the user for a path on the filesystem:
path = input("画像ファイルを教えてください: ")
# Read the image and encode it to base64:
base64_image = ""
try:
image = open(path.replace("'", ""), "rb").read()
base64_image = base64.b64encode(image).decode("utf-8")
except:
print("Couldn't read the image. Make sure the path is correct and the file exists.")
exit()
completion = client.chat.completions.create(
model="local-model", # これがないと動かなかった
messages=[
{
"role": "user",
"content": "これはユーザーとアシスタントの間のチャットです。 アシスタントは、ユーザーが画像を説明するのを支援します。",
},
{
"role": "user",
"content": [
{"type": "text", "text": "これは何の画像ですか?日本語で答えてください"},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
},
},
],
}
],
max_tokens=1000,
stream=True
)
for chunk in completion:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
このソースコードは LM Studio の vision(python)からほぼそのまま持ってきています。
プロンプトを日本語にしてあるのと
client.chat.completions.create() の定義で
model="local-model" を追加しています。
(パラメーター足りん、というエラーになってしまう)
サーバーモードで起動
左側の ←→ をクリックして、サーバー画面を出します
モデルを PsiPi llava v1 5 13B F16 gguf を選択します(Q8モデルならF16をQ8に読み替えてください)
Configrationのポート番号、スイッチを画像と一緒にしてください。
右側の GPU Accelaration を Apple Metal(GPU) をonにします。
さらにメモリーをmaxまでスライドさせます
Start サーバーボタンを押して、サーバーモードで起動します
ほんでもって mac のターミナルに戻って…
% python3 a.py
画像ファイルを教えてください:
とすると「画像ファイルを教えてください:」と訊かれるので、ファイル名を入れます。
画像ファイルか以下のものを使用しました
するってーと
こんな感じで答えてくれます。
日本語で答えさせたせいか、雑だなぁ。
プロンプトを英語に書き換えてみます。
"content": "This is a chat between a user and an assistant. The assistant is helping the user to describe an image.",
コンテントの部分を
"content": [
{"type": "text", "text": "What’s in this image?"},
としてみると
google翻訳すると
ミクさんだという事はわかんないみたいですが、いい感じ。
これの70Bバージョンとかでるの楽しみだぁ
おしまい