Reed's News
← 返回精选

大规模服务 Kimi 与 GLM:KV 缓存量化、权重压缩与缓存安全

AI 78 ascorbic 2026/8/3 1116 字 原文 ↗

Workers AI 依托 Cloudflare 就近用户的数据中心内的 GPU,为全球顶尖开源模型提供推理服务。其中能力最强、资源需求最高的两款模型,是 Moonshot 的 Kimi K 系列与Z.ai的 GLM。它们均为大参数量、长上下文的混合专家模型,使用体验极佳,但受限于内存,高效部署难度极大。

我们曾撰文介绍过如何在 Workers AI 上部署大模型,以及如何拆分推理的填充(prefill)与解码(decode)阶段,提升单 GPU 的利用率。本文将在此基础上,进一步介绍三种优化技术:KV 缓存量化、模型权重压缩,以及针对多请求共享缓存的保护机制。这些技术可在不损失模型精度的前提下,让模型适配 GPU 内存并保持推理速度,最终帮助我们以更低成本服务更多客户。

我们所有的实验与生产流量,均基于开源推理服务框架SGLang运行并完成基准测试。我们发现,SGLang 是当前市场上性能最优的框架,因此与 SGLang 团队深度合作,将我们的补丁与新特性贡献至上游代码,回馈开源社区。

KV 缓存量化

模型生成文本时,会将已处理过的所有 token 的注意力键(K)与值(V)存储在一个名为 KV 缓存的结构中。借助这一缓存,模型无需在生成新 token 时重新读取全部上下文,就能延续长对话。对于长上下文模型而言,KV 缓存会快速膨胀,通常是它而非模型权重率先占满 GPU 内存。

默认情况下,缓存以 16 位精度(BF16)存储。我们改为使用 8 位浮点格式(FP8,e4m3)存储,将缓存体积压缩至原来的一半。以 Kimi K2.6 为例,内存可容纳的上下文 token 数量从约 68.6 万提升至 137 万,实现翻倍。

需要明确的是,这一优化的核心优势并非原始速度。量化缓存会给每个 token 的处理增加少量计算量,因为 FP8 注意力内核读取时需进行格式转换。真正的提升在于单 GPU 可同时承载的请求数。以下为 Kimi K2.6 在分布式 H200 部署环境下的解码性能数据,直接对比两种注意力内核:

并发请求数 BF16 吞吐量(tokens/秒) FP8 吞吐量(tokens/秒)
1 137 125
8 731 689
16 1,106 1,028
32 1,558 1,489
64 内存不足 2,192

在任意并发水平下,BF16 的单 token 处理速度都略快几个百分点。但 BF16 在并发数达到 32 时就会耗尽缓存,无法接收第 33 个请求;而 FP8 可支持到 64 并发,吞吐量达 2192 tokens/秒,比 BF16 的峰值高出约 41%,同时单 token 成本降低约 30%。由于我们将填充与解码阶段拆分为独立资源池,可按需应用优化:填充阶段受算力而非内存限制,因此保留 BF16 缓存以维持稍高的吞吐量。

若量化会改变模型输出结果,上述优化便毫无意义,因此我们开展了验证。在全量测试集上,FP8 与 BF16 缓存的表现难分伯仲:

测试集 BF16 得分 FP8 得分
GSM8K 94.24 94.09
ARC-Easy 89.06 89.14
ARC-Challenge 66.72 67.49
MMLU 89.11 89.04
MMLU-Pro 80.29 79.29
mcxams(内部基准测试) 61/63 61/63
工具调用有效性 92.2% 92.6%

模型权重压缩

GPU 内存的另一主要占用项是模型权重。针对 GLM 5.2,我们将权重从 8 位浮点(FP8)压缩至 4 位整数(INT4),且未损失任何精度。模型 checkpoint 体积从 705GB 缩减至 421GB,压缩比约 40%;在 8 路张量并行部署中,单 GPU 内存占用从约 88GB 降至 52GB,同款硬件可额外容纳约 118 万 token 的 KV 缓存。

在全量测试集上,INT4 与 FP8 权重的表现无显著差异:

测试集 评估指标 FP8 得分 INT4 得分
GSM8K 完全匹配率 94.39% 93.56%
GSM8K 灵活匹配率 94.24% 93.48%
ARC-Easy 准确率 86.62% 86.15%
ARC-Easy 标准化准确率 84.51% 85.19%
ARC-Challenge 准确率 64.93% 64.85%
ARC-Challenge 标准化准确率 67.24% 66.64%
MMLU 平均准确率 86.60% 86.54%
MMLU-Pro 完全匹配率 80.80% 80.47%
mcxams(内部基准测试) 通过数 62/63 62/63

更小的权重还能加快解码速度,原因很明确:生成每个 token 都需要从 GPU 内存中读取模型权重,因此解码速度受限于内存带宽。数据传输量减少,token 生成自然更快。这一效果在低并发场景下尤为显著——此时单请求延迟是核心关注点:

并发请求数 FP8 吞吐量(tokens/秒) INT4 吞吐量(tokens/秒) 提升幅度
1 60 92 +55%
8 425 513 +21%
16 683 825 +21%
32 994 1,267 +27%
64 1,672 1,933 +16%

填充阶段的表现则有所不同。该阶段受算力限制,且 INT4 权重需先扩展为更高精度才能参与模型计算,额外的转换步骤会拖慢填充速度:GLM 采用 FP8 权重时,填充吞吐量约为 10160 tokens/秒,而 INT4 权重下仅为 8660 tokens/秒。得益于分布式架构,我们无需妥协,可灵活选择:解码阶段用 INT4 以提速,填充阶段用 FP8 以保性能。在所有测试中,INT4 模型的精度与 FP8 模型的差距均在 0.8 个百分点以内,质量表现基本一致。

共享 KV 缓存保护

上述两项技术带来了相同的效果:让更多请求可同时共享单 GPU 内存。这种高效性正是优化的核心目标,但也意味着数百个请求会同时读写同一块物理 KV 缓存的不同页。分页注意力、连续批处理、缓存复用等提升性能的机制,都依赖精准的账目管理;以我们的请求量规模,即便十亿分之一的错误概率,也会导致问题频繁出现。

为此,我们构建了 KV 缓存完整性检查机制作为防护层。逻辑十分简单:为每一块物理缓存页分配一个标签,缓存页重新分配时标签同步更新;服务器记录每个请求预期使用的缓存页及对应标签。在支持的解码操作读取缓存前,系统会核对这些映射关系。一旦发现不匹配,就终止受影响的请求,避免返回错误缓存页的数据。

安全机制能否落地,关键在于其性能开销。我们在中型生产模型上进行了测试,采用 2 填充、2 解码的配置,输入为 8192 token,输出为 1000 token:

并发请求数 吞吐量变化 尾部延迟变化
1 −0.53% +0.42%
2 −0.38% +0.54%
4 −0.79% +0.63%
8 −0.43% +0.80%

该机制对吞吐量和尾部延迟的影响均低于 1%,即便 95% 置信区间的上限也接近 1%。为控制计算开销,我们将验证作为独立批量任务执行,而非融合进注意力内核——后者会引发 GPU 线程组间的竞争。这一机制按部署实例启用,默认采用无操作追踪器,无 measurable 性能损耗,无需该功能的部署实例不会产生任何额外成本。

未来规划

高效部署前沿大模型是一个动态演进的课题,上述工作正是我们持续探索的一部分。我们正将 FP8 KV 缓存推广至更多服务器节点,验证 Blackwell(NVIDIA 新一代 GPU 架构)上的 NVFP4 权重,并致力于实现完整性检查机制的全场景启用,且将其性能开销降至可忽略不计。这些优化将帮助我们继续以更低成本、同等精度服务更多客户。

如果你热衷于研究如何将顶尖开源模型高效部署在 GPU 上,并服务数百万开发者,欢迎加入我们