【CUDA 16GB向け】llama.cpp 10月第2週:MTP推論の安定化、NVFP4カーネル導入、FlashAttention修正
目次
この記事はAIによって編集・作成されています。
今回の要点
- MTP(Multi-Token Prediction)推論におけるドラフトモデルのKVキャッシュ処理不具合が修正され、CPUオフロードやレイヤ分割環境での動作が安定した。
- NVIDIAが策定するNVFP4およびMXFP4量子化形式のCUDAカーネルが統合され、16GB VRAM環境でも大規模モデルのロードと高速推論が可能になった。
- FlashAttentionのCUDA Graph対応とメモリ確保不具合が修正されたが、Windows環境では依然としてメモリアクセスエラーの報告がある。
- Qwen3.8 Flash NextがMTPと画像埋め込みをサポートし、多モーダル推論の選択肢が広がった。
- CUDA Graphのメモリ再割り当て回避最適化により、推論パイプラインの効率が改善された。
MTPドラフトモデルのKVキャッシュ処理不具合修正
前提
MTP(Multi-Token Prediction)は、小さなドラフトモデルが複数のトークンを予測し、メインモデルが検証することで推論速度を向上させる手法である。ドラフトモデルのKVキャッシュ(Key-Value Cache)管理は、推論の正確性と速度に直結する。
何が変わったか
バッチ推論時のドラフトモデルのKVキャッシュ処理、CPUオフロード環境でのKVキャッシュ動作、非連続なレイヤ分割時のMTP動作の3点について修正が行われた。
バッチ推論時の処理修正(PR #28673)により、Qwen3.6-35B-A3BのようなMTPドラフトモデルを使用する場合のスループットが改善された。
CPUオフロード環境での修正(PR #28624)により、ドラフトモデルのレイヤをCPUに配置し、KVキャッシュのみをGPUに保持する(–gpu-layers 0 + kv-cache-f16)設定で、MTPの推論が正しく行われるようになった。
非連続なレイヤ分割(–split-mode layers)での修正(PR #28614)により、複数のGPUにモデルレイヤを分散配置する環境でもMTPが正常に動作するようになった。
なぜ重要か
16GB VRAMのGPU(RTX 3080/4080/5060 Ti等)では、大規模モデルを単一のGPUに収めるのが困難な場合、CPUメモリを活用したオフロードや、複数GPUでのレイヤ分割が必要になる。これらの環境でMTPが正しく動作しない場合、推論速度の恩恵を受けられず、場合によってはエラーが発生していた。今回の修正により、より柔軟なハードウェア構成でMTP推論を利用できるようになった。
根拠のリンク
- llama: fix draft KV cache handling with batched decoding (PR #28673)
- llama: fix draft model with KV cache offload (PR #28624)
- llama: fix MTP with non-contiguous layer split (PR #28614)
利用者の報告
- 環境: NVIDIA GPU, Version 0.8.5-rc3 (llama.cpp engine 0.5.0) / 結果: CUDA graphsなしでビルドされ、トークン生成速度が0.8.4比で約4倍遅延。jamesdam
利用者の報告
-
環境
- GPU: 2x RTX 5060 Ti 16 GB (Blackwell, sm_120)
- モデル: Qwen3.6-35B-A3B Q4_K_M
- 設定: –spec-type draft-mtp, レイヤ分割
-
結果
- コンテキスト長が約88Kトークンに達した際、MTPパスで「CUDA error: the launch timed out」が発生し、サーバーがクラッシュするという報告がある。[niyarlatotep via GitHub Issue #30396]
NVFP4/MXFP4量子化カーネルの統合と性能向上
前提
NVFP4(NVIDIA FP4)とMXFP4(Mixed-precision FP4)は、新しい量子化形式であり、モデルの重みをより低いビット幅で表現する。これにより、VRAM使用量が削減され、推論速度が向上する可能性がある。
何が変わったか
NVFP4およびMXFP4量子化のためのCUDAカーネルが統合された。
NVFP4カーネル(PR #28384)により、Qwen3.6-27B NVFP4のようなモデルが16GB VRAMのGPUにロード可能になった。F16と比較してプレフィル速度が8〜13%向上した。
MXFP4カーネル(PR #28363)により、DeepSeek-V4.1-FlashやGPT-OSSのようなMXFP4量子化モデルの推論が高速化された。CPUでのデ量子化と比較して約2倍高速化した。
また、MMVQ(Mixed-Matrix-Vector Quantization)やQ8_1量子化の最適化(PR #28403)も行われ、新しいGGUF形式(IQ5_0, IQ5_1, Q5_0, Q5_1, Q5_2)がサポートされた。
なぜ重要か
16GB VRAMのGPUでは、従来の量子化形式でも大規模モデルのロードが限界に近い場合がある。NVFP4やMXFP4のような新しい量子化形式を導入することで、より大きなモデルや、より高い精度のモデルを16GB環境で扱えるようになる。特にQwen3.6-27B NVFP4は、16GB VRAMのGPUでコンテキストを確保しながらロードできるため、実用的な選択肢となる。
根拠のリンク
- ggml-cuda: MXFP4 quantization kernel (PR #28363)
- ggml-cuda: NVFP4 quantization kernel (PR #28384)
- CUDA: fastdiv, launch bounds for MMVQ and Q8_1 quant (PR #28403)
- llama-cpp-python: nvfp4, mmvq, q5_0, q5_1 quant support (new bindings)
FlashAttentionのCUDA Graph対応とメモリ確保不具合修正
前提
FlashAttentionは、Attention機構の計算を最適化し、VRAM使用量を削減しながら推論速度を向上させる技術である。CUDA Graphは、GPUカーネルの実行を記録・再生することで、オーバーヘッドを削減する技術である。
何が変わったか
FlashAttentionのCUDA Graph対応で、head_dimが256を超えるモデル(Qwen3.8など)での動作が修正された(PR #28648)。
FlashAttentionのCUDAカーネルにおけるテンソル割り当てサイズの不具合が修正された(PR #28502)。これにより、OOM(Out Of Memory)やデータの静かなる破損が防止された。
MXFP4推論における結果の不具合も修正された(PR #28602)。
なぜ重要か
16GB VRAMのGPUでは、FlashAttentionを使用することでVRAM使用量を削減し、より長いコンテキストを扱えるようになる。しかし、CUDA Graphとの組み合わせや、メモリ割り当ての不具合により、推論が不安定になる場合があった。今回の修正により、FlashAttentionの安定した利用が可能になった。
根拠のリンク
- CUDA: fix Flash Attention for head_dim > 256 and CUDA graphs (PR #28648)
- CUDA: fix tensor allocation size in FlashAttention (PR #28502)
- CUDA: fix mxfp4 inference (PR #28602)
利用者の報告
-
環境
- GPU: NVIDIA GeForce RTX 4080 SUPER (16 GB)
- OS: Windows 11
- モデル: Gemma 4 12B QAT Q4_0
- 設定: -fa on (FlashAttention有効)
-
結果
- FlashAttentionを有効にした場合、CUDA illegal memory accessエラーが発生し、サーバーがクラッシュするという報告がある。[SirNr1 via GitHub Issue #30436]
Qwen3.8 Flash NextのMTP対応と画像埋め込みサポート
前提
Qwen3.8 Flash Nextは、多モーダル(テキストと画像)に対応した大規模言語モデルである。MTPと画像埋め込み(image embeddings)を同時にサポートすることで、画像を含む入力の推論速度を向上させることができる。
何が変わったか
Qwen3.8 Flash NextがMTPと画像埋め込みをサポートするようになった(PR #30397)。これにより、画像を含む入力の推論が高速化される。
なぜ重要か
16GB VRAMのGPUでも、Qwen3.8 Flash Nextのような多モーダルモデルをMTPと組み合わせて使用することで、効率的な推論が可能になる。特に、画像認識や説明生成などのタスクで、推論速度が向上する。
根拠のリンク
CUDA Graphの最適化とメモリ再割り当て回避
前提
CUDA Graphは、GPUカーネルの実行を記録・再生することで、オーバーヘッドを削減する技術である。しかし、推論中にグラフの再割り当てが発生すると、パフォーマンスが低下する可能性がある。
何が変わったか
CUDA Graphのメモリ再割り当てを回避する最適化が行われた(PR #30255, PR #30439)。これにより、推論中のグラフの再割り当てが減少し、パフォーマンスが向上した。
また、推論中のグラフ再割り当てを報告する機能が追加された(PR #30329)。
なぜ重要か
16GB VRAMのGPUでは、VRAMの効率的な使用が重要である。CUDA Graphの再割り当てを回避することで、推論速度が向上し、VRAMの使用も最適化される。
根拠のリンク
- llama.cpp #30255 llama : skip logits buffer allocation when graph produces no logits
- llama.cpp #30439 graph : avoid reallocations in the “no cache” path
- llama.cpp #30329 llama : report compute graph reallocations during inference
出典
- llama: fix draft KV cache handling with batched decoding (PR #28673)
- llama: fix draft model with KV cache offload (PR #28624)
- llama: fix MTP with non-contiguous layer split (PR #28614)
- llama.cpp #30396 Eval bug: draft-mtp with Qwen3.6-35B-A3B on 2x RTX 5060 Ti (layer split): “CUDA error: the launch timed out” in MTP path at ~88K context
- ggml-cuda: MXFP4 quantization kernel (PR #28363)
- ggml-cuda: NVFP4 quantization kernel (PR #28384)
- CUDA: fastdiv, launch bounds for MMVQ and Q8_1 quant (PR #28403)
- llama-cpp-python: nvfp4, mmvq, q5_0, q5_1 quant support (new bindings)
- CUDA: fix Flash Attention for head_dim > 256 and CUDA graphs (PR #28648)
- CUDA: fix tensor allocation size in FlashAttention (PR #28502)
- CUDA: fix mxfp4 inference (PR #28602)
- llama.cpp #30436 CUDA illegal memory access with flash attention on Windows releases (Gemma 4 12B QAT Q4_0 + mmproj, RTX 4080 Super), -fa off works
- llama.cpp #30397 Allow Qwen3.8 Flash Next to accept image embds for MTP
- llama.cpp #30255 llama : skip logits buffer allocation when graph produces no logits
- llama.cpp #30439 graph : avoid reallocations in the “no cache” path
- llama.cpp #30329 llama : report compute graph reallocations during inference
SwitchBot公式ページ
クーポン「AF-4903」で5%引き(アフィリエイトクーポンになりますのでご協力お願いします)
割引の詳しい仕組みに関してはこちらのページを参照ください。