llama.cpp: MoEのVRAM節約、Q2_Kの高速化、FlashAttentionの帯域幅削減など
目次
llama.cpp は ggml-org が開発する C/C++ の LLM 推論エンジン。GGUF 形式の量子化モデルを CPU/GPU で動かす。
今回の要点
- MoEモデルのVRAM節約: ホストメモリ上のExpertをGPUキャッシュする仕組みが追加され、PCIe転送のオーバーヘッドが削減される。
- Q2_K量子化の高速化: 16GB GPUでも利用可能なQ2_K量子化モデルにおいて、レジスタ圧迫によるスパイルを修正し、AMD環境で最大約1.4倍の速度向上が確認されている。
- FlashAttentionの最適化: KVキャッシュの脱量子化処理を統合し、メモリ帯域幅の節約を実現。長文コンテキストやバッチ処理での推論速度向上が期待できる。
- NVFP4蓄積演算の最適化: 次世代量子化フォーマットであるNVFP4の演算効率が改善された。
MoEモデルのExpertをホストメモリにGPUキャッシュ
MoE (Mixture of Experts) モデルでは、パラメータが多数のExpertに分割されており、GPUのVRAMに全てのExpertを収められない場合、ホストメモリ(RAM)からPCIe経由でデータを読み込む必要がある。この転送処理が推論速度のボトルネックとなっていた。
今回の変更では、ホストメモリ上のExpertをGPU上にキャッシュする仕組みが実装された。これにより、頻繁にアクセスされるExpertはPCIe転送を省略でき、転送オーバーヘッドを削減できる。特に、GPUのVRAMが限られている環境において、全てのExpertをオフロードできない場合に有効なアプローチとなる。実験では、Expert総サイズの約10%をキャッシュサイズとして設定するのが最適であるという結果が出ている。
この改善は、VRAMが限られた16GBクラスのGPUでも、より大きなMoEモデルを扱う際の効率化に寄与する可能性がある。また、非常に大きなモデル(例:Qwen3.8-Flash-Next Q4_0、93.7 GiB)でのテストも行われており、小規模なMoEモデルへの適用も期待されている。
詳細は以下のPRを参照:
Q2_K量子化のVGPRスパイル修正による高速化
Q2_K量子化は、モデルのサイズを大幅に削減できる一方で、推論時のレジスタ圧迫(VGPRスパイル)により、特にAMD環境や一部のCUDA環境でパフォーマンスが低下する傾向があった。
今回の修正では、Q2_K量子化モデルにおけるVGPRスパイルの問題を、 gentle unroll と一時ループの削除によって解決した。これにより、AMDのgfx906/MI50環境において、ubatch 64でのパフォーマンスが最大139.52%向上した。この改善は、16GB GPUでQ2_K量子化モデルを動かすユーザーにとっても、推論速度の大幅な向上につながる可能性がある。
利用者の報告
RTX 5070 Ti 16 GB + Ryzen 7 7700 + Ubuntu 24.04 の環境で、llama.cpp fork(VRAM expert cache、MTP drafting、IQ3_XXS量子化)を使用しているユーザーからの報告がある。同ユーザーは、QSA(Quantized Sparse Attention)ブロックスパースパッチをポートし、以下の性能改善を確認している。
| Context | Decode before QSA | Decode with QSA | Recall test (8 depths) |
|---|---|---|---|
| 32K | 69.5 | 78.1 | 8/8 |
| 64K | 60.6 | 77.4 | 8/8 |
| 96K | 54.4 | 77.3 | 8/8 |
| 127K | 49.7 | 77.1 | 8/8 |
また、プロンプト処理速度(~550–575 tok/s at 73K–122K with `-ub 1024`)が課題となっており、`-ub 2048` は 16 GB では収まらないという報告がある。この環境での詳細なプロンプト処理速度のデータは、今後の改善に向けた参考となる可能性がある。
FlashAttentionにおけるKVキャッシュ脱量子化のFMA統合
FlashAttentionでは、KVキャッシュの脱量子化処理が別パスで行われており、これがメモリ帯域幅の消費要因となっていた。今回の変更では、この脱量子化処理をFlash AttentionのMMAs(Matrix Multiply-Accumulate)に統合した。
これにより、別個の脱量子化パスを回避し、メモリ帯域幅を節約できる。この改善は、16GB GPUを含む全てのCUDA GPUで、長文コンテキストやバッチ処理時の推論速度向上に寄与する可能性がある。
詳細は以下のPRを参照:
RTX 3090向けQwen3.8-27Bの性能最適化
24GB VRAMのRTX 3090向けに、Qwen3.8-27Bモデルの性能を最適化するPRが提出された。アーキテクチャの類似性から、16GB GPUでも同様の最適化パスが適用される可能性があり、同様の環境での推論速度向上が期待できる。
利用者の報告
前述のRTX 5070 Ti 16 GB環境において、Qwen3.8-27Bモデルの性能向上に向けた取り組みが報告されている。具体的には、VRAM expert cacheとMTP drafting、IQ3_XXS量子化を組み合わせた環境で、QSAブロックスパースパッチを適用し、推論速度と精度のバランス改善を試みている。
NVFP4量子化におけるMMQ蓄積演算の最適化
NVFP4量子化は、次世代の量子化フォーマットとして注目されている。今回の変更では、NVFP4量子化モデルにおけるMMQ(Matrix Multiply-Quantized)パスの蓄積演算が最適化された。これにより、NVFP4量子化モデルの推論速度が向上し、特にSM120環境でのCUTLASS MoEパスとの連携が強化された。
この改善は、16GB GPUでNVFP4量子化モデル(例:Qwen3.8-Flash NVFP4)を動かすユーザーにとっても、間接的な性能向上につながる可能性がある。
詳細は以下のPRを参照:
出典
- llama: add a GPU cache for MoE experts kept in host memory (PR #29887)
- ggml-cuda: fix a mountain of VGPR spills on Q2_K (PR/Issue)
- CUDA: fuse KV cache dequantization into fattn-mma-f16 (PR #29846, merged)
- Improve qwen3.8 27b performance on a 3090 (Issue #29900)
- llama.cpp PR#29900: 'Improve qwen3.8 27b performance on a 3090' — performance optimization for RTX 3090 (24GB)
- CUDA: Optimize accumulation in mmq for NVFP4 type (PR #29857)
- Strata Issue #71 by demon851113
SwitchBot公式ページ
クーポン「AF-4903」で5%引き(アフィリエイトクーポンになりますのでご協力お願いします)
割引の詳しい仕組みに関してはこちらのページを参照ください。
製品ごとの特徴・紹介動画は SwitchBot 製品ガイド にまとめています。