Ubuntu日和

【第91回】30万円のRadeon AI PRO R9700自腹購入!LLMにアプリを作らせて気づいた真実

PCに内蔵されるSAPPHIRE AMD Radeon AI PRO R9700 32GB GDDR6 LITE

 筆者がなぜ30万円近くかけてRadeon AI Pro R9700を買ってしまったのか、順にお話していこう。

 筆者は、本誌の担当編集である劉デスクを始めほかの多くの人と同じく、LLMにアプリを作らせるのにハマっている。現在もいくつか並行して開発させている。

 主に開発に使用していたのはAMD Radeon RX 9070 XT Challenger 16GBであり、型番からも分かる通りVRAMは16GBである。これに適したモデルはいろいろ試した結果Qwen 3.6 27B Q3_K_Mであると現状認識している。Qwen 3.8 27Bは執筆段階では未リリースだ。

 このモデルを指定し、コンテキストサイズを65,536にしてllama.cppを起動すると、おおむね16GBを使い切ってしまう。

 ここで話は変わり、現在筆者が作成させているアプリについて聞いてほしい。

 EasySSHというsshクライアントのGUIフロントエンドがあり、これを利用している。接続先が多数登録できて大変便利に使用しているのだが、開発が事実上停止してしまっているという問題がある。

 メンテナンスされていないアプリを使い続けるわけにはいかないので、何かほかのアプリ、たとえばUbuntuでも使用できるRemminaに乗り換えるべきである。しかし接続先の設定が膨大にあり、改めての再設定が非常に大変だ。

 であれば、EasySSHの設定(JSONファイル)を活かして同じように振る舞うアプリを開発させればいいと思いついた。

 プログラム言語はPython、GUIはUbuntuでもよく使われているPyGObjectにし、あとはとにかく既存の設定を活かすようにして作ってもらった。名称は「EasySSH-Easy」とした。以下が起動直後の画面である。

開発中のEasySSH-Easy。現段階の完成度は8割くらい

 接続は可能だが、左上にある「切断」をクリックしても切断できないという不具合があった。深く考えさせるとコンテキスト不足となり、この不具合を解決できない。

 解決させるとしたら、より小さなモデルにしてコンテキストサイズを大きくするか、あるいはより大きなVRAMを持つビデオカードに買い替えるしかない。今回は後者を選択することにした。

 Radeon AI Pro R9700はほかのビデオカードと比較すると相対的に(あくまで相対的に)値上げの影響を受けておらず、30万円未満で買えるため、筆者の財力でもまだギリギリ購入できる。もっと前に決断していればもっと安く買えたのだが、買っても活用できるか不安だったのである。幸か不幸か、活用できる目処が立ったというわけだ。

 どこのメーカーの製品にするかは迷ったが、XFX RX-97XPROAIYは価格的に魅力的だったものの、この価格で2年保証は心許ない。

 GIGABYTE Radeon AI PRO R9700 AI TOP 32Gは代理店による4年保証があり、かつHDMIポートもあるので筆者の用途にぴったりだったのだが、タッチの差で購入できなかった。おそらく今後30万円以下で買えることはないだろう。

 結局購入したのはSAPPHIRE AMD Radeon AI PRO R9700 32GB GDDR6 LITEとなった。代理店による3年保証がついている。

 さらに電力供給は12V-2x6ということで、現在使用している電源ユニットは対応していない。PCIeのコネクタに変換するケーブルもついているが、ほかの理由もあってKRPW-GA850W/90+/REV2.0を購入した。12V-2x6ケーブルは600Wまで対応とのことだが、最大でもその半分しか流さないので万が一にも燃えることはないであろう。

 こういった経緯でうちにRadeon AI Pro R9700がやってきた。

 今回使用するPCのスペックは次の通りだ。要するに筆者のテスト環境である。

メーカー型番備考
CPUAMDRyzen 7 7950X-
マザーボードMSIMPG B850I EDGE TI WIFI-
メモリーCrucialCP2K32G56C46U564GB
ビデオカードSAPPHIREAMD Radeon AI PRO R9700 32GB GDDR6 LITE-
SSDCrucialCT500MX500SSD1500GB
ホットスワップケースSilverStoneSST-FS202B-
CPUクーラーDeepCoolAK620-
ケースファンARCTICP12 MAX実質CPUファンとして使用
電源ユニット玄人志向KRPW-GA850W/90+/REV2.0-
PCケースSilverStoneSUGO 14--

VulkanかROCmか

 Radeonを購入して気になるのは、llama.cppでVulkanバックエンドを仕様すべきか、ROCmバックエンドを使用すべきかということだろう。筆者だけかもしれないが。

 現在llama.cppのリリースページを見ると、Vulkan、ROCm両方のバイナリが置かれている。しかし後者はなぜかCPUバックエンドで動作してしまう。ROCm用のllama.cppのビルド済みライブラリはLemonadeのリポジトリからダウンロードするのがおすすめだ。Radeon AI Pro R9700もRadeon RX 9070 XTも「llama-b*-ubuntu-rocm-gfx120X-x64.zip」をダウンロードするといい。実行ファイルには実行権限がないので、その点は注意である。

 というわけで軽くベンチマークを取ってみた。

ROCmでの結果
Vulkanでの結果

 pp512とtg128のどちらを重視するかにもよるが、後者が速いVulkanでよさそうだ。

 今回使用しないモデルではあるが、Run Meta’s Muse Glimmer 30B on AMD Ryzen AI Max+ Agentic PCs and Radeon GPUsというブログ記事をAMDが公開しており、「Run Meta’s Muse Glimmer 30B Locally, Today」と題する画像(スライド)をよく読んでみると、小さい文字でWindows上のVulkanでテストしたことが分かる。AMDはROCm第一主義というわけでもないらしい。

不具合は修正できたのか

 EasySSH-Easyで切断できない不具合が修正できないというのがRadeon AI Pro R9700を購入したきっかけであった。早速実行してみたところ、無事に解決できた。めでたしめでたし。

 何が問題になっていたのか、元のコードを見てみたらこのようになっていた。

# 第1段階: Ctrl+C (SIGINT) を送信してSSHに終了を通知
self.terminal.feed_child(bytes([3]))  # Ctrl+C = ASCII 0x03

 Ctrl+Cはいくら送っても終了できない。通常は改行として扱われるからだ。終了したければCtrl+Dを送る必要がある。このあたりはQ4_K_MかQ3_K_Mかどちらの方式で量子化したのかの差が出たのかもしれない。本稿を執筆するためにコードを確認したのだが、以前に確認はしなかった。もし確認していれば、この過ちに気づいて修正を指示できたかもしれない。

もう少し速くならないか

 Radeon RX 9070 XTとRadeon AI Pro R9700は、速度的にはあまり変わりがない。メモリーの容量が2倍になって価格が3倍になった感じだ。世の中なかなかに世知辛い。

 したがってllama-serverの起動オプションもRadeon RX 9070 XTとRadeon AI Pro R9700であまり変えていなかったのだが、もう少し速くならないかとオプションについてQwen 3.6 27Bに相談してみた。

 もともとはこうであった。

./llama-server -m ~/Downloads/Qwen3.6-27B-Q4_K_M.gguf  --port 8080 --temp 0.7 \
 --top-p 0.8 --top-k 20 --min-p 0.00 --presence_penalty 1.5 --reasoning on \
  --no-warmup --load-mode none --fit on --ctx-size 262144 \
  --reasoning-preserve --spec-type draft-mtp --spec-draft-n-max 2

 これでとある問い合わせをかけてみると、次のような速度であった。

17.57.264.426 I slot print_timing: id  0 | task 1028 | prompt eval time =    1890.30 ms /   239 tokens (    7.91 ms per token,   126.43 tokens per second)
17.57.264.429 I slot print_timing: id  0 | task 1028 |        eval time =  282431.08 ms /  2403 tokens (  117.53 ms per token,     8.51 tokens per second)

 8.51tok/sはちょっと遅いように感じられる。

 提案されたオプションは次の通りだ。

./llama-server -m ~/Downloads/Qwen3.6-27B-Q4_K_M.gguf --port 8080 \
  --temp 0.7 --top-p 0.8 --top-k 20 --min-p 0.00 --presence_penalty 1.5 \
  --reasoning on --reasoning-preserve --no-warmup --load-mode none --fit on \
  --ctx-size 262144 -ngl 99 --flash-attn on -b 16384 -ub 2048 \
  --cache-type-k q4_0 --cache-type-v q4_0 --spec-type draft-mtp --spec-draft-n-max 3 \
  --spec-draft-p-min 0.5 -t $(nproc)

 実際には有効ではないオプションも含まれているが、それはさておき同じ問い合わせをかけてみると次のような速度となった。

4.08.177.958 I slot print_timing: id  2 | task 87 | prompt eval time =     395.68 ms /   239 tokens (    1.66 ms per token,   604.03 tokens per second)
4.08.177.962 I slot print_timing: id  2 | task 87 |        eval time =  169968.49 ms /  4186 tokens (   40.60 ms per token,    24.63 tokens per second)

 なんと、8.51tok/sから24.63tok/sへと3倍近い速度になった。そしてVRAMの使用量も削減されたのである。

最初のオプションでのメモリー使用量は31.91GB
改善したオプションでのメモリー消費量は27.97GB。ここまで少なくなるとは

 ということは、Radeon RX 9070 XTでも同じようなオプションにすれば使用メモリーが削減でき、コンテキストサイズも多く設定できるはずである。実際やってみたところその通りとなり、コンテキスト不足で回答できなかった質問に答えることができた。もしかしたらRadeon AI Pro R9700を購入する必要はなかったのかもしれない。実際には先程にもあるように量子化の方法やほかのもっと大きなモデルも動かせるようになるなどのメリットもある。メモリの余裕は心の余裕なのだ。懐の余裕はなくなったが。