[llama.cpp] 非对称 KV q8/q4 缓存:当前注意事项及 GGML 仓库中的讨论
摘要
讨论了在 llama.cpp 中使用非对称 KV 缓存量化时的注意事项,其中不匹配的 q8/q4 类型会导致提示处理在 CPU 而非 GPU 上进行,并提出了通过编译标志进行修复的方案。
可能大多数人都知道,在 llama.cpp 的启动选项中,使用除 `-ctk q8_0 -ctv q8_0 / -ctk q4_0 -ctv q4_0` 之外的选项会导致提示处理在 CPU 而非 GPU 上进行(至少在 CUDA 下如此)。例如,当我们使用经常被建议的混合选项 `-ctk q8_0 -ctv q4_0` 时,每秒处理 token 数(pps)会大幅下降。我曾与一个高级 LLM 讨论过这个问题,它建议对 llama.cpp 的 CUDA 源代码进行一些轻微修改,或者使用 `cmake -DGGML_CUDA_FA_ALL_QUANTS=ON ..`,但这将花费很长时间。但巧合的是,GitHub 用户 sanmai 做了一个小型评估,并建议在编译时包含 KV 缓存量化组合,即使不使用 FA_ALL_QUANTS 也可以,这将是很好的。讨论在此,值得一读,因为评估证实,与 f16/f16 相比,使用异步 8/4 位 KV 量化仅损失 1.3% 的精度,同时节省超过一半的内存:https://github.com/ggml-org/llama.cpp/discussions/23470
相似文章
动态KV缓存量化与按需加载mmproj/MTP:我的llama.cpp愿望清单
一位开发者已为llama.cpp实现了一个概念验证的PR,通过HTTP端点添加了动态KV缓存量化功能,允许用户按需重新量化其KV缓存,而无需完全重新加载模型。该帖子还概述了一个愿望清单,包括按需加载mmproj/MTP交换以及用于上下文优化的自动--fit标志。
kv-cache : 避免kv cells复制 by ggerganov · Pull Request #24277 · ggml-org/llama.cpp
ggerganov的此pull request优化了llama.cpp中的kv-cache,以避免不必要的kv cells复制,从而提升推理性能。这是对开源LLM推理库llama.cpp的一个贡献。
DeepSeek-V4-Flash (MXFP4): 仅通过KV缓存量化类型(f16与q8_0)变化,计算缓冲区规模约扩大3倍——还有其他人在 llama.cpp 上看到这种情况吗?
一位用户报告称,在DeepSeek-V4-Flash (MXFP4)中将KV缓存量化类型从f16改为q8_0,导致计算缓冲区规模大约扩大了3倍,询问其他人是否在使用 llama.cpp 时也观察到了这一现象。
ICYM: llama.cpp b9455 --SM Tensor KV 缓存修复已合并
llama.cpp 版本 b9455 合并了一个针对多 GPU 设置中 `-sm tensor` KV 缓存量化的修复,解决了展平张量时形状信息丢失的问题。
ggml-webgpu: 提升k-quants的预填充速度并重构Q4/Q5/Q8及k-quants的矩阵乘法 by yomaytk · Pull Request #24225 · ggml-org/llama.cpp
提升了k-quants的预填充速度,并重构了llama.cpp WebGPU后端中Q4/Q5/Q8及k-quants的矩阵乘法。