fortran66のブログ

fortran について書きます。

【メモ帳】Ollama を Intel 内蔵 GPU で動かす

IPEX-LLM

追記:R5-5-19:先週に新しいドライバーが降ってきて、それに更新したところ特に問題なく動くようになりました。一応以前も最新版にしてあって、ヴァージョン番号も要求を満たしていたのですが・・・とりあえずよし。現在の番号は 31.0.101.5522 の 2024/5/12 リリース版です。

追記:対話中におかしくなります。雰囲気的には配列はみだしでデータ破壊の趣きですがよくわかりません。内蔵 GPU が使えるメモリーは最大メインメモリーの半分までのようで、今 16 Gbyte の半分の 8 G 近くは使っているのでメモリーが足りないのかもしれません。でも小さいモデルでも 異常が起きるので、よくわかりません。何かがおかしいようですw

IPEX-LLM の手引きに従い、12th Gen Intel(R) Core(TM) i7-1260P の内蔵 GPU を用いて Ollama によって LLM(大規模言語モデル)を Windows 11 上で動かします。

Ollama はバックエンドとして llama.cpp を用いており、これを Intel oneAPI の C++ コンパイラを使ってコンパイルすることで、GPU 利用を実現します。

したがって、まず ipex-llm をインストールしたうえで llama.cpp の設定を行い、引き続いて Ollama の設定に進むことになります。

ipex-llm.readthedocs.io

ipex-llm の例題が動いたところで、次に llama.cpp のインストールに移ります。

ipex-llm.readthedocs.io

注意点:第一歩目として conda と pip の合わせ技が出てくるのですが、pip が動かず頭を抱えてしまいました。

これは以下のサイトに解決方法が書いてありました。

zenn.dev

dllファイルが無いことが原因 /Library/binからffi.dll ffi-7.dll ffi-8.dllをコピーして /env/<new-env>/Library/binにペーストする。

これによって、pip が正常に動きます。

conda create -n llm-cpp python=3.11
conda activate llm-cppdounyu
pip install dpcpp-cpp-rt==2024.0.2 mkl-dpcpp==2024.0.0 onednn==2024.0.0 # install oneapi
pip install --pre --upgrade ipex-llm[cpp]

llama.cpp のソース一式を git clone してやります。

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

ここで、Anaconda prompt (miniconda3) を管理者権限で起動して、バッチファイルを実行します。

init-llama-cpp.bat

本当は例題でうまく動くか見た方がいいでしょうが、mistral-7b-instruct-v0.1.Q4_K_M.gguf のファイルサイズが大きいので、次の ollama インストールに移っても罰は当たらないかと思います。

ipex-llm.readthedocs.io

先ほどと同じく バッチファイルを管理者権限で実行します。

init-ollama.bat

ここまで順調に行っているならば、後は言語モデルをダウンロードしてローカルで言語モデルを実行できます。

実行

ひとつの anaconda prompt で ollama serv でサーバーモードで立ち上げて、もう一つ別の anaconda prompt で ollama pull phi3 をして microsoft の slm(小型言語モデル)をダウンロードして、ollama run phi3 でこれを実行できるはずです。

phi3 を実行してみました。GPU の利用率が上がっているので、ちゃんと GPU で計算しているようです。