🍎

M1 MacでOllamaを使わずにPhi-3を動かしてみた話

2024/07/01に公開

概要

Phi-3に続きGemma2がリリースされるなど、ローカルで動かせるLLMが増えてきているのでキャッチアップのために触ってみようと思い、M1 Macを使って色々試したお話。

Ollamaでやれば瞬殺だったが、瞬殺すぎたので別の方法でも動かしてみた。

tl;dr

mlx-communityが提供しているモデルの利用方法に従えばすぐに動く。

まずはOllamaで動かしてみる

OllamaのGitHub Repoを確認すると色々説明が書いてあるので都合が良い方法でセットアップを進める。

https://github.com/ollama/ollama

今回は直接インストールすると都合が悪い環境だったため、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というライブラリはこれを動かすことができる。

https://huggingface.co/bartowski/Phi-3-mini-128k-instruct-exl2

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
main.py
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に対応したモデルが公開されており、その中にあるものであればいずれも動作させることができると考えられる。

https://huggingface.co/mlx-community/Phi-3-mini-128k-instruct-4bit

Conclusion

  • 動かすだけならOllamaを使った方がcurl経由でAPIも利用できるため便利。
  • Modelを使ってinferenceするためのライブラリにはいくつか種類がある。
    • CPUで動くのかGPUも利用するのかでハードウェアの要求が異なるため注意。
  • MLXを使えばM1 MacでLLMを動かすことができた。

Discussion