也许将KV缓存卸载到RAM并不差
摘要
一位用户分享了在llama.cpp中将KV缓存卸载到RAM的经验,在释放显存以便运行更大模型和上下文窗口的同时,实现了相近的速度,表明这种权衡通常是值得的。
因此,llama.cpp提供了`-nkvo`(`--no-kv-offload`)选项,将KV缓存卸载到RAM而非VRAM。很多人避免使用它,因为显然这会影响性能。但每个选项都有其权衡之处。在我看来,这是值得的。请听我说。我使用RTX 5060 Ti 16GB和32GB DDR5运行Qwen3.6 27B(IQ4_XS)。为了容纳65k上下文,我必须将KV缓存量化到q4_0,并仅在GPU上保留58层。这给了我**峰值23 tps,长时间生成时降至16 tps**。
llama-server -m Qwen3.6-27B-IQ4_XS.gguf -c 65000 \
-ctk q4_0 -ctv q4_0 -fa on -ngl 58 -np 1 \
--temp 0.6 --top-p 0.95 --top-k 20 --presence-penalty 1.25 \
--min-p 0.0 --chat-template-kwargs '{"preserve_thinking":true}' \
--spec-type draft-mtp --spec-draft-n-max 2
加上`-nkvo`,我能够将整个模型放入GPU,并使用默认的f16作为KV缓存。速度降至**峰值19 tps,长时间生成时14 tps**。不算太差的权衡。
llama-server -m Qwen3.6-27B-IQ4_XS.gguf -c 65000 \
-fa on -ngl 99 -nkvo -np 1 \
--temp 0.6 --top-p 0.95 --top-k 20 --presence-penalty 1.25 \
--min-p 0.0 --chat-template-kwargs '{"preserve_thinking":true}' \
--spec-type draft-mtp --spec-draft-n-max 2
有趣的是,我甚至可以将上下文窗口翻倍至128k,只需在GPU上保留65层中的63层(针对MTP版本)。生成速度变化不大。
llama-server -m Qwen3.6-27B-IQ4_XS.gguf -c 131072 \
-fa on -ngl 63 -nkvo -np 1 \
--temp 0.6 --top-p 0.95 --top-k 20 --presence-penalty 1.25 \
--min-p 0.0 --chat-template-kwargs '{"preserve_thinking":true}' \
--spec-type draft-mtp --spec-draft-n-max 2
当卸载到RAM时,KV缓存量化似乎没有带来任何改进,因此我们基本上免费获得了f16质量。在某些情况下,我发现它反而损害了性能。因此结论是,如果你发现自己为了适应模型而降低KV缓存,或者需要更大的上下文窗口,那么将KV缓存卸载到RAM可能会是更好的选择。
相似文章
如何防止 llama.cpp 将数据卸载到交换空间?
用户寻求关于如何防止 llama.cpp 在 RAM 完全耗尽前将 KV 缓存卸载到交换空间的建议,并分享了他们在配备 96GB RAM 的 M2 Max 和大型 Qwen 模型上的配置。
您可以将Qwen3.8-Flash-Next模型的大部分KV缓存卸载到RAM中,而不会明显影响解码速度。 在使用8bit量化的Qwen3.8-Flash-Next模型时,KV缓存大小约为每token 12.5MB。通过将大部分KV缓存从显存移至RAM,并只在显存中保留少量热数据,可以显著扩大显存能够支持的上下文长度。这种混合存储方式仅会增加约1.2ms的延迟,对实际推理速度影响微乎其微,为处理超长上下文提供了一种高效且低成本的解决方案。
演示了将Qwen3.8-Flash-Next模型的KV缓存卸载至系统内存的技术,通过利用该模型高效架构,可在最大程度减少解码速度下降的情况下支持长上下文推理。
我解决了 KV-cache 问题
作者开源了一种名为 catalyst-brain 的新型 KV-cache 解决方案,声称可大幅降低本地模型对 RAM 的需求,并可能实现无限上下文窗口。
Linux - 为什么 llama.cpp ROCm 的 KV 缓存消耗比 Vulkan 多那么多显存?
一位用户报告称,在使用相同模型和设置的情况下,llama.cpp 的 ROCm 后端比 Vulkan 后端消耗的 KV 缓存显存显著更多,这引发了对其潜在原因的探究。
寻找关于 llama.cpp 服务器及模型卸载工作原理的阅读资源
一位用户分享了他们使用 llama.cpp 服务器进行模型卸载的经验,指出了性能权衡和安静运行的优势,并询问了解该工具如何在 VRAM 和系统 RAM 之间管理内存的阅读资源。