Ubuntu Weekly Recipe

第866回IPEX-LLMを使用してIntelの内蔵/外部GPUでOllamaを高速化する

今回はIPEX-LLMを使用してOllamaを高速化する方法を紹介します。

GPUが必要といっても

ローカルでLLMを動作させるのであれば、可能な限りVRAMを多く積んだグラフィックボードが必要です。とはいえ、手軽に手が出せるような価格とはいえません。そもそも、ノートPCやミニPCのように、グラフックボードを増設できない場合も多いです。もっとも、ミニPCにはOculinkという手が使える場合もありますが、それはさておき。

そんな場合に、Intelの内蔵/外付けGPUを使用しているのであれば、Ollamaを高速化する方法があるので、今回はその方法を紹介します。

Intelのグラフィックボード(外付けGPU)は、スペックのわりに安価で販売されています。対応しているPCが手元にあるのであれば、Ollama等ローカルでLLMを使用するのであればさほど悪い選択ではありません。

以降、内蔵GPUはiGPU、グラフィックボード(外付けGPU)はdGPUと表記します。

使用するハードウェア

はじめに、今回使用するハードウェアを紹介します。

iGPU

iGPUはなんでもいいのですが、今回はUH125 Proを用意しました図1⁠。CPUはCore Ultra 5 125Hで、GPUはIntel Arc Graphicsです。

図1 UH125 Proのハードウェア情報

dGPU

今回は第747回で使用したIntel Arc A380ではなく、AR-A580D6-E8GB/DFを使用しました図2⁠。正直なところ今回の用途ではIntel Arc A380は力不足です。Intel Arc A580は安価で手に入りますが、今から購入するのであれば最新のIntel Arc B580がお勧めです。

図2 Intel Arc A580を搭載した自作PCのハードウェア情報

少し強調して表記しましたが、今回使用したiGPUとdGPUはアーキテクチャとしては同一(Alchemist)です。B580は最新のアーキテクチャ(Battlemage)で、さらに高速化されています。

IPEX-LLMとOpenVINO

IntelのGPUでOllamaを高速化する目的であれば、今回紹介するIPEX-LLMのほかにOpenVINOというツールキットも使用できます。より汎用的なのはOpenVINOですが、Ollamaを使用したいだけなのでIPEX-LLMを選択しました。IPEX-LLMで高速化できるのはPyTorchのみであり、Ollamaに特別なカスタマイズを施して対応しています。

インストールと起動

それでは必要なドライバーとランタイムをインストールしていきます。おおむねインストールドキュメントのままですが、Ubuntu 24.04 LTSでは次のコマンドを実行します。

$ sudo add-apt-repository -y ppa:kobuk-team/intel-graphics
$ sudo apt install -y libze-intel-gpu1 libze1 intel-metrics-discovery intel-opencl-icd clinfo intel-gsc
$ sudo apt-get install -y intel-media-va-driver-non-free libmfx-gen1 libvpl2 libvpl-tools libva-glx2 va-driver-all vainfo
$ sudo gpasswd -a ${USER} render
$ newgrp render

続けて派生版Ollamaをダウンロードします。こちらもドキュメントにあるとおりで、執筆段階で最新版のollama-ipex-llm-2.3.0b20250415-ubuntu.tgzをダウンロードし、展開します。コマンドはおおむね次のようになります。

$ cd (ダウンロードフォルダー)
$ tar xf ollama-ipex-llm-(バージョン)-ubuntu.tgz
$ cd ollama-ipex-llm-(バージョン)-ubuntu
$ ./start-ollama.sh

自動起動の方法などは記事の主旨から外れるので紹介しません。

実行とベンチマーク

あとはクライアントから接続し、実際に使用します。第841回第849回で紹介したFlatpak版Alpacaは、最近のバージョンでOllamaの実行環境を別パッケージに分離しました。つまり、今回のようにOllamaを別サーバーにした場合はOllamaの実行環境をインストールしなくてもいいので、ダウンロードやアップデートの時間が短縮されることになります。また、オフィシャルのOllamaではIPEX-LLMとOpenVINOのどちらにも対応しないため、宝の持ち腐れとなります。ないほうがいろいろとスッキリするというわけです。

もちろん第860回で紹介したVisual Studio Codeを使用する方法もいいでしょう。ただしこちらは記事の公開後に少し設定のUIが変わったりしているため、そのあたりは気をつけください。

ここではフロントエンドを使わず、コマンドラインで実行することによってベンチマークを計測することにします。ベンチマークソフト(?)は古式ゆかしいtimeコマンドです。

実際に入力したコマンドは次のとおりです。

$ ./ollama pull qwen3:8b
$ time ./ollama run qwen3:8b "偏りのないコインを表が出るまで投げ続け、表が出たときに、賞金をもらえるゲームがあるとする。もらえる賞金は、1回目に表が出たら1円、1回目は裏が出て2回目に表が出たら倍の2円、2回目まで裏が出ていて3回目に初めて表が出たらそのまた倍の4円、3回目まで裏が出ていて4回目に初めて表が出たらそのまた倍の8円、というふうに倍々で増える賞金がもらえるというゲームである。ここで、このゲームには参加費(=賭け金)が必要であるとしたら、参加費の金額が何円までなら払っても損ではないと言えるだろうか。 "

個人的な経験で、GPUのRAMに載るくらいのモデルで動作するLLMは知識を問うよりも考えさせるほうが正解に近いということで、サンクトペテルブルクのパラドックスを答えさせることにしました。

なお「./ollama pull qwen3:8b」はモデルをダウンロードするためのコマンドなので、最初の1回だけ実行します。今回使用しているdGPUがVRAM 8GBなので、使用するモデルは8B程度にしておくべきでしょう。iGPUの場合は(メモリーの搭載量にもよりますが)もう少し大きなモデルを動かすことができます。実際に14Bでも動作しました。

比較のため、オフィシャルのOllamaを使用してCPUでの実行時間を計測してみます。表にまとめました。

1回目 2回目 3回目
CPU 12分29秒 14分10秒 12分54秒
iGPU 7分2秒 8分2秒 5分56秒
dGPU 2分33秒 2分56秒 2分26秒

なお、CPUでは特に問題がありませんでしたが、iGPUは速度が安定せず、5回計測したうち一番速いものと一番遅いものを落とした結果を記載しています。一方dGPUは動作が安定せず、連続しての実行が困難だったので1回実行するたびにUbuntuごと再起動しています。原因は不明ですが発熱等のハードウェアの問題が考えられます。

dGPUには及びませんが、iGPUであってもCPUの倍ほどの速度が出ており、IPEX-LLMを試してみる価値はあるのではないでしょうか。

ちなみに回答はほとんど誤りでした。実際には中国語による回答もあり、そちらは正解か誤りかは筆者にはわかりませんが。このあたりは小さなモデルの限界で、14Bでは日本語のみの回答となり、誤りは見られませんでした。図3は最も正解に近い回答です。

図3 最も正解に近い。実行しているフォルダーから、iGPUで動作した結果である

おすすめ記事

記事・ニュース一覧