7月25日、Giles Thomasが「Benchmarking Qwen 3.6 35B MoE (3B active) on an RTX 3090」と題した記事を公開した。RTX 3090(VRAM 24GB)上でQwen 3.6 35B MoEモデルを動かし、VulkanとCUDAそれぞれの構成でベンチマークを取った結果だ。CUDA版で140 tok/sという実用的なスループットが出た一方、「MoEだからVRAMが少なくて済む」という誤解を丁寧に解説している点も読みどころになっている。
結論から:CUDA版で140 tok/s、Vulkan版で120 tok/s
使用モデルはUnsloth配布のUD-IQ4_NL_XL量子化版(Hugging Face上で公開)。llama.cppを使って実行した。
Vulkan版(ArchのOSパッケージ)での結果:
| 構成 | 生成速度 | プロンプト処理速度 | コンテキスト長 |
|---|---|---|---|
| GPU全載せ | 120 tok/s | 2,800 tok/s | 約50,000トークン |
| FFN 12層をCPUオフロード | 65 tok/s | 600 tok/s | フル262,144トークン |
CUDA版(自前でコンパイル)での結果:
| 構成 | 生成速度 | プロンプト処理速度 | コンテキスト長 |
|---|---|---|---|
| GPU全載せ | 140 tok/s | 3,300 tok/s | 89,600トークン |
| FFN 10層をCPUオフロード | 89 tok/s | 1,100 tok/s | フル262,144トークン |
CUDA版はVulkan版と比較して、生成速度・プロンプト処理速度ともに全体的に上回った。特にCPUオフロードあり構成でのプロンプト処理速度が600 tok/s→1,100 tok/sと大きく改善している。
VRAM 24GBの壁
モデルのメモリフットプリント
Qwen3.6-35B-A3Bは総パラメータ35B、アクティブパラメータ3BのMoE(Mixture of Experts)モデルだ。BF16(2バイト/パラメータ)フルモデルは約70GiBになるため、RTX 3090の24GB VRAMに収めるには量子化が必須になる。
4ビット量子化で単純計算すると35B × 0.5バイト = 約17.5GiBになり、残り6.5GiBをアテンション行列や中間バッファに使えるはず——というのが当初の見込みだった。しかし実際にはもう少し余裕が必要で、コンテキスト長を最大の262,144トークンに確保しようとするとVRAMが足りず、一部のFFN層をCPU側RAMにオフロードする必要があった。
MoEは「計算量」を節約するのであって「メモリ」を節約するわけではない
MoEモデルについて、記事内では重要な点を指摘している。「アクティブパラメータが少ない=VRAMも少なくて済む」と思いがちだが、それは誤りだ。例えば「The fat cat sat on the」という6トークンのプロンプトを処理する場合、全トークンが並列処理されるため、各層で複数のエキスパートが同時に必要になる。非トリビアルなプロンプトでは非アクティブなエキスパートをVRAMから追い出すことはできず、MoEが節約するのは「計算量」であって「メモリ使用量」ではない。
埋め込み層のオーバーヘッド
さらに興味深い点として、Qwen3.6は埋め込み層と出力ヘッドの語彙サイズが248,320、埋め込み次元が2,048で、ウェイトタイイングを使用していない。このため埋め込み層と出力ヘッドだけで各約5億パラメータ、合計でアクティブ3Bのうち1B以上が入出力だけに消費されるという構造になっている。
Vulkan vs CUDA:なぜArch版はVulkanなのか
Arch Linuxでsudo pacman -S llama-cpp ggml cudaとインストールしたにもかかわらず、実行時にdevice Vulkan0 does not support split buffersというエラーが出た。調査するとArch WikiのLlama.cppページはVulkanバックエンドのパッケージを案内しており、CUDAバックエンドのAURパッケージはメンテナ不在で長期間更新が止まっていた。
Arch WikiのトークページではユーザーSH3NG1UNが「Vulkanはゲーミング対応ハードウェアなら動く汎用解であり、エッジAIはそうあるべき」と説明している。合理的な判断ではあるが、パフォーマンスの面ではCUDAに軍配が上がった。
また昨今AURでは管理放棄パッケージを悪意ある第三者が引き継いでSSHキーや暗号資産ウォレットを窃取するコードを仕込む事案が相次いでいることから、Giles ThomasはAURパッケージを使わずソースからCUDA版を自前コンパイルするという判断を下した。
Intel Arc B70 Proとの比較
記事では友人がIntel Arc B70 Pro(VRAM 32GB)で同モデルを動かした結果も触れている。
It starts off at 75-80, but drops into the high 50s as the context window expands
32GBあるためコンテキスト長の削減なしにフル量子化モデルを載せられるが、スループットはコンテキストウィンドウが広がるにつれて高50台tok/sまで低下するという。RTX 3090のCUDA+オフロード構成(89 tok/s)より数字上は見劣りするが、テスト条件(プロンプト2,457トークン、生成6,144トークン)が異なるため単純比較はできない。
なお、VRAMが32GBかつNvidiaの高速処理を持つRTX 5090であれば状況は大幅に改善されるはずだが、価格はRTX 3090の3倍以上になる。
補足:マルチモーダルコンポーネントについて
Qwen3.6はマルチモーダルモデルであり、画像入力をトークンにマッピングする追加コンポーネントを持つ。テキストのみで使う場合は--no-mmprojオプションで無効化できる。これによりVRAMを節約でき、コンテキスト長の改善や速度向上が期待できる可能性がある。Giles Thomas自身はベンチマーク実施後にこの点に気づいたと書いており、テキスト専用用途では試す価値がある選択肢として紹介している。
詳細はBenchmarking Qwen 3.6 35B MoE (3B active) on an RTX 3090を参照していただきたい。