数字をそのまま読む:ROCmとVulkanの実測値

AMDのコンシューマー向けフラッグシップ、Radeon RX 6900 XT(RDNA 2世代、VRAM 16GB)を使ったllama.cppのバックエンド比較ベンチマークが、Redditコミュニティ「LocalLLaMA」に投稿された。実施者は/u/grumdで、ROCm 6.4.2と最新Vulkanをそれぞれ手動ビルドして測定している。Sourceが報告しているデータを、私なりに整理する。

測定対象は2モデル。Gemma 4 E2B Q4_K量子化と、Qwen 3.5 4B Q8_0量子化だ。指標はプリフィル速度(pp512、単位はトークン/秒)とトークン生成速度(tg128、同)、そしてubatch(マイクロバッチサイズ)を32から1024まで6段階で変化させている。

Gemma 4 E2B Q4_Kのプリフィル(pp512)から見ていく。ubatch=32ではROCmが1536.60 t/s、Vulkanが1423.49 t/sでROCmが約8%優位だ。ところがubatch=64になった瞬間、Vulkanが1930.60 t/sへ急伸し、ROCmの1590.65 t/sを約21%上回る。ubatch=128でも同様にVulkanが2998.42 t/sでROCMの2651.11 t/sを約13%リードする。しかしubatch=256でROCmが3653.19 t/sと逆転し、ubatch=512・1024ではほぼ拮抗(ROCm約3807 t/s、Vulkan約3950 t/s)する。プリフィルに関しては「どちらが速いか」はubatchサイズに強く依存するという結論だ。

Qwen 3.5 4B Q8_0のプリフィルはより鮮明な差を示す。全ubatch帯域でROCmがVulkanを大きく上回る。ubatch=64でROCm 1841.68 t/s対Vulkan 1323.46 t/s(約39%差)、ubatch=512でROCm 3023.75 t/s対Vulkan 2390.09 t/s(約27%差)。モデルアーキテクチャ・量子化形式の違いがバックエンド最適化の効き方に直接影響していることが数字から読み取れる。

トークン生成(tg128)ではVulkanが一貫優位

トークン生成速度(tg128)の結果は、プリフィルと対照的にシンプルだ。Gemma 4 E2B Q4_KではROCmが全ubatchで151.4〜151.9 t/s程度で横ばいなのに対し、Vulkanは173.3〜174.6 t/sで安定して推移する。差は約14〜15%で、ubatchサイズによる変動はほぼない。

Qwen 3.5 4B Q8_0のトークン生成でも構図は同じだ。ROCmが77.6〜77.97 t/s、Vulkanが88.46〜88.58 t/sで、Vulkanが約14%速い。こちらもubatch依存性はほぼ皆無で、バックエンドの違いが定常的な性能差として固定されている。

トークン生成はメモリ帯域律速の処理であり、計算カーネルの最適化よりもメモリアクセスパターンとドライバのオーバーヘッドが効いてくる領域だ。VulkanがROCmを約14%上回るという数字は、少なくともRDNA 2世代のコンシューマーGPUにおいて、AMDの公式コンピュートスタックであるROCmがVulkanパスに対してメモリ効率で劣後している可能性を示唆している。

ここで2018年のIntel 10nmの遅延問題と同じ構図を思い出す。Intelは「製造プロセスは順調」と言い続けたが、競合他社のファブレスモデルに実効性能で追い抜かれた。AMDのROCmも同様で、公式スタックであるはずのROCmが、汎用グラフィクスAPIであるVulkanに実行性能で負けるケースがある、という現実を今回の数字は突きつけている。ROCmのバージョンは6.4.2と比較的新しいが、コンシューマーGPU向けの最適化が追いついていないと推測される。

背景:ROCmとVulkanの設計思想の違い

ROCmはAMDが開発するオープンソースのGPUコンピュートプラットフォームで、CUDA対抗として設計されている。主な最適化ターゲットはデータセンター向けのInstinct(MI)シリーズであり、RX 6900 XTのようなコンシューマーGPUはいわば「サポートはするが優先度は低い」扱いだ。AMDの公式ドキュメントでも、ROCmの主要サポートリストはMIシリーズが中心で、RDNAコンシューマーカードは実験的サポートの位置づけにとどまる。

VulkanはKhronosグループが策定するクロスプラットフォームグラフィクス・コンピュートAPIで、llama.cppはVulkanコンピュートシェーダーを活用してGPU推論を実現している。Vulkanパスはコンシューマー向けGPUドライバとの親和性が高く、AMDのRadeonドライバも長年にわたってVulkanの最適化を積み重ねてきた。その蓄積が今回の数字に出ていると見ている。

ただし注意点もある。今回のデータは単一ユーザーによる単一環境での測定であり、OSバージョン、ドライバビルド、llama.cppのコミットハッシュ、CPUやメモリ構成などの詳細は投稿から確認できない。再現性の検証には追加データが必要だ。また、測定対象がGemma 4とQwen 3.5の2モデルのみであり、他のアーキテクチャ(LlamaやMistralベースなど)では結果が異なる可能性がある。

結論:「公式スタック」は必ずしも「最速」ではない

今回の実測データが示す結論は明快だ。RX 6900 XTにおいて、トークン生成速度ではVulkanがROCmを約14%上回り、プリフィル速度はモデルとubatchサイズによって優劣が入れ替わる。ROCmがQwen 3.5のプリフィルで強みを見せる一方、Gemma 4の中間ubatch帯ではVulkanに逆転される。どちらが「正解」かは用途次第であり、長文一括処理を重視するならモデルとubatch設定を見た上でROCmを選ぶ場面もある。トークン生成を重視するインタラクティブ用途ならVulkanの方が現状有利だ。

AMDはROCmを「CUDAキラー」として数年間売り込んできたが、コンシューマーGPU上でVulkanという汎用APIに推論速度で負けているというのは、マーケティングと現実の乖離を端的に示す事例にすぎない。ROCmの開発リソースがデータセンター向けに集中している以上、この状況が短期で変わるとは私は見ていない。