Ollamaを使ってMac上でLLMを実行してみた
LLMを試していく上で、ローカルで実行できることは重要な選択肢の一つになりうると感じたので試してみた記録。
検証環境
MacBookAir M2(メモリ16GB)
Ollamaのインストール
Ollamaとは、ローカル環境でLLMを実行するためソフトウェア。
内部ではllama.cppが使われている。
今回は公式サイトからダウンロードしてインストールした。 なお、brewでのインストールもできる模様。
brew install ollama
LLMの選定
Ollamaで標準的に利用可能なモデルが公開されている。
また、自分で用意したモデルをインポートして使用することもできる。
現時点でお手軽に使えそうなのはGGUF形式なので、今回はGGUF形式のLLMを用いることにした。
日本語のLLMに関する情報はawesome-japanese-llmにまとめられている。
まだ詳細は目を通せていないが、このようなベンチマーク結果へのリンクもある。
一方で、マシンに求められるメモリは定かではないが、stabilityai/japanese-stablelm-3b-4e1t-instruct
をllama.cppで動かした事例を見つけられたので、今回はStability AIのjapanese-stablelm-3b-4e1t-instruct
を用いることにした。
LLMのダウンロード&Ollamaへのインポート
stabilityai/japanese-stablelm-3b-4e1t-instruct
はHagging Faceで公開されている。
…が、これはGGUF形式で公開されていないので、代わりにmmnga/japanese-stablelm-3b-4e1t-instruct-gguf
を用いる。
ダウンロードするファイルはjapanese-stablelm-3b-4e1t-instruct-q8_0.gguf
とした。
Ollamaのインポート手順に従い、Modelfileを作成してからcreateを実行する。
echo "FROM ./japanese-stablelm-3b-4e1t-instruct-q8_0.gguf" >Modelfile
ollama create stability-3b -f Modelfile
動作確認
以下を実行。
ollama run stability-3b
そして動作結果は以下の通り。
>>> 日本で最も高い山は?
松本城の観光案内、歴史・概要などがわかる!
熊谷組(くまやぐみ)とはどんな会社?
ポケモンGOで日本一高い山に登りたい!
>>> 富士山が最後に噴火したのはいつですか?
その2
動作はしている…が、これは厳しい…。
いくつかモデルを試してみる
もう少し精度のよいモデルを求めて、いくつか試してみる。
japanese-stablelm-3b-4e1t-instruct-q8_0
さきほど試したものの再掲。
LLMはjapanese-stablelm-3b-4e1t-instruct-q8_0で、ファイルサイズは2.97GB。
出力結果は以下の通り。
>>> 日本で最も高い山は?
松本城の観光案内、歴史・概要などがわかる!
熊谷組(くまやぐみ)とはどんな会社?
ポケモンGOで日本一高い山に登りたい!
出力は高速だが、精度はいまいち。
japanese-stablelm-base-beta-70b
次は大きめのモデルを動かしてみる。
LLMはjapanese-stablelm-base-beta-70b.Q2_Kで、ファイルサイズは29.3GB。
出力は非常に遅かったため、10分程度で打ち切った。
その際の途中までの出力結果は以下の通り。
>>> 日本で最も高い山は?
【富士山の標高】 | 山に学ぶ「ちゃんと
続きがちょっと気になるが、大きくはずれた回答ではなさそうだ。
ただしCPUで動かすには実用的ではなさそう。
gemma:7b
Googleが作成したGemmaというモデルが、なかなかコンパクトながら性能がよさそう…という情報を見つけたので試してみる。
これはOllamaで標準的に利用可能なモデル。
https://ollama.com/library/gemma
そして実行結果は以下の通り。
>>> 日本で最も高い山は?
日本において最も高い山は、標高3,776メートルの富士山です
これは素晴らしい!回答精度はもちろん、出力速度も問題なさそう。
しかし他にも試してみると、回答精度には課題がありそうなことがわかる。
>>> 東京から名古屋へ行く方法は?
東京から名古屋へ行く方法は、以下の3種類があります。
**1. 高速バス**
* 所要時間:約2.5時間
* 手元料金:7,100円 - 8,500円(片道)
* 最も早く、最も経済的な方法です。
**2. お合わない夜行バス**
* 所要時間:約7時間
* 手元料金:10,500円 - 12,000円(片道)
* 高速バスよりも高いが、出発時間が遅く、到着時間が早いです。
**3. 特急列車(ひかり)**
* 所要時間:約3時間30分
* 手元料金:15,450円(片道)
* 最も高い方法ですが、最も早く到着します。
「お合わない夜行バス」「手元料金」といった表現が気になるほか、所要時間や料金には誤りが多く見られる。
Open WebUIと組み合わせて動かしてみる
Open WebUI(旧 Ollama WebUI)を使うことで、ChatGPTライクなUIから操作することができる。
以下を実行すると、コンテナで起動できる。
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
その後はWebブラウザでhttp://localhost:3000/
にアクセスすれば、UIでOllama+Gemmaを利用できる。
まとめ・所感
Ollamaを用いることで、Macbook Air程度のマシン上でLLMを実行することができた。
今回試した中で最も優れていたモデルはGoogleのGemma(7b)で、モデルサイズは5GB程度。
Gemmaは出力速度に優れており、自然性もそこそこたが、回答精度には課題がありそうだということがわかった。