見出し画像

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" を追加しています。
(パラメーター足りん、というエラーになってしまう)

サーバーモードで起動
 左側の ←→ をクリックして、サーバー画面を出します

  1. モデルを PsiPi llava v1 5 13B F16 gguf を選択します(Q8モデルならF16をQ8に読み替えてください)

  2. Configrationのポート番号、スイッチを画像と一緒にしてください。

  3. 右側の GPU Accelaration を Apple Metal(GPU) をonにします。

  4. さらにメモリーをmaxまでスライドさせます

  5. 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?"},

としてみると

Wow, the image features a girl who appears to be anime-themed. She has blue hair and is smiling with her eyes closed, possibly indicating that she's making a funny face or expressing happiness. The scene includes many other smaller images of stars surrounding her in various shapes and sizes, adding a visually interesting background to the main character. It seems like she is posing for the picture while drawing attention to herself with her playful pose and captivating facial expression.

冗舌になった

google翻訳すると

おお、この画像にはアニメをテーマにしたような女の子が写っています。 彼女は青い髪をしており、目を閉じて微笑んでいます。おそらく彼女が変な顔をしているか、幸せを表現していることを示しています。 このシーンには、彼女を取り囲むさまざまな形やサイズの星の小さな画像が多数含まれており、主人公に視覚的に興味深い背景を追加しています。 お茶目なポーズと魅惑的な表情で注目を集めながら写真を撮っているようです

ミクさんだという事はわかんないみたいですが、いい感じ。
これの70Bバージョンとかでるの楽しみだぁ

おしまい


この記事が気に入ったらサポートをしてみませんか?