llama.cpp 有一个加速 KV 缓存解码的巧妙技巧

Reddit r/LocalLLaMA 工具

摘要

llama.cpp 的 webUI 中有一个设置,它会将生成的 token 重新发送到 KV 缓存,从而显著减少提示处理延迟,提高长生成或工具调用的响应速度,且没有明显的权衡。

我使用 llama-server 作为端点来运行本地模型,并将其连接到 Open-WebUI、Hermes 和 OpenCode。但由于 llama.cpp 的 webUI 一直在更新,我查看了一下它的设置,发现开发者选项下有一个特别的设置。[就是这个设置](https://i.imgur.com/pifZ2V5.png) - 根据描述来判断(我还没看代码),它基本上就是将当前响应生成的所有 token 重新发送到 KV 缓存,而不是等待你再次提示模型开始解码。这当然是一个 hacky 的变通方法,但它确实大大提高了模型在一次对话中生成大量 token 或通过工具调用接收大量信息时的整体响应速度。**要实际启用此功能,你只需要启动 llama-server 并进入 WebUI 启用它,它就会应用于所有发送到 llama-server 的请求,而不仅限于他们的 WebUI**。例如,在 Open-WebUI 中,以前每当 Qwen 读取一个非常大的网页或类似内容时,我都需要等待 5-30 秒(看似不多,但当你的模型在一次对话中抓取多个网页时,时间就累积起来了)进行提示处理。但自从启用这个选项后,几乎是瞬间完成。我还没有注意到任何实际的权衡,我只是觉得这是一个很好的小 PSA 帖子。对于那些好奇的人,我运行的是 Qwen3.6-35B-A3B @ MXFP4,完全卸载到单个 RX 7900 XTX 上,目前没有 MTP,大约获得 ~100tps,因为 MTP 尚不兼容视觉编码器。我想这对于那些使用新 MTP 补丁的人来说会更好,尤其是引入了 MTP for PP 的那个补丁。我之前不知道这个功能存在,所以希望这能帮到别人!就像我说的,它很 hacky,但确实有效!
查看原文

相似文章

KV Packet: 免重计算的上下文无关KV缓存用于大语言模型

Hugging Face Daily Papers

KV Packet 提出了一种免重计算的缓存复用框架,用于大语言模型。该框架使用可训练的软标记适配器来弥合上下文不连续性,消除了开销,同时在 Llama-3.1 和 Qwen2.5 上的性能与完全重计算基线相当。

Dynamic KV Cache Quantization and Load-on-demand mmproj/MTP: my llama.cpp wishlist

Reddit r/LocalLLaMA

A developer has implemented a proof-of-concept PR for llama.cpp that adds dynamic KV cache quantization via an HTTP endpoint, allowing users to requantize their KV cache on-demand without fully reloading the model. The post also outlines a wishlist including load-on-demand mmproj/MTP swapping and an automatic --fit flag for context optimization.