Macで簡単にローカルLLMを試す(OllamaとLM Studio)
はじめに
自分のPCで動かすLLMはなんといっても無料で回数制限なく使えるのが良いですね。
MetaのLlama 3やGoogleのGemma 2などのLLMを動かすには、LM StudioやOllamaが簡単で便利です。今回は、それぞれの使い方を紹介しますので、お好きな方で試してみてください。
個人的には、新しいモデルを試す時はLM Studioで、普段使うときはOllamaという感じに使い分けています。
環境
- Mac mini
- Apple M2
- メモリ 16GB
LM Studio
環境構築、モデルのダウンロード、チャットしてみる、というところまでを簡単に実現してくれるのはOllamaと同じですが、LM Studioでは、HuggingFaceにあるLLMモデルを検索してダウンロードできます。検索結果では自分のPCスペックで実行できそうかも色別に表示してくれます。UIで簡単にできるのは嬉しい機能だと思います。また、チャットのUIが入っているのも便利です。
LM Studio v0.3.0で大幅にUIが刷新されましたので、以下の画面説明は古い情報となりました! (2024年8月23日)
検索画面
キーワード検索すると、GGUFフォーマットのものが表示されます。
今回の環境だと、上から2つまでがグリーンのラベルが表示されていて、とりあえず動作することがわかります。
手順
LM Studioをダウンロード
トップページにあるボタンからLM Studioをダウンロードして、セットアップしてください。
モデルをダウンロード
起動すると、このようなHome画面が表示されます。とりあえず、「gemma」 と入れて検索してみます。
検索結果画面になりますので、例えば、Q5_K_MのモデルをDownloadボタンでダウンロードしてみます。
My Models画面で自分がダウンロードしたモデルが表示されます。
モデルを動かす
さて、ダウンロードできましたので、早速使ってみたいと思います。
AI Chat画面で上部の青いバーエリアでモデルを選択するとチャットができます。
上部にRAM UsageとCPU使用率が表示されますので、どれくらい使用しているかもわかります。
Local Server
ローカルサーバーとしても使えます。
Local Server画面で、Start Serverボタンで有効にしてみます。
画面中央にあるcurl内容をCopy Codeボタンでコピーしてみます。
下記は、model、userのcontent、stream、を少し変えてあります。
(model名はMy Models画面で表示されるモデル名にしてあります)
curl http://localhost:1235/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "bartowski/gemma-2-9b-it-GGUF/gemma-2-9b-it-Q5_K_M.gguf",
"messages": [
{ "role": "system", "content": "Always answer in rhymes." },
{ "role": "user", "content": "What is your model name?" }
],
"temperature": 0.7,
"max_tokens": -1,
"stream": false
}'
ターミナルでこれを貼り付けて実行すると、結果がこのように返ってきました。
{
"id": "chatcmpl-3tm8tk7plxe98g3ht9jzua",
"object": "chat.completion",
"created": 1720175535,
"model": "bartowski/gemma-2-9b-it-GGUF/gemma-2-9b-it-Q5_K_M.gguf",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "My name's Gemma, it's plain to see,\nA language model, here for thee! \n\n\n\n"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 20,
"completion_tokens": 24,
"total_tokens": 44
}
}%
Ollama
Ollamaも簡単にセットアップできます。こちらはGUIではないので、起動後はターミナルから操作します。
手順
Ollamaをダウンロード
ダウンロードページからダウンロードして起動します。
起動すると、ステータスバーにアイコンが表示されます。
終了したい時は、アイコンをクリックしてメニューのQuit Ollamaを実行します。
モデルをダウンロード
簡単にモデルをセットするには、サイトから登録されているモデルを調べます。
例えば、gemma2であれば、このような画面が表示されます。
ここでollama run gemma2:latest
をコピーします。
ターミナルで、ollama run gemma2:latest
をするとダウンロードがはじまり、完了すると起動します。
モデルを動かす
さきほどの状態で起動されていますので、このまま対話ができます。
対話から抜ける時は、Ctrl + d か /bye
です。
ダウンロードしたモデル一覧を見たい時は、ollama list
とします。
モデルのダウンロードだけ行いときは、例えばgemma2なら、ollama pull gemma2
とします。
また、モデルを削除したい時は、例えばgemma2なら、ollama rm gemma2
とします。
Local Server
こちらもローカルサーバーとしても使えます。今回はOpenAI互換の形式でテストしてみます。
ターミナルで以下を貼り付けて実行してみます。
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemma2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
回答はこのように返ってきました。
{"id":"chatcmpl-53","object":"chat.completion","created":1720540793,"model":"gemma2","system_fingerprint":"fp_ollama","choices":[{"index":0,"message":{"role":"assistant","content":"Hello! 👋 \n\nI'm glad to hear from you. How can I be of assistance today? 😊 \n"},"finish_reason":"stop"}],"usage":{"prompt_tokens":18,"completion_tokens":26,"total_tokens":44}}
また、ollama serve
コマンドで起動するときにOLLAMA_NUM_PARALLEL
を設定すれば、
単一のモデルに対して同時に処理されるリクエストの数を指定できます。
例:ターミナルから起動
OLLAMA_NUM_PARALLEL=3 ollama serve
これでリクエストを同時に3つまで投げてもそれぞれ処理してくれます。
Chat UI
LM Studioと異なりGUI画面がないので、ターミナルだけだと味気ないですよね。
Chat UIはChatbot UIなどいろいろありますが、準備が面倒なので、今回はすぐに使えるEnchanted LLMというアプリを使ってみます。
App Storeから探してインストールします。アプリを起動させたら、このような画面になります。
Ollamaが起動していれば、右上にモデル選択でモデルを選べますので、そのまますぐにチャットができます。
SettingsからSystem promptの設定もできます。
まとめ
LM StudioやOllamaで、簡単にLLMモデルを実行することができました。
llama3-70bなどの高性能なモデルは今回の環境ではまともに動作しませんが、llama3-8bなどの小さなものであれば、この環境でも割とスムーズに動いてくれたのは感動です。
シンプルなAIチャットするページの作り方を記事にしましたので、こちらもよかったら。
Discussion