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を利用できる。

Open WebUI

まとめ・所感

Ollamaを用いることで、Macbook Air程度のマシン上でLLMを実行することができた。
今回試した中で最も優れていたモデルはGoogleのGemma(7b)で、モデルサイズは5GB程度。
Gemmaは出力速度に優れており、自然性もそこそこたが、回答精度には課題がありそうだということがわかった。

関連記事


  1. LLM活用法:コードを指定のプログラミング言語で書き換え
  2. Google検索とChatAIにみる、エンタープライズサーチとRAGの未来
  3. VuetifyのData Tableでソート順をカスタマイズする
  4. Sequence Decomposingをザ・ゲームに置き換えて考えてみた
  5. Pythonにおける2の整数乗は、ビット演算のほうが高速
  6. アノテーションを活用した影響調査にトライしてみた
  7. Groovyの == 演算子と equals() は厳密に同じではない

comments powered by Disqus