也许将KV缓存卸载到RAM并不差

Reddit r/LocalLLaMA 工具

摘要

一位用户分享了在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可能会是更好的选择。
查看原文

相似文章

您可以将Qwen3.8-Flash-Next模型的大部分KV缓存卸载到RAM中,而不会明显影响解码速度。 在使用8bit量化的Qwen3.8-Flash-Next模型时,KV缓存大小约为每token 12.5MB。通过将大部分KV缓存从显存移至RAM,并只在显存中保留少量热数据,可以显著扩大显存能够支持的上下文长度。这种混合存储方式仅会增加约1.2ms的延迟,对实际推理速度影响微乎其微,为处理超长上下文提供了一种高效且低成本的解决方案。

Reddit r/LocalLLaMA

演示了将Qwen3.8-Flash-Next模型的KV缓存卸载至系统内存的技术,通过利用该模型高效架构,可在最大程度减少解码速度下降的情况下支持长上下文推理。

我解决了 KV-cache 问题

Reddit r/AI_Agents

作者开源了一种名为 catalyst-brain 的新型 KV-cache 解决方案,声称可大幅降低本地模型对 RAM 的需求,并可能实现无限上下文窗口。