【CUDA 16GB向け】llama.cpp: 16GB GPU向けKV量子化・Flash-Attention修正・MMQ最適化で推論性能と安定性を向上

ローカルLLMCUDA量子化LLM最適化GPU

目次
  1. 今回の要点
  2. Flash-AttentionのKV量子化対応とグラフ起動最適化
  3. Flash-Attentionの共有メモリWARハザード修正
  4. MMQのStream-K制限とWarpアライメント修正
  5. llama-serverのSWAチェックポイント無効化ロジック修正
  6. 16GB GPU向け新量子化モデルの公開
  7. 出典

llama.cpp は ggml-org が開発する C/C++ の LLM 推論エンジン。GGUF 形式の量子化モデルを CPU/GPU で動かす。

今回の要点

  • VRAM効率化: Flash-AttentionのKVキャッシュに量子化(q8_0)対応し、16GB GPUでの大規模モデル推論を可能にする。
  • 推論精度の保証: Flash-Attentionの共有メモリ競合(WARハザード)を修正し、出力の正確性を確保した。
  • 処理速度の改善: Stream-Kのブロック制限とWarpアライメントを修正し、量子化行列乗算のオーバーヘッドを低減した。
  • バグ修正: llama-serverのSWAチェックポイント復元ロジックを修正し、プロンプト混同による誤動作を解消した。
  • 新モデル公開: 16GB VRAMに適合する混合精度量子化モデル「Qwen3.8-Flash-Next GSQ RCO GGUF」が公開された。

Flash-AttentionのKV量子化対応とグラフ起動最適化

llama.cppのCUDA Flash-Attention tile kernelにおいて、KVキャッシュの量子化形式が拡張された。これにより、VRAM使用量が削減され、16GB GPUでもより大きなモデルを扱えるようになる。

具体的には、Valueキャッシュにq8_0、Keyキャッシュにf16を使用する形式がネイティブサポートされた(PR #30792)。これにより、Qwen3.6-35BやQwen3.8-27Bといった大規模モデルを16GB GPUで推論する際のVRAM効率化が図られる。また、NVFP4量子化モデルにおける計算オーバーヘッドを低減するため、小規模キーに対するNVFP4 MMVQ演算でlane-packed rowsが採用された(PR #30788)。BlackwellやRTX 50シリーズの16GBモデルにも関連する最適化である。さらに、NVIDIA GPUのTensor Core (sm_80以降) を搭載する環境において、Q5_K量子化モデルの性能向上のためMMAが利用され、Stream-K fixupが最適化された(PR [cuda-mma-q5])。

長文コンテキスト推論において、CUDAグラフの起動オーバーヘッドを低減するため、グラフ起動をより小さなチャンクに分割する最適化が行われた(PR [cuda-graphs])。これにより、グラフ初期化に伴うペナルティが軽減される。

Flash-Attentionの共有メモリWARハザード修正

Flash-Attentionの実装において、共有メモリ内のデータ競合(Write-After-Read hazard)が修正された。これにより、KVループでの推論結果の正確性が保証される。

従来、KVループは反復間で共有KQバッファを再利用していたが、スコアの書き込みとV蓄積のための読み込みの間にwarp barrierが存在しても、次の反復で上書きする前に同期が取れていなかった(PR #30573)。ループの末尾に ggml_cuda_syncwarp() を追加することで、どのlaneもスロットを上書きする前に読み込みを完了するよう修正された。これは書き込みwarp内の読み込みに限定されるため、warp barrierで十分である。

この修正により、Compute-sanitizerが報告していた800万以上のWAR警告がゼロとなった(PR #30573)。また、3993件の完全なFlash-Attention Ext正確性テストスイートすべてがパスした。RTX 3090 (sm_86) および NVIDIA driver 610.43.03 環境でのテスト結果であり、修正前後で38件の選択された正確性テストもすべてパスしている(PR #30573)。

利用者の報告

RTX 3090 (sm_86) および NVIDIA driver 610.43.03 の環境で、Compute-sanitizerによるWAR警告が修正前8007424件から修正後ゼロ件になったという報告がある。また、3993/3993件の正確性テストがパスしたという報告がある (PR #30573)。

MMQのStream-K制限とWarpアライメント修正

量子化行列乗算(MMQ)におけるStream-Kの実装と、Warpサイズのアライメントが修正された。これにより、メモリアクセスの正しさとブロック制限が守られ、クラッシュやパフォーマンス劣化が防止される。

Stream-Kは、利用可能なK作業ユニット数よりも多くのCUDAブロックを起動できるため、空のブロックが起動オーバーヘッドを追加し、fixupカーネルのバックワードスキャンを長引かせていた(PR #30553)。この問題に対し、MMQグリッドを総出力タイル/Kブロック作業数と総計算反復数で制限する修正が行われた。また、DP4A MMQのタイル高さがWarpサイズ(32)の倍数であることを強制する修正も含まれる(PR [cuda-dp4a])。さらに、wave64デバイスにおいてタイル幅が64で割り切れない場合に発生するバグが修正された(PR [cuda-wave64-fix])。

これらの修正により、量子化行列乗算のメモリアクセスパターンが正しく保証され、NVIDIA GPUでの安定した動作が期待できる。

利用者の報告

RTX 5090 環境において、修正後の公式により test-backend-ops の MUL_MAT および MUL_MAT_ID がパスしたという報告がある (PR #30553)。また、フルモデル測定において、RTX 5090 (1台) のPrefillフェーズで2030.61 tok/s から 2033.75 tok/s (+0.15%)、6台のTGフェーズで215.21 tok/s から 224.79 tok/s (+4.47%) の改善が確認されたという報告がある (PR #30553)。

llama-serverのSWAチェックポイント無効化ロジック修正

llama-serverにおいて、以前の無関係なプロンプトから保存されたSWA(Sliding Window Attention)チェックポイントを誤って復元するバグが修正された。これにより、推論の安定性が向上する。

Flash Attention with sliding window (SWA) を使用するすべてのバックエンドに影響する。修正前、異なるプロンプト処理中に保存されたチェックポイントが、別の文脈で復元されてしまう問題があった (PR #30666)。修正により、A/Bテストケースで失敗していた箇所が正常に動作するようになり、チェックポイントの無効化ロジックが正しく機能するようになった。

利用者の報告

修正前には失敗し、修正後に正常に動作するA/Bテストケースが確認されたという報告がある (PR #30666)。

16GB GPU向け新量子化モデルの公開

16GB VRAMのGPU向けに最適化された混合精度量子化モデルがHugging Faceに公開された。

ISTA-DASLabのQwen3.8-27B-GSQファミリーから派生した「Qwen3.8-Flash-Next GSQ RCO GGUF」が公開された (HF: Qwen3.8-Flash-Next-GSQ-RCO-GGUF)。これは混合精度量子化(IQ3_S 2-part split)を採用しており、gsq、rco、quantization、mixed-precisionのタグが付いている。また、bartowskiにより公開されたInternScience_MLExpert-GGUFでは、Q3_K_Mが16.2GBと16GBをわずかに超える一方、Q3_K_Sが15.2GBで単一GPUに適合する (HF: bartowski/InternScience_MLExpert-GGUF)。

出典

【宣伝】SwitchBot 購入はこちらから

SwitchBot公式ページ
クーポン「AF-4903」で5%引き(アフィリエイトクーポンになりますのでご協力お願いします)
割引の詳しい仕組みに関してはこちらのページを参照ください。