推理服务看起来启用了 GPU 和 FlashAttention,却可能因为 KV Cache 的数据类型组合缺少对应 CUDA kernel,把注意力算子交给 CPU 执行。llama.cpp 的一份 GitHub 问题报告 描述了这种难以从配置表面发现的性能退化。

问题是怎样触发的?

报告称,默认构建没有开启 GGML_CUDA_FA_ALL_QUANTS 时,某些量化 K/V 类型或混合组合不在 FlashAttention CUDA kernel 的支持集合中。GPU 后端拒绝该算子后,调度器将注意力分配到 CPU;报告者指出,这一过程没有明显错误或警告,而基准输出仍显示 FlashAttention 已开启。

在报告者的 RTX 4080、27B 模型及指定测试配置下,llama-server 的 q5_1 KV 配置报告 prompt 处理约 38.4 tokens/s,同机 q8_0 约 1,348 tokens/s;重新编译并打开相关选项后,q5_1 约为 1,162 tokens/s。这是 issue 中的单机报告,涉及不同配置和一次重新构建,不能直接推广为所有量化方式的性能倍数。

对排查有什么启发?

服务端看到的开关或基准参数只能说明请求了什么,不一定说明每个算子实际在哪里执行。排查异常首 token 延迟时,可以结合版本、构建选项、K/V 类型、实际算子设备分配以及 CPU/GPU 利用率,验证是否发生了回退;应先核对具体版本的支持范围。

报告还提出相关构建选项和运行时警告方向。这里记录的是报告者的复现与根因分析,并非独立复现或对当前所有版本的状态判定;原输入中另一则社交帖的硬件和倍数与这份 issue 不一致,不沿用该数字。