M1 MacでOllamaを使わずにPhi-3を動かしてみた話
概要
Phi-3に続きGemma2がリリースされるなど、ローカルで動かせるLLMが増えてきているのでキャッチアップのために触ってみようと思い、M1 Macを使って色々試したお話。
Ollamaでやれば瞬殺だったが、瞬殺すぎたので別の方法でも動かしてみた。
tl;dr
mlx-communityが提供しているモデルの利用方法に従えばすぐに動く。
まずはOllamaで動かしてみる
OllamaのGitHub Repoを確認すると色々説明が書いてあるので都合が良い方法でセットアップを進める。
今回は直接インストールすると都合が悪い環境だったため、Dockerを使って起動させてみる。
docker run -d -v ollama:{ホスト側のマウント先} -p 11434:11434 --name ollama ollama/ollama
docker exec -it ollama ollama run phi3:3.8b
上記のコマンドによってPhi-3 MiniがOllama上で動く。これでもうほぼ終わりなのだが、curlコマンド経由での動作も確認してみる。
curl http://localhost:11434/api/generate -d '{
"model": "phi3:3.8b",
"prompt":"Why is the sky blue?"
}'
JSON形式で応答が返ってくるので非常に読みづらいが、何だか動いていることがこれだけで確認できてしまった。
Ollama以外の動かし方
非常にあっさりと動いてしまい、よくわからんがとりあえず動いたという状態になったため、これは良くないなと思い別の方法を調べてみた。
LLMでデータ生成するときの構成
色々調べてみると、LLMでデータを生成するときはPhi3やGemma2と言ったモデルに対してinference
するという表現をするらしい。このinference
を行うライブラリの代表例がllama.cppとなる。Ollamaはこのllama.cppをWrapしてAPIなどを提供するライブラリ。
利用するライブラリによってAWQ
,EXL2
,GPTQ
と言った量子化モデルに対応できるかどうかが変わってくる。例えば、以下のモデルはPhi-3 MiniをEXL2で量子化したモデルで、ExLamma v2というライブラリはこれを動かすことができる。
ExLlamaV2を試すも・・・
何となくLLMを動かすときのシステム構成が掴めてきたため、Pythonで動かせそうなExLlamma V2なるライブラリを試すことに。
ただ、これは上手くいかずCUDA_HOME
が無いというエラーが出て進めなくなり、調べてみるとExLlamaはGPUでinferenceを行うライブラリのようで、M1 Macでは上手く動かせそうにないことがわかった。GeForceを積んでいるマシンであれば動かせると考えられる。
llama.cppはCPUだけでもinferenceを行えるライブラリのようなので、Macで動かすときはこの辺りが選定のポイントになりそう。
MLXならば動く
別のライブラリを選定しようと思ったところ、Appleから出ているMLXという機械学習用のライブラリがあり、これがApple Siliconに対応しているようだったため試してみることに。
pip install mlx-lm
from mlx_lm import load, generate
model, tokenizer = load("mlx-community/Phi-3-mini-128k-instruct-4bit")
response = generate(model, tokenizer, prompt="hello", verbose=True)
python main.py
上記のコードでPhi-3をM1 Mac上で動かすことができた。
Hugging FaceにてMLXに対応したモデルが公開されており、その中にあるものであればいずれも動作させることができると考えられる。
Conclusion
- 動かすだけならOllamaを使った方がcurl経由でAPIも利用できるため便利。
- Modelを使ってinferenceするためのライブラリにはいくつか種類がある。
- CPUで動くのかGPUも利用するのかでハードウェアの要求が異なるため注意。
- MLXを使えばM1 MacでLLMを動かすことができた。
Discussion