Ubuntu Weekly Recipe

第891回ミドルレンジのグラフィックボードで生成AI入門

今回は、グラフォックボードとしてミドルレンジのGeForce RTX 5060 TiとRadeon RX 9060 XTでllama.cppを使用する方法を紹介します。

ローカルLLM冬の時代へ

現在、メモリー(DRAM)の価格が需要逼迫により上昇しています。SSD(NAND)やHDDも値上げしています。そして次に値上がりするのは、おそらくグラフィックボードです。なぜならメモリー(VRAM)を積んでいるからです。原因は世界中に多くのAIデータセンターが建設されているからだといわれています。

この「AI需要による品不足」は、当面続くといわれています。2年くらいは覚悟しておいたほうがいいでしょう。まだ大手メーカー製PCまでは波及していないので、2年以内にPCを新調する予定がある場合は、速やかに購入してもいいかもしれません。

ただし、今はまだグラフィックボードが品不足というところまではいってません。それがいつまで続くのか、年内までなのか、来年3月までなのかはわかりません。ただ、当面は価格が上がり続けることは概ね確実なので、2年以内にグラフィックボードを新調する予定があるのであれば、今のうちに購入しておくのがいいでしょう。

ローエンドのグラフィックボードに関しては第872回で紹介しました。第868回ではミドルレンジGPUであるRadeon RX 9060 XTを紹介しました。当初は全く予定になかったのですが、このたびGeForce RTX 5060 Ti 16G VENTUS 2X OC PLUSを購入しました。

ミドルレンジGPUのメリット

Radeon RX 9060 XTもGeForce RTX 5060 Tiもミドルレンジではありますが、より細かくはミドルローに分類されます。ミドルハイはRadeon RX 9070シリーズやGeForce RTX 5070シリーズですが、実のところミドルローのほうがおすすめです。理由としては次のとおりです。

まず、手が出しやすい価格であることです。Radeon RX 9060 XTのVRAM 16GBモデルは最安値だと本稿の公開時点で5万円ちょっとです。GeForce RTX 5060 TiのVRAM 16GBモデルは7万円を若干超えるくらいです。ミドルハイになると、Radeon RX 9070 XTで9万円以上、GeForce RTX 5070 Tiで13万円弱と、一気にハードルが上がります。

価格が控えめで性能も控えめだと、大きさと発熱と消費電力も控えめです。第841回で紹介したように、うちにはミドルハイのRadeon RX 7800 XTがありますが、発熱が多くて検証用PCだと熱暴走してしまうので、排熱に力を入れた専用のPCを用意する必要がありました。一方Radeon RX 9060 XTであれば、第868回で紹介したようにDeskMeet X300で延々と負荷をかけ続けても排熱が問題になったりはしませんでした。扱いやすい、というのはとても重要な要素です。

VRAMも8GBでは足りず、16GBでも充分ではありませんが、それでもかなり多くのことができます。

今回使用するPC

今回使用する検証用PCは次のとおりです。

メーカー 型番 備考
CPU AMD Ryzen 7 9700X
メモリー Crucial CP2K32G56C46U5 64GB
マザーボード MSI PRO B850M-A WIFI
CPUファン ID-COOLING IS-67-XT ファンはP12 PWM PSTに交換
グラフィックボード1 MSI GeForce RTX 5060 Ti 16G VENTUS 2X OC PLUS
グラフィックボード2ビデオカード2 玄人志向 RD-RX9060XT-E16GB/DF
SSD1 MSI SPATIUM S270 SATA 2.5" 960GB
SSD2 Crucial CT500MX500SSD1
リムーバブルケース Silver Stone SST-FS202
電源ユニット Silver Stone SST-SX750-G
ケース Silver Stone SST-SG11B

最近マザーボードを入れ替えたことにより、PCIe 5.0にネイティブで対応しました。SSDはグラフィックボードごとに分けています。

なおセキュアブートはオフにしています。

インストールするUbuntuのバージョンは24.04.3 LTSです。

GeForce RTX 5060 Tiに必要なパッケージをインストールする

ではGeForce RTX 5060 TiをUbuntuで使えるようにしていきます。とはいえ例として取り上げるのはGeForce RTX 5060 Tiではあるものの、5000シリーズであれば同じ設定で使用できるはずではあります。

筆者は今まで古いGeForceしか使ってこなかったので知らなかったのですが、最新のGeForce 5000シリーズではオープンソース版のカーネルモジュールを使用する必要があります。以前GeForce 3000シリーズでオープンソース版のカーネルモジュールを使用して画面が正しく出力されなくなって以来、⁠追加のドライバー」で検証済みになっていても避けていたのですが、今は逆のようです。

したがって今回はnvidia-driver-580-openを使用しています図1⁠。

図1 新しいグラフィックボードでは「-open」付きを選択する

またXセッションではディスプレイの検出に失敗するのか、解像度が1024x768ドットになったので、Waylandセッションにしています。

Ubuntu 24.04 LTSのリポジトリにはCUDAのバージョン12.0がありますが、GeForce 5000シリーズでは古すぎて使用できません。よってNVIDIAから12.8以降を取得する必要があります。本稿の公開時点での最新版は13.1なので、これをインストールします。CUDAツールキットとランタイムのUbuntuリポジトリ経由での配布という話は一体どこに行ったのでしょうか。

それはさておき、次のコマンドを実行してください。

$ ~/Downloads/
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
$ sudo apt install ./cuda-keyring_1.1-1_all.deb 
$ sudo apt update 
$ sudo apt install cuda-toolkit-13-1

あくまで~/Downloadsがある向けのコマンドなので、ない場合は適宜調整してください。

再起動後、正しくCUDAがインストールされているかどうかはnvidia-smiコマンドでわかります。

Radeon RX 9060 XTに必要なパッケージをインストールする

Radeon RX 9060 XTをUbuntuで使えるようにしていきます。

基本的には第872回と同じですが、今回はカーネルを6.14のままとします。よって必要なのはROCmのインストールだけです。

$ wget https://repo.radeon.com/amdgpu-install/7.1.1/ubuntu/noble/amdgpu-install_7.1.1.70101-1_all.deb
$ sudo apt install -y ./amdgpu-install_7.1.1.70101-1_all.deb
$ sudo apt update
$ sudo apt install python3-setuptools python3-wheel
$ sudo usermod -a -G render,video $LOGNAME
$ sudo apt install -y rocm amdgpu-dkms

ここで再起動します。

再起動後、正しくROCmがインストールされているかどうかはrocminfoコマンドでわかります。

llama.cppをビルドする

LLMを動かすのにどのエンジンを使うかは悩ましいところですが、今回は第872回と同じllama.cppとします。LM Studioのバックエンドとしても使用されていますが、LM Studioはクローズドソースなので筆者としてはオープンソースのllama.cppにこだわりたいところです。

ただしllama.cppは開発が活発で、最新版だとしばしば問題が起こっています。2つのフォルダーにgit cloneしておいて、確実に動作するバージョンと最新版を用意しておくのがおすすめです。今回はコミット67788f6で検証しました。

準備

ではllama.cppのビルドに移ります。まずは準備として次のコマンドを実行してください。

$ sudo apt install -y git git-lfs cmake g++ libcurlpp-dev
$ mkdir ~/git
$ cd ~/git
$ git clone  https://github.com/ggml-org/llama.cpp.git
$ cd llama.cpp

Vulkan版のビルド

GeForceとRadeonで共通して使用できる、Vulkan版をビルドします。同じ条件での速度の比較を意図しています。次のコマンドを実行してください。

$ sudo apt install libvulkan-dev glslc
$ cmake -B build-vulkan -DGGML_VULKAN=ON
$ cmake --build build-vulkan --config Release -j 16

CUDA版のビルド

CUDA版は次のコマンドを実行してビルドします。

$ CUDACXX=/usr/local/cuda-13.1/bin/nvcc cmake -B build-cuda -DGGML_CUDA=ON
$ cmake --build build-cuda --config Release -j 16

ROCm版のビルド

ROCm版は次のコマンドを実行してビルドします。

$ HIPCXX="$(hipconfig -l)/clang" HIP_PATH="$(hipconfig -R)" cmake -S . -B build-rocm -DGGML_HIP=ON -DGPU_TARGETS=gfx1200 -DCMAKE_BUILD_TYPE=Release 
$ cmake --build build-rocm --config Release -j 16

ベンチマーク

ビルドしたllama.cppでベンチマークを計測しました。使用したモデルはgpt-oss-120b-GGUFです。

次のコマンドを実行しました。

$ ./build-vulkan/bin/llama-cli -m ~/Downloads/gpt-oss-120b-Q4_K_M-00001-of-00002.gguf -p "偏りのないコインを表が出るまで投げ続け、表が出たときに、賞金をもらえるゲームがあるとする。もらえる賞金は、1回目に表が出たら1円、1 回目は裏が出て2回目に表が出たら倍の2円、2回目まで裏が出ていて3回目に初めて表が出たらそのまた倍の4円、3回目まで裏が出ていて4回 目に初めて表が出たらそのまた倍の8円、というふうに倍々で増える賞金がもらえるというゲームである。ここで、このゲームには参加費( =賭け金)が必要であるとしたら、参加費の金額が何円までなら払っても損ではないと言えるだろうか。" -no-cnv --n-gpu-layers 99 --n-cpu-moe 28

「build-vulkan」のところは適宜変更しています。

表にしてまとめると次のようになりました。単位はトークン/秒です。

GPU バックエンド プロンプト 結果
GeForce RTX 5060 Ti Vulkan 59.42 27.78
GeForce RTX 5060 Ti CUDA 132.51 30.71
Radeon RX 9060 XT Vulkan 65.74 25.07
Radeon RX 9060 XT ROCm 84.32 25.71

CUDAはダントツの速度を叩き出しています。ROCmはもう少し速度が出てもよさそうな気がしますが、llama.cppの最適化が進んでいないということでしょう。それを含めてCUDAのエコシステムの強さを改めて思い知ります。

llama-server

llama.cppにはサーバー機能があります。OpenAI互換のAPIもあり、ほかのアプリのバックエンドとして使用できます。また単独でもWebサーバー機能があります。

例として、次のコマンドでサーバーを起動します。

$ ./build-cuda/bin/llama-server -m ~/Downloads/gpt-oss-120b-Q4_K_M-00001-of-00002.gguf --ctx-size 0 --jinja -ub 4096 -b 4096 -ngl 99 --n-cpu-moe 34 --host 0.0.0.0 --port 8080 --chat-template-kwargs '{"reasoning_effort": "medium"}' --temp 1.0 --top-p 1.0

細かいオプションの説明をしだすとキリがないので省略しますが、--n-cpu-moeの値がベンチマークのときより増加しています。これはベンチマークと同じ値だとメモリー不足でサーバーが起動しないからで、この値を増やすとGPUへの負荷が減ります。ということはその分CPUの負荷が増えるということであり、処理が遅くなります。

Firefoxを起動し、--portの値(今回は8080)でアクセスするとWeb UIが起動します図2⁠。

図2 llama-serverにFirefoxからアクセスしているところ

実際に動作させると、右下のとおり「24.1 token/s」となっており、ベンチマークのときよりも遅くなっています。とはいえ、個人的には充分に実用レベルの速度だと考えています。

おすすめ記事

記事・ニュース一覧