llama.cpp b11177:CUDA 融合 RMS_NORM 与 SCALE kernel
原标题:b11177
AI 摘要
llama.cpp 发布 b11177 版本,在 CUDA 后端将 RMS_NORM 与 SCALE 融合为单个 kernel(#29393),为 rms_norm_f32 增加 do_scale 标志,仅在 SCALE 无 bias 且 rms_norm 输出只有一个消费者时触发融合,数值与未融合版本逐位一致。该改动减少了 GDN 层每 ubatch 的额外 kernel 启动次数,在 2x GTX 1080 Ti 上 llama-bench 提升约 0.4%-1.3%,draft-mtp 投机解码冷预填充提升约 4.2%-4.8%,困惑度与草稿接受数保持不变。Metal 与 SYCL 后端此前已实现相同融合。
正文节选
<details open> CUDA: fuse RMS_NORM + SCALE into one kernel (#29393) - #28068 builds the GDN q/k l2norm as ggml_scale(ggml_rms_norm(x, eps/n), 1/sqrt(n)). This adds 2 SCALE nodes per GDN layer, 96 extra kernel launches per ubatch on Qwen3.8-27B (48 GDN layers). - The extra kernels take no measurable GPU time, but each launch has a host/driver cost. It is small with plain batch processing and about 10x larger with draft-mtp speculative decoding. - rms_norm_f32 gets a do_scale flag, the same patt