Spiritbuun 的 VBR(可变比特率)KV 缓存 —— 初印象

Reddit r/LocalLLaMA 工具

摘要

一篇对 Spiritbuun 的 llama.cpp 分支的赞赏文章,重点介绍了其新的可变比特率(VBR)KV 缓存功能,该功能动态降低缓存精度以适应 VRAM,从而实现更大的自动适配上下文大小且速度损失极小。

嗯,这是一篇关于 spiritbuun 的 llama.cpp 分支的赞赏帖。几周前,我正在测试各种分支和配置,想找出哪个对我的 3060 上的次要模型最好,最终胜出的组合是 Spiritbuun 的分支 + CUDA + mudler 的 Apex I-Compact 量化(用于 Qwen3.6-35B-A3B 模型)。详见 https://www.reddit.com/r/LocalLLaMA/comments/1tq0h1p/qwen3635ba3bapex_128k_ctx_on_rtx_3060_12gb_37_ts/ 后来 Spiritbuun 发布了 turbo8,我就把 key cache 切换过去了。速度一样,精度翻倍。不错。但现在他又加入了一个我认为值得在 r/LocalLLama 上提及的功能。什么是 VBR?与整个上下文使用固定 KV 量化层级不同,VBR 允许你设置一个底线层级(例如 turbo3_tcq,3.25 bits/value),并设置一个初始层级(f16)。随着上下文增长,缓存会逐步通过 turbo(turbo8、turbo4、3_tcq、2_tcq、1_tcq)阶梯降级,以保持在 VRAM 预算内。所以你只需要这样:`llama-server -m model.gguf -ct vbr`,正如开发者所说:“这一个标志就是整个产品:它根据权重和计算后剩余的 VRAM 推导出 KV VRAM 预算,宣布在底线层级下能容纳的最大上下文(以模型训练长度为准),并在上下文填充时动态降级层级。无需猜测上下文长度,无需选择编解码器。使用 `-v` 选项可以观察 VBR 降级步骤。”结果:你得到的是动态上下文,而不是固定的 n_ctx。预算在启动时根据剩余 VRAM 计算,降级控制器在解码期间 VRAM 不足时触发。你还可以调整降级底线以及其他设置。 我的启动命令是:`/root/buun-llama-cpp/build/bin/llama-server \ -m /models/Qwen3.6-35B-A3B-APEX-MTP-I-Compact.gguf \ --host 0.0.0.0 --port 8000 \ --no-mmap --mlock \ -ctk turbo8 -ctv vbr --vbr-floor turbo3_tcq \ --jinja --reasoning-budget 1024 \ --flash-attn on -ngl 99 --n-cpu-moe 20` 你可以看到我将 key cache 固定为 turbo8,并将降级底线设置为 turbo3_tcq。 我的配置:RTX 3060 12GB,模型:Qwen3.6-35B-A3B-APEX-MTP-I-Compact,配置:`-ctk turbo8 -ctv vbr --vbr-floor turbo3_tcq --flash-attn on`。数据(来自 club-3090 的 bench.sh,5 次运行): 指标 turbo8+vbr turbo8+turbo4(固定) 解码 TPS 50.85 52.83 TTFT 93ms 178ms VRAM 使用 10.2 GiB 11 GiB CV 0.6% 0.4% 因此 VBR 仅比匹配的 turbo8/turbo4 慢约 4%,但 TTFT 快了近 2 倍,且 VRAM 使用更低。上下文预算自动适配为 216k tokens,以适配剩余 VRAM。 我喜欢的地方:降级控制器很平滑——触发时 TPS 没有明显下降。TTFT 减半在实际使用中很显眼。这个分支很扎实。Spiritbuun 为此投入了大量工作,从 TurboQuant 旋转矩阵到按需映射物理页面的 VMM 池。 需要注意的一点:遇到了一个融合 f16<->t8 非对称内核的 bug,导致 turbo8-K / f16-V(使用 vbr 时降级前的基准配置)配置中出现输出损坏。回退了该提交后一切正常。Spiritbuun 已知晓此问题。 如果你在有限的 VRAM 上进行本地推理,这个分支值得一试。分支地址:https://github.com/spiritbuun/llama.cpp
查看原文

相似文章

@ClementDelangue:这有用吗?

X AI KOLs Following

Buun 推出了 VBR(可变比特率),这是一种新的 KV 缓存格式,可动态量化各层以在 VRAM 限制下优化质量,现已可在 master 上使用。

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

Reddit r/LocalLLaMA

一位用户分享了在llama.cpp中将KV缓存卸载到RAM的经验,在释放显存以便运行更大模型和上下文窗口的同时,实现了相近的速度,表明这种权衡通常是值得的。

动态KV缓存量化与按需加载mmproj/MTP:我的llama.cpp愿望清单

Reddit r/LocalLLaMA

一位开发者已为llama.cpp实现了一个概念验证的PR,通过HTTP端点添加了动态KV缓存量化功能,允许用户按需重新量化其KV缓存,而无需完全重新加载模型。该帖子还概述了一个愿望清单,包括按需加载mmproj/MTP交换以及用于上下文优化的自动--fit标志。