【CUDA 16GB向け】llama.cpp CUDA カーネルの65535制限突破、MMQ境界外読み込み修正、MUSAビルド失敗解消
目次
この記事はAIによって編集・作成されています。
今回の要点
- 65535行/スライスを超える大規模テンソルや非連続データでクラッシュしていたCUDAカーネル(PAD、NORM、ROLL)が修正された。
- MMQ(Multi-Query)演算におけるホスト設定の不一致と境界外読み込み(Out-of-bounds)バグが修正され、安定性が向上した。
- MUSA環境における共有メモリ不足によるビルド失敗と、Vulkan環境におけるIntel GPUやAMD GPU固有のバグが解消された。
- Top-Kアルゴリズムの選択ロジックが改善され、CCCLバージョンガードのバグ修正により将来のビルド互換性が確保された。
- Blackwell世代向けNVFP4量子化対応とDFlashの出力ヘッド共有バグ修正が行われた。
CUDAカーネルの65535制限突破と非連続テンソル対応
llama.cppのCUDAバックエンドでは、カーネル起動時のグリッドサイズ(gridDim)の制限により、特定の形状のテンソル処理時にエラーが発生する問題が修正されました。
何が変わったか
CUDAの制限により、カーネル起動時のグリッドサイズ(gridDim.y, gridDim.z)は最大65535までという制約がありました。これにより、65535行を超えるPAD(パディング)処理や、65535チャンネルを超える正規化(NORM/RMS_NORM/L2_NORM)処理を行うと、`invalid configuration argument` により推論が中止されていました。
今回の修正では、以下のカーネルがループ処理に対応し、制限を突破しました。
– PADカーネル(PR #30147)
– 正規化系カーネル(PR #28175)
– 非連続テンソル対応ROLLカーネル(PR #29547)
なぜ重要か
大規模なモデルや長いコンテキストを扱う際、テンソルの形状が65535を超えることがあります。これらがCPUバックエンドでは正常に処理できていたものが、CUDAではクラッシュしていたため、16GB GPUユーザーにとって推論の安定性が大きく向上します。
根拠のリンク
– [PR #30147: CUDA : looped PAD kernel for more than 65535 rows or slices](https://github.com/ggml-org/llama.cpp/pull/30147)
– [PR #28175: fix norm family kernels when ne[2]/ne[3] exceed grid dim limits](https://github.com/ggml-org/llama.cpp/pull/28175)
– [PR #29547: Use byte strides for roll to allow non-contiguous ROLL](https://github.com/ggml-org/llama.cpp/pull/29547)
利用者の報告
pskrunner14 氏は、PADカーネルの修正について、65535行を超えるテンソルで `invalid configuration argument` が発生していた事象が、ループ処理により解決されたことを報告しています。
– [PR #30147 コメント](https://github.com/ggml-org/llama.cpp/pull/30147)
edenfunf 氏は、正規化カーネルの修正について、RTX 5070 + CUDA 13.3の環境でテストが行われ、65535チャンネルを超えるケースで正常に動作することを確認しています。
– [PR #28175 コメント](https://github.com/ggml-org/llama.cpp/pull/28175)
Xeoph 氏は、Ampereアーキテクチャ(RTX 3080)での長文コンテキスト処理において、llama.cppの処理速度がvLLMと比べて約2.2〜2.7倍遅いという報告をしています。これはコンテキスト長が増加するにつれて速度が低下する傾向(約0.2 ms/1K KV tokens)によるもので、Draft Acceptanceの品質とは無関係であることが確認されています。
– [Issue #29935](https://github.com/ggml-org/llama.cpp/issues/29935)
CUDA MMQの境界外読み込み修正とホスト設定の整合性確保
何が変わったか
MMQ(Multi-Query)演算において、ホスト側とデバイス側の設定が不一致になるバグと、境界外読み込み(Out-of-bounds reads)が発生するバグが修正されました。
なぜ重要か
設定の不一致や境界外読み込みは、推論結果の破損やクラッシュの原因となります。特にMMQはメモリ効率の高い推論方式であるため、安定動作の確保は重要です。
根拠のリンク
– [PR #30168: pass src1 precision to host MMQ config helpers](https://github.com/ggml-org/llama.cpp/pull/30168)
– [PR #29953: fix MMQ out-of-bounds reads](https://github.com/ggml-org/llama.cpp/pull/29953)
利用者の報告
ynankani 氏は、ホスト側のMMQヘルパー関数に `src1` の精度を渡すことで、ホストとデバイスの設定選択を一致させる修正を行っています。
– [PR #30168 コメント](https://github.com/ggml-org/llama.cpp/pull/30168)
DFlashの出力ヘッド共有修正とNVFP4量子化対応
何が変わったか
DFlash(Dequant Flash Attention)において、出力ヘッドの共有バグが修正されました。また、Blackwellアーキテクチャ向けにNVFP4量子化のサポートが追加されました。
なぜ重要か
DFlashのバグ修正により、推論の正確性が向上します。NVFP4量子化のサポートにより、Blackwell世代GPU(RTX 5090等)でのメモリ効率と推論速度の向上が期待できます。
根拠のリンク
– [PR #30111: fix DFlash output head sharing](https://github.com/ggml-org/llama.cpp/pull/30111)
– [PR #23572: permit quantizing into NVFP4 (Blackwell PP +40%)](https://github.com/ggml-org/llama.cpp/pull/23572)
– [PR #30202: dequant quantized kv on-the-fly for mma kernel](https://github.com/ggml-org/llama.cpp/pull/30202)
利用者の報告
Xeoph 氏は、NVFP4量子化モデル(qwen3.5-arch 27B)をRTX 3080で動作させた際、長文コンテキストでの処理速度低下について報告しています。これはDFlashの修正とは直接関係ありませんが、NVFP4量子化環境での実測値として参考になります。
– [Issue #29935](https://github.com/ggml-org/llama.cpp/issues/29935)
MUSA共有メモリバグ修正とVulkan環境の安定化
何が変わったか
MUSA(Moore Threads GPU)環境において、共有メモリ不足によるビルド失敗が解消されました。また、Vulkan環境におけるIntel GPUとAMD GPU固有のバグが修正されました。
なぜ重要か
MUSAユーザーにとってビルド失敗は重大な問題でしたが、デフォルトアーキテクチャの見直しにより解決しました。Vulkanユーザーにとっても、Intel ArcやAMD Radeon Proでの推論安定性が向上します。
根拠のリンク
– [PR #30203: musa: drop mp_21 from the default architectures](https://github.com/ggml-org/llama.cpp/pull/30203)
– [PR #30167: musa: Fix for FWHT shared memory bug](https://github.com/ggml-org/llama.cpp/pull/30167)
– [Issue #30175: Eval bug: Nondeterministic FA prefill with Qwen 3.5 9B on RDNA3](https://github.com/ggml-org/llama.cpp/issues/30175)
– [Issue #30171: ggml-cuda: GGML_OP_NORM returns all-NaN rows for some constant inputs](https://github.com/ggml-org/llama.cpp/issues/30171)
– [Issue #30166: Vulkan: FLASH_ATTN_EXT wrong results on MoltenVK 1.4.2 + AMD RDNA1](https://github.com/ggml-org/llama.cpp/issues/30166)
– [Issue #30162: Vulkan: add_rms_fusion is disabled for all Intel devices by a vendor gate – re-enable on Xe2](https://github.com/ggml-org/llama.cpp/issues/30162)
利用者の報告
Googulator 氏は、RDNA3(RX 7900 XT/7800 XT)環境でQwen 3.5 9Bを推論する際、ビルドb10905以降、非決定性( nondeterministic )な出力が発生する問題を報告しています。RDNA4(RX 9070 XT)では発生しません。
– [Issue #30175](https://github.com/ggml-org/llama.cpp/issues/30175)
builtin-pb 氏は、CUDAの `norm_f32` カーネルにおいて、定数入力に対してNaNを返すバグを報告しています。これは分散計算の1パス処理で、平均が分散に対して大きい場合、分散が負の値に丸まり、`rsqrtf` がNaNを返すことが原因です。CPUバックエンドは2パス処理でこれを回避しています。
– [Issue #30171](https://github.com/ggml-org/llama.cpp/issues/30171)
TentionLin 氏は、Apple + AMD(RDNA1)環境でMoltenVK 1.4.2を使用する際、ヘッドサイズがサブグループサイズの倍数でない場合、`FLASH_ATTN_EXT` が誤った結果を返す問題を報告しています。
– [Issue #30166](https://github.com/ggml-org/llama.cpp/issues/30166)
TentionLin 氏は、Intel Arc B580(Xe2)環境でVulkanの `add_rms_fusion` を再有効化し、`test-backend-ops` で19047チェックが正常に通過したことを報告しています。
– [Issue #30162](https://github.com/ggml-org/llama.cpp/issues/30162)
Top-Kアルゴリズム改善とCCCLバージョンガード修正
何が変わったか
Top-Kアルゴリズムの選択ロジックが改善され、特定の条件下での精度低下が修正されました。また、CCCL(CUDA C++ Core Libraries)のバージョンガードが修正され、メジャーバージョンアップ時の互換性が確保されました。
なぜ重要か
Top-Kの精度向上により、推論の品質が安定します。CCCLのバージョンガード修正により、将来のCUDAツールキットアップグレード時にビルドが失敗したり、パフォーマンスが低下したりするリスクが回避できます。
根拠のリンク
– [PR #28713: improve top-k algorithm selection](https://github.com/ggml-org/llama.cpp/pull/28713)
– [PR #29453: fix CCCL version guard breaking on major version rollover](https://github.com/ggml-org/llama.cpp/pull/29453)
出典
- PR #30147: CUDA : looped PAD kernel for more than 65535 rows or slices
- PR #28175: fix norm family kernels when ne[2]/ne[3] exceed grid dim limits
- PR #29547: Use byte strides for roll to allow non-contiguous ROLL
- PR #30168: pass src1 precision to host MMQ config helpers
- PR #29953: fix MMQ out-of-bounds reads
- PR #30111: fix DFlash output head sharing
- PR #23572: permit quantizing into NVFP4 (Blackwell PP +40%)
- PR #30202: dequant quantized kv on-the-fly for mma kernel
- PR #30203: musa: drop mp_21 from the default architectures
- PR #30167: musa: Fix for FWHT shared memory bug
- PR #28713: improve top-k algorithm selection
- PR #29453: fix CCCL version guard breaking on major version rollover
- Issue #29935: perf (CUDA): fattn KV streaming on Ampere (sm86) is ~2x off physics at long context
- Issue #30175: Eval bug: Nondeterministic FA prefill with Qwen 3.5 9B on RDNA3
- Issue #30171: ggml-cuda: GGML_OP_NORM returns all-NaN rows for some constant inputs
- Issue #30166: Vulkan: FLASH_ATTN_EXT wrong results on MoltenVK 1.4.2 + AMD RDNA1
- Issue #30162: Vulkan: add_rms_fusion is disabled for all Intel devices by a vendor gate – re-enable on Xe2
SwitchBot公式ページ
クーポン「AF-4903」で5%引き(アフィリエイトクーポンになりますのでご協力お願いします)
割引の詳しい仕組みに関してはこちらのページを参照ください。