Qwen3 Coder Next llama.cppグラフ最適化 — 最大38%の推論高速化

Qwen3 Coder Next llama.cppグラフ最適化 — 最大38%の推論高速化

ggerganovがllama.cppのコンピュートグラフを再構成し、Qwen3 Coder Next 80Bモデルの推論速度を最大38%向上させた最適化手法とベンチマーク結果を解析します。

概要

llama.cppのコア開発者ggerganovが、Qwen3 Coder Nextモデルのコンピュートグラフを最適化するPR #19375を公開しました。不要なテンソルコピー演算を排除し、グラフレベルで推論パスを再構成することで、M2 Ultraで最大38%DGX Sparkで最大38%の速度向上を実現しています。Reddit r/LocalLLaMAで177ポイント以上の大きな注目を集めたこの最適化の核心を見ていきましょう。

核心アイデア:グラフレベル最適化

今回の最適化の核心はシンプルです。ggmlコンピュートグラフから不要なテンソルコピー演算を除去することです。

MoE(Mixture of Experts)アーキテクチャであるQwen3 Coder Nextは、ルーターがアクティベートするエキスパートを選択し、各エキスパートの出力を結合する過程で多くの中間テンソルコピーが発生します。従来の実装ではこれらのコピーが安全性のために過度に挿入されていましたが、ggerganovは実際に必要なコピーだけを残し、残りを排除しました。

graph LR
    A[入力テンソル] --> B[ルーター]
    B --> C[Expert 1]
    B --> D[Expert 2]
    B --> E[Expert 3]
    C --> F[出力結合]
    D --> F
    E --> F
    F --> G[次のレイヤー]

    style A fill:#00B4D8,color:#fff
    style F fill:#FFB703,color:#000
    style G fill:#00B4D8,color:#fff

ベンチマーク結果

M2 Ultra性能比較

Qwen3 Coder Next 80B.A3Bモデルを様々な量子化レベルでテストした結果です。

Q4_0量子化

テスト従来 (t/s)最適化 (t/s)速度向上
pp1(単一トークン)37.9251.991.37x
pp8(8トークンバッチ)137.75176.361.28x
pp512(プロンプト)930.701125.731.21x
pp2048(長文プロンプト)1049.911352.311.29x
tg32(生成)38.0250.391.33x

Q4_K_M量子化

テスト従来 (t/s)最適化 (t/s)速度向上
pp134.0046.471.37x
pp2048977.301232.471.26x
tg3234.6346.431.34x

Q8_0量子化

テスト従来 (t/s)最適化 (t/s)速度向上
pp134.3843.981.28x
pp20481047.391338.821.28x
tg3233.7543.781.30x

DGX Spark性能比較

NVIDIA DGX Sparkでも有意な性能向上が確認されています。

量子化テスト従来 (t/s)最適化 (t/s)速度向上
Q4_0pp5121055.581161.671.10x
Q4_0pp20481059.001324.661.25x
Q4_0tg3243.1159.581.38x
Q8_0pp20481009.431246.611.23x
Q8_0tg3231.1339.681.27x

DGX Sparkのtg32(トークン生成)でQ4_0基準38%の速度向上を達成した点が注目に値します。

技術的背景:関連バックエンド最適化

このPRは単独で存在するものではありません。グラフ最適化が効果を発揮するには、各バックエンド(Metal、CUDA、Vulkan)で非連続(non-contiguous)テンソルを直接処理できる必要があります。

Metal(Apple Silicon)

  • 適応型CPU/GPUインターリーブ#19369):ノード数に応じたCPU/GPU作業の動的分配
  • バイナリカーネル統合#19390):重複カーネルコードの除去
  • ユニタリ演算統合#19490):単項演算処理の改善
  • 非連続テンソルL2正規化サポート#19502
  • 並行性改善#19555

CUDA(NVIDIA GPU)

  • 非連続テンソルPAD演算拡張#19429
  • CUDAグラフ有効化#19521):Qwen3 Nextスタイルアーキテクチャ用
  • 融合ADD グラフミューテーション防止#19566

Vulkan

  • L2_NORM連続行サポート#19604
  • GGML_OP_SETサポート#19584

注意点:BF16テンソル問題

一部のGGUFファイルで1次元BF16テンソルが誤って含まれている場合があります。これはMetalなどのバックエンドでパフォーマンス低下を引き起こします。#19606ffn_gate_inp_shexpテンソルをF32として保存するよう修正し、この問題を解決しています。

今後の予定

ggerganovは以降の追加最適化も予告しています。

  1. Qwen3ファミリーのコード重複除去#19597):delta-netグラフの共有
  2. ggml_build_forward_select()の活用:グラフを定数化してさらなる最適化余地を確保
  3. 専用delta net ggml演算の導入#19504):より効率的なカーネル実行

ローカルLLMユーザーへの影響

今回の最適化が意味するところをまとめます。

  • Apple Siliconユーザー:M2 Ultra基準で80B MoEモデルをtg32で約50 t/sで実行可能。リアルタイム対話に十分な速度です。
  • NVIDIA GPUユーザー:DGX Sparkでも20〜38%の速度向上。CUDAグラフサポートでさらなる最適化が期待されます。
  • 量子化の選択:Q4_0が最大の速度向上を示しますが、Q4_K_MとQ8_0でも一貫した20〜37%の改善が確認されています。
  • コード変更不要:llama.cppを最新バージョンに更新するだけで自動的に適用されます。

結論

ggerganovによる今回のグラフレベル最適化は、llama.cppのMoEモデル推論性能を大幅に向上させました。単にカーネルを最適化するのではなく、コンピュートグラフ自体を再構成するアプローチが印象的です。特に複数のバックエンド(Metal、CUDA、Vulkan)で非連続テンソルサポートを拡大する並行作業と組み合わせることで、ローカルLLM推論の性能限界を一段階引き上げています。

Qwen3 Coder Nextのような MoEモデルをローカルで実行しているユーザーは、llama.cppを最新バージョンに更新してこの性能向上をすぐに体感してみてください。

参考資料

他の言語で読む

この記事は役に立ちましたか?

より良いコンテンツを作成するための力になります。コーヒー一杯で応援してください!☕

著者について

JK

Kim Jangwook

AI/LLM専門フルスタック開発者

10年以上のWeb開発経験を活かし、AIエージェントシステム、LLMアプリケーション、自動化ソリューションを構築しています。Claude Code、MCP、RAGシステムの実践的な知見を共有します。