Intel GPUとNVIDIA GPUを実機検証で性能比較してみる
記事名は受け狙い。本当に比較してみたら、両陣営の関係者へ盛大な薪を投入するような、盛大な炎上案件となってしまう。
今回はWindows環境でLlama.cppでNVIDIA GPUを使う方法を模索している時に見かけたブログがあり、そこで「CPUのみ」と「GPU利用(cuBLAS)」で数値比較している記事があったので、ド素人が真似をしてみたというだけの話。実はIntel GPUも、2024年4月にLlama.cppがLlama.cpp for SYCLで対応開始したのだ。
ちなみにkun432さんはOS環境を明示していないけど、表示プロンプト等から察するに、なんとなくUbuntu 22.04か20.04あたりのような気がする。当方はUbuntu22.04である。
お互いの実機環境
あちらさんの実機環境。現行で最新のNVIDIA GeForce RTX 4090ですか。メモリも96GB搭載している。うーん、彼の環境 ….. 素直に羨まし過ぎる。
CPU: Intel Core i9-13900F
メモリ: 96GB
GPU: GeForce RTX 4090 (VRAMは24GB)
当方環境はご覧の通り。
CPU: Intel Core i5-8500
メモリ: 64GB
GPU: Intel Arc A770 (VRAMは16GB)
なおマザーボードは中古で買い叩いたASRock Z370 Taichiであり、先日まではNVIDIA Telsa P40 (VRAMは24GB)という太古のデータセンタ向けGPUを搭載していた。いちおうIntel Arc A770やNVIDIAデータセンタ向けGPUで必要なAbove 4GとかResizable Barとやらなどに対応している。おかげでそのままP40からA770へGPUを入れ替えるだけで済んだ。
なお当方で試したのは13版のみ。彼と同じく4bit量子化版であるQ4_K_Mを動かしてみた。
動作結果
まずCPUのみでLlama.cppでCode Llamaを実行した結果。
./main -m ./models/codellama-13b-instruct.Q4_K_M.gguf --temp 0.1 -p "[INST]pythonで100以下のフィボナッチ数列を計算するコードを生成してください。説明は可能な限り簡潔に。日本語で。[/INST]" -ngl 43 -b 512
参考ブログ記事の実行内容を完コピ(完全コピー)したので、VRAMオフロードしないのに-ngl 43を付けて実行してしまったのはご愛敬。なおご覧の通りで3.60トークン/秒。あちらは5.14トークン/秒。単純に第8世代から第13世代の差というだけでなく、Llama.cppが第13世代の新機能を活用しているような気がする。Intelもさることながら、一年前には素朴な実行環境だったLlama.cppが、よくぞここまで成長したものだと開発陣も尊敬したくなる。
そして肝心のIntel Arc A770で実行した結果は次の通り。
ZES_ENABLE_SYSMAN=1 ./build/bin/main -m ./models/codellama-13b-instruct.Q4_K_M.gguf --temp 0.1 -p "[INST]pythonで100以下のフィボナッチ数列を計算するコードを生成してください。説明は可能な限り簡潔に。日本語で。[/INST]" -ngl 43 -b 512
なおIntel技術者のLlama 3実行時の投稿を参考に、推奨されているFP32のみでコンパイルしている。
結果は14.43トークン/秒。CPUのみで3.60トークン/秒よりも速くなっているけれども、約4倍… 某アニメの「赤い彗星」の3倍よりも高速化しているものの、個人的には期待していた結果とはならなかった。もしかしたら、どこかで設定をミスっていたりするのかもしれない。
ちなみにRTX 4090だと32層のオフロードで約16トークン/秒、全43層のオフロードで約82トークン/秒とのことだった。
気になること
さて気になるのは当方の検証環境である。ドキュメントに従って設定やコンパイル作業を実施して、たしかにCPUオンリー環境と比較して4倍の高速化を実現した。標準ダウンロードされるLlama.cppのコンパイル設定を変えているだけなので、もしかしたら最新版Llama.cppをダウンロード&コンパイルしたら、もっと高速化するかもしれない。
しかし… それ以前にハードウェア周りの設定が怪しいような気がする。実はIntel Arc A730Mを搭載したノートパソコンも使っているのだけれども、そちらはWindows環境でのCPU使用率90%で稼働すると、GPU温度は70度を超える。NVIDIA GPUではお馴染みの状況である。
しかし一方でArc 770は80%で稼働していても、GPU温度は60度未満… 冷却ファンも静かなものだ。どうもグラボ… GPUが本気モードになっていないような気がする。
ちなみにkun432さんのリンクで4bit量子化版をダウンロードしているのに、当方が確認できるところでは全41層である。そして彼は全43層だと説明している。モデルの層数はニューラルネットワークの層数だと記憶しているので、GPUの種類とは全く関係しない… ハズである。
だからRTX 4090との比較は、あくまで『ご参考』の範囲に留まる。いずれ機会があったら、当方のNVIDIA GPU環境でも試してみたい。(とはいえ全てオフロードできているのだから、当方のCPUオンリーとGPUありの性能差に層数が関係していることはないだろう)
なお4090はH100と同じく、最新のHopperアーキテクチャである。その計算能力には定評があり、kun432さんの爆速化報告も頷ける。ちなみにP40はPascal世代。つまりPasal (P100) - Volta (V100) - Turing (Quadra) - Ampere (A100) - Hopper (H100)と何世代も離れている。当方だとAmpereアーキテクチャのGeForce RTX 3080を保有しているが、これはノートパソコンに搭載されたGPUである。Intel Arc A770が登場したのは2022年だから、まあ4倍速でも個人的には十分に満足している。
なおP40はAbobe 4GだとかResizable Bar対応したマザーボードが必要とのことでASRock Z370を調達してUEFI設定を実施した。これらはIntel Arc 770 GPUでも必要だそうで、もしかしたら何かしら設定パラメータを追加で変更する必要が存在しているのかもしれない。
しめくくり
本格的な実機検証には程遠いけれども、とりあえず無事にIntel ARC GPUが動いてくれたことは嬉しい。NVIDIA TITAN XからTelsa P40に移行した時は、CPUとマザーボードの買い替えや設定作業で一か月近くを費やす羽目になった。それに比べると装着しただけで4倍速を出してくれていることは助かる。
それにしてもIntel ARC 770は手頃な価格で調達できるし、もう少し設定に関する情報が出回ってくれると助かる。今のところ何かあったら英語掲示板のRedditを頼りにせざるを得ないという状況である。
そんな訳で簡単ではあるけれども、まずは実機で他人様がやっていることの真似をしてみた。少しでもお役に立つことがあれば幸いである。
それでは今回は、この辺で。ではまた。
------
記事作成:小野谷静(オノセー)