fortran66のブログ

fortran について書きます。Amazonのアソシエイトとして収入を得ています。

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

IPEX-LLM

追記:R7-3-16:環境設定抜きに動作する版が出たので、そちらを利用できます。ZIP を落としてきて解凍するだけです。

github.com

CMD プロンプトを開いて、サーバーを起動するバッチを動かした後、ollama run .... するだけです。




追記:R6-12-18:色々、もともとのメモに勘違いもあって間違っていた模様w llm-ipex[xpu] の方は致命的なバグから us サイトでは消されていて cn サイトからはインストールできる。pip install --pre --upgrade ipex-llm[xpu]==2.2.0b20241217 --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/cn/ こういう感じでバージョン指定して行けなくもない。ただし、ollama には必要ないので無視してよかった。   GPU 利用に関しては、Task Maneger のプロセスのところで GPU のパーセンテイジを表示させると、そこの数値でわかる。デフォルトでは見えないので CPU とか書いてある行で右クリックのメニューで追加する。グラフに反映されないときは、タスクマネージャ再起動で治る時もある。

追記:R6-12-17:Python のコンフリクトが起きて、下記の手順では再現できません。なんとか ollama が動くようになっても、GPU が見つからないようで CPU でしか動きません。私には解決できませんw どうも intel oneAPI のライブラリの 2024.0.2 以前に致命的なバグが見つかってサイトから消されているせいで依存性が解決できない感じです。中国サイトに行くと取れなくもないが、メッセージが出る。

追記:R6-5-19:先週に新しい GPU ドライバーが降ってきて、それに更新したところ特に問題なく動くようになりました。一応以前も最新版にしてあって、ヴァージョン番号も要求を満たしていたのですが・・・とりあえずよし。現在の番号は 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 の設定に進むことになります。

これはやらなくていい https://ipex-llm.readthedocs.io/en/latest/doc/LLM/Quickstart/install_windows_gpu.html 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-cpp
pip install --pre --upgrade ipex-llm[cpp]

勝手に適切なバージョンが入るのでやらなくていい。 pip install dpcpp-cpp-rt==2024.0.2 mkl-dpcpp==2024.0.0 onednn==2024.0.0 # install oneapi

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 で計算しているようです。