直接答案:KV 缓存保存自回归模型已经处理过的注意力 Key 与 Value,使后续 token 不必重新生成全部历史 K/V;代价是缓存随有效上下文、层数、KV 头数、精度和同时活跃序列增长。部署时不能只套一个公式:先从模型配置算结构容量,再用短、中、长输入与三档并发测峰值显存、首 token 时间、逐 token 时间、吞吐、排队、抢占和质量,最后给碎片、工作区与异常峰值留余量。
本文服务一个明确任务:给定模型结构和业务负载,算出可审计的 KV 缓存预算,判断 PagedAttention、GQA、KV 量化、前缀缓存或换出分别解决什么问题,并形成可回滚的容量验收。文中的数值是计算器确定性输出,不是目标 GPU、模型质量或厂商服务实测;任何采购和生产结论都必须在真实模型、引擎版本、硬件与脱敏负载上复测。

先把四种“缓存”分开
单次生成的 KV 缓存属于模型推理内部状态。模型完成输入预填充后,逐步生成新 token;每一步把新 token 对应的 K/V 追加到历史状态,并让当前 Query 读取允许关注的位置。它避免重复生成历史 K/V,但当前 Query 仍需与历史位置进行注意力计算,也仍要读取缓存。因此“启用 KV 缓存后每一步成本恒定”并不成立,长序列仍会增加读取量和注意力工作。
跨请求前缀缓存复用不同请求中完全相同且满足身份条件的前缀块。它节省的是重复预填充,不是后续解码本身;只有 token、父块、模型、适配器、多模态输入、位置与服务端身份规则匹配时才可能命中。用户看到相同文字并不等于服务端看到相同 token 序列,系统提示词、模板、空格、附件哈希或 LoRA 标识变化都可能让命中失效。
应用层响应缓存保存最终答案或工具结果,通常由业务键、有效期和失效规则控制。它可以完全跳过模型调用,但承担的是陈旧答案、权限继承、隐私和引用更新风险。API 计费缓存则是服务商定义的价格或账单口径,命中条件、折扣和保留期由其产品文档决定。不能用引擎内部的 KV 容量公式推导 API 账单,也不能把账单上的缓存 token 当作本地显存占用。
这四类机制的共同点只有“复用已有结果”。它们的存储位置、身份键、生命周期、质量风险、权限边界和计量方式不同。容量审计表必须把它们分列;否则“命中率高”可能只是响应缓存生效,却被误写成 GPU KV 复用;“缓存费用下降”也可能来自服务商计价,而不是显存策略改善。
KV 缓存为何能减少重复计算
自回归模型每次只确认下一个 token,但这个 token 的表示依赖此前上下文。对某一注意力层而言,已经处理过的位置对应的 K 与 V 在后续因果解码中不会因为未来 token 到来而重新定义,于是可以保存并复用。Hugging Face 的当前缓存解释把缓存组织为逐层的 Key/Value 张量,并强调 attention mask 长度必须与历史缓存加当前 token 的总长度一致;自己写解码循环时,cache position 也必须持续前进。
预填充与解码需要分开观察。预填充一次处理输入前缀,通常更能利用并行计算,但长输入会推高首 token 等待和瞬时工作量;解码逐 token 进行,更容易受内存带宽、调度、并发和缓存读取影响。一个优化可能降低预填充时间却不改变后续 token 速度,也可能提高批量吞吐但让单请求尾延迟变差。因此报告至少分开记录 TTFT 与 TPOT,不能只给“总耗时”。
KV 缓存并不保存“模型理解后的摘要”。它保存的是特定模型、特定层和特定位置下的数值张量。更换权重、位置编码策略、精度、适配器或部分推理配置后,旧缓存通常不能直接复用。进程重启、滚动升级和多副本调度也会改变缓存归属。任何跨版本复用都应由引擎明确支持并通过一致性测试,而不是由业务层猜测。
训练阶段不能因为推理缓存有效就照搬。训练需要为反向传播保留或重建不同中间状态,而且训练输入常并行处理;Hugging Face 文档明确提醒缓存面向推理。若训练脚本意外开启缓存,可能得到不符合预期的行为。排查训练显存应另建激活、优化器状态与梯度账本,不应把全部显存增长归因于 KV。
先判断通用公式是否适用
常见粗略公式是:字节数 = 2 × 缓存层数 × KV 头数 × 每头维度 × 有效 token × 每元素字节 × 同时保留序列数。系数 2 来自 K 和 V。它适用于每个相关层都按相同结构保存完整 K/V、序列互不共享、没有滑窗截断、没有混合注意力、没有量化元数据和额外状态的简化情形。公式的价值是建立可复核下界和敏感性分析,不是替代运行时测量。
第一项是缓存层数,不一定等于配置中的总层数。某些混合架构可能包含不同注意力层、滑动窗口层、状态空间层或根本不使用同一种 KV 结构的层。应读取模型配置与推理引擎实际解析结果,记录哪些层进入哪一类缓存组。若无法确认,计算器应拒绝给“精确容量”,只输出待核项,而不是默认所有层相同。
第二项是KV 头数。MHA 中 KV 头常与 Query 头相同;MQA 可能只有一组 K/V;GQA 介于两者之间。容量公式用 KV 头,不用 Query 头。GQA 论文解释的是分组查询的结构思想,但某个模型的真实头数仍以该版本配置为准。只看到“32 个注意力头”就把 32 代入,可能把 GQA 模型的缓存高估数倍。
第三项是每头维度,通常可由隐藏维度和 Query 头关系推导,但并非所有模型都允许安全推导。配置可能直接给 head dimension,也可能有非标准投影、低秩吸收或混合结构。遇到 MLA 等结构时,传统公式的“KV 头 × 头维”不再完整描述实际缓存,应改用引擎导出的缓存规格或运行测量。计算器必须允许标记“不适用”,而不是强行映射。
第四项是有效 token。它包含仍被保留的输入和输出位置,不等同于字符数,也不总等于声明的最大上下文。聊天模板、系统消息、工具定义、图片占位 token 和服务端附加内容都会进入实际 token 序列。滑动窗口或局部注意力可能只保留最近窗口,但全局层仍可能保留更长历史。容量测试应从服务端 token 计数和缓存占用取证,不能用中文字符粗估后直接采购。
第五项是每元素字节。FP16 与 BF16 通常按 2 字节理解,FP8 常按 1 字节做数据项估算,但量化比例、scale、对齐、混合层和内核要求会增加开销。KV 量化不等于权重量化:模型权重已经 4 bit,并不代表 KV 自动成为 4 bit。报告要分别列权重精度、激活精度、KV 精度和累积精度,并保留质量复核。
第六项是同时保留序列数,它与到达请求数不是同一概念。一个请求可能产生多个候选序列,连续批处理会在不同时刻容纳不同长度的序列,取消请求也可能尚未立刻释放全部块。并发容量规划应基于调度器同时活跃的序列和长度分布,而不是仅用每秒请求数乘平均长度。峰值尾部通常比均值更容易触发抢占或 OOM。

一个可复核的容量计算例子
假设仅用于演算的结构为 32 个缓存层、8 个 KV 头、每头维度 128、每元素 2 字节,每条序列保留 4096 token,同时保留 8 条互不共享的序列。代入公式得到 4,294,967,296 字节,也就是 4 GiB。若其他条件不变而有效 token 翻倍,结构估算翻倍;若 KV 头从 8 改为 4,估算减半。这里展示的是线性关系,不是对任何真实模型的配置声明。
本站随文计算器要求显式输入层数、KV 头、头维、字节数、token 和序列数,并输出单 token、单序列与总 GiB。它还要求用户勾选结构假设:是否完整注意力、是否所有层相同、是否无共享、是否无滑窗、是否无混合缓存。只要任一假设不成立,结果标为“结构参考值”,提醒转向引擎规格和实测。这样可以防止一个看似精确的小数掩盖输入不确定性。
计算后要建立来源台账。每个输入项记录配置键、文件或接口、模型修订哈希、引擎版本、读取时间和人工解释。例如 KV 头来自模型配置,最大模型长度来自服务启动参数,实际有效长度来自请求日志,缓存精度来自引擎参数。若同一字段在模型卡、配置和启动参数中冲突,先停止并解释覆盖顺序,不要挑较小数字让容量看起来够用。
容量预算建议分三层:结构估算、引擎可用缓存池、整机峰值。结构估算回答“理论上这些 K/V 数据有多大”;缓存池回答引擎实际分配多少 GPU 块;整机峰值还包含权重、工作区、图捕获、通信缓冲和其他进程。只有第三层能帮助判断是否接近 OOM,但它也必须与固定负载绑定,不能从空闲显存截图推断生产容量。
PagedAttention 解决碎片,不会消除逻辑容量
请求长度变化会让连续的大块预留产生内部浪费,也会让传统分配难以灵活共享。PagedAttention 论文把 KV 缓存按块组织,目标包括减少浪费并支持块共享。对容量规划而言,它主要改变物理管理方式:请求不必预留完整最大长度的连续区域,实际 token 增长时再分配块;但每个仍需保留的 token 状态依然占空间,不能把分页理解为“长上下文免费”。
块大小带来权衡。较大块可能减少管理开销,却让最后一个未填满块的浪费增加;较小块提高粒度,也可能增加元数据和调度成本。混合注意力模型还可能有多个缓存组,简单用“块数 × 块大小”推最大并发会出错。vLLM 当前缓存配置文档已经给出按组解析的容量字段,这说明验收应读取引擎最终解析值,而非仅复制启动参数。
分页后仍要测抢占、重算和排队。高并发时缓存池不足,调度器可能暂停部分序列、释放或换出状态,之后再恢复。用户看到的症状可能是 TTFT 或 TPOT 尾部突增,而不是立即 OOM。监控需要把缓存使用率与请求长度分布、调度事件、GPU 利用率、主机内存和错误日志对齐;只看平均吞吐容易掩盖少量长请求造成的尾部抖动。
论文中的吞吐提升属于其模型、硬件、基线和版本条件,不应直接写成本站或当前部署可获得的倍数。工程验收只把论文作为机制与研究证据;真实增益由同一模型、同一输入、同一采样、同一并发和同一硬件上的对照运行给出,并报告重复次数和尾部指标。
前缀缓存何时命中,何时不该共享
vLLM 当前设计按块 token、父块哈希以及额外身份信息计算前缀块标识。只缓存完整块意味着短差异可能影响后续命中,块边界也影响可复用范围。多模态输入需要把输入哈希纳入身份,LoRA 或其他适配器也应参与区分。部署报告应展示真实命中率的分母定义:是所有输入 token、可缓存 token、完整块,还是请求数;不同口径不可直接比较。
前缀规范化必须谨慎。把动态时间、请求 ID 或用户特有内容放在公共系统提示前面,会降低共享;调整模板顺序可能提高命中,但不能为了命中把不同权限、租户或政策上下文合并。工具定义、检索结果和隐私指令即使文本相似,也可能代表不同授权边界。缓存键必须服从权限模型,而不是让性能目标反过来修改安全语义。
跨租户前缀命中还可能形成时间侧信道:攻击者通过首 token 延迟差异猜测某个前缀是否已被其他请求处理。vLLM 当前安全文档明确记录这一风险,并提供可选的 cache_salt 来限制只在同一信任组内复用。这里的结论是控制要求,不是说加盐能解决全部侧信道。还需评估日志、指标、共享内存、错误信息、备份和运维权限。
删除和失效规则也要写清。用户删除会话后,应用数据库、响应缓存、向量库和推理 KV 的生命周期可能不同;短生命周期的 GPU 块不代表其他层已经删除。生产系统应定义取消请求、超时、滚动升级、模型切换、租户退出和安全事件时分别清理什么,并用可观察事件验证。不得把“进程最终会回收”替代明确的数据保留政策。
GQA、KV 量化、滑窗和换出分别改变什么
GQA 或 MQA从模型结构上减少需要保存的 KV 头。它能显著改变每 token 的结构容量,但通常不是部署者可以在不改模型的情况下切换的普通参数。把原生 MHA 模型运行时“改成 GQA”涉及权重结构与质量,不应由容量文章给出无依据的转换承诺。选型时读取模型配置,比较相同质量与任务条件,而不是只比较头数。
KV 量化降低每元素存储,但会引入量化和反量化路径、scale 元数据与兼容性限制。Hugging Face 缓存策略文档把量化缓存列为速度与内存的权衡,而不是无代价开关。验收需固定输出样本,检查事实、格式、数值、长距离引用和工具参数;同时记录 TTFT、TPOT 与吞吐。如果容量改善但关键质量回退,不能通过验收。
滑动窗口或局部注意力限制部分层可见的历史范围,从而约束这些层的缓存增长。它可能改变模型处理远距离信息的方式,具体行为由模型结构定义,不能对任意全注意力模型随意截断后宣称等价。混合模型可能只有部分层使用窗口,因此容量应按层组分别计算。质量测试要包含确实需要跨越窗口的信息,不要只用局部问答。
换出或分层缓存把完成的块转到主机内存或更慢层级,扩大可保留容量,但命中恢复需要传输。vLLM 当前换出指南说明 GPU 与较慢层之间存在异步搬运路径;实际延迟仍依赖总线、并发、块热度和平台支持。验收必须把换入等待、带宽占用、主机内存压力和故障恢复纳入,而不能只看 GPU 空闲增加。
减少最大上下文或限制并发是最直接的保护措施。它不漂亮,却容易解释和回滚。应基于业务任务分级:普通请求使用较短上限,只有确有长文档需求的队列进入长上下文池;峰值时用排队和背压保护,而不是让所有请求争抢到 OOM。限制策略必须在接口层返回可理解错误,并提供拆分、摘要或异步任务的替代路径。
九格负载矩阵怎么设计
输入长度至少分短、中、长三档,边界来自真实脱敏分布,而不是平均值随意切三段。短档验证常规交互,中档覆盖主体业务,长档覆盖合法高位请求。每档准备固定 token 数附近的多条样本,保存内容哈希、token 计数、模板版本、工具定义和质量检查点。不得为了获得漂亮结果只保留容易缓存的重复提示。
并发分单请求、常态和峰值三档。单请求用于理解基础路径;常态来自可审计的业务计划或现有有效会话,而不是爬虫请求;峰值是容量设计值并带持续时间。没有真实流量数据时可把它写成假设负载,但必须标注“规划场景”,不能声称是用户行为。到达方式也要固定:同时突发、恒定速率和阶梯升压会产生不同排队。
九个组合都记录相同指标。TTFT 从请求接收到首个输出;TPOT 或 inter-token latency 描述后续生成;吞吐同时给请求与 token 口径;显存记录空闲基线、峰值和采样方法;调度记录等待、抢占、重算与取消;错误记录 OOM、超时和非 2xx;质量记录任务检查点。平均值之外至少保留中位数和高分位,样本数不足时直接说明。
每次只改变一个主要因素,例如缓存精度、块大小、前缀缓存、最大长度或换出。模型权重、引擎版本、容器、驱动、硬件、采样参数、输入顺序、预热和重复次数保持一致。若必须同时升级版本,应把它作为新基线,而不是把全部差异归因于某个缓存开关。环境摘要和命令需去除密钥后保存。

从零开始的验收步骤
- 锁定对象。记录模型名称与修订、配置文件哈希、推理引擎与容器版本、GPU 型号和数量、驱动、KV 精度、最大上下文、张量并行、调度参数和前缀缓存策略。任何无法确认的字段进入阻断清单。
- 建立容量台账。从配置读取层组、KV 头、头维和精度;用随文计算器生成结构估算。对于 MLA、混合注意力或滑窗,按组计算或标记公式不适用,并记录引擎最终可用缓存 token 与块数。
- 准备负载。对短中长输入脱敏,保存哈希和 token 计数。定义常态与峰值并发及持续时间。质量检查点覆盖事实、格式、长距离依赖、工具参数和拒答边界,避免只检查输出是否非空。
- 采集空载基线。启动服务后先记录权重加载、图捕获和固定工作区占用。等待稳定,再跑统一预热。空载基线不计为 KV,但决定剩余空间;其他 GPU 进程必须记录或隔离。
- 运行九格矩阵。每格多次运行,保存原始时间戳、请求 ID、输入哈希、token 数、输出哈希、指标序列与错误。出现容量错误时保留触发前最后一档,不要自动重试到成功后隐藏失败。
- 做单因素对照。开启或关闭待评估策略,重新启动到可比状态,再运行同一矩阵。前缀缓存还要分别测冷请求、相同前缀热请求和只差少量动态字段的请求。
- 人工验收与回滚。比较质量、尾延迟、吞吐和峰值显存。任何关键质量回退、隔离无法证明、OOM、尾延迟越线或回滚失败都阻断上线。结果只适用于记录的版本和负载。
如何解释常见异常
结构估算明显小于运行占用。先确认你比较的是整机峰值还是缓存池;权重、CUDA 上下文、工作区、图捕获和其他进程都会占显存。再检查模型是否有额外层组、对齐、scale 元数据或多候选序列。不要用“框架浪费”作为未调查的结论,应把差值分解到可观察组件。
缓存池还有空间但请求排队。瓶颈可能是计算、调度限制、最大批 token、并行通信或服务层限流。缓存容量只回答可保留多少状态,不保证计算单元能及时处理。对齐 GPU 利用率、调度队列、prefill 与 decode 阶段、批大小和网络时间,确认等待发生在哪一层。
前缀命中率很低。检查模板、系统消息、动态字段、块边界、tokenizer、模型修订、适配器和多模态哈希;同时确认指标分母。不要在不了解权限边界时把用户内容搬到公共前缀。若业务输入天然差异大,低命中可能是合理结果,继续追求命中反而增加复杂度和泄露风险。
显存下降但速度没有改善。量化或换出可能增加转换和传输,系统也可能受计算或网络限制。分别观察 TTFT、TPOT 与吞吐,检查是否只是允许更高并发,而单请求没有加速。容量收益、延迟收益和成本收益应分开结论,不能用一个百分比概括。
短输入稳定,长输入质量下降。确认是否触发滑窗、截断、位置边界或量化误差;检查输入是否在服务层被裁剪。用包含远距离证据的固定样本比较基线和变更,并查看实际 token 计数。若无法证明信息仍在可见范围,先恢复基线,再调查模型结构与服务配置。
取消请求后显存不立刻下降。引擎可能保留块供复用、使用内存池或等待调度周期回收。判断泄漏需要观察稳定态与多轮请求,而不是要求驱动显示立即归零。与此同时,缓存保留策略必须符合隐私与租户约束;性能上的复用理由不能覆盖数据治理要求。
采购和上线决策表
| 问题 | 可接受证据 | 不能证明 | 失败动作 |
|---|---|---|---|
| 结构容量是否可控 | 配置来源、计算器输出、层组说明 | 真实峰值显存 | 补引擎规格或拒绝精确结论 |
| 常态并发是否稳定 | 固定负载的多次运行与尾部指标 | 未来真实用户分布 | 降低上限并持续观测 |
| 量化是否可用 | 同输入性能与质量对照 | 其他模型或任务质量 | 恢复原精度 |
| 前缀共享是否安全 | 身份键、salt、租户与清理测试 | 所有侧信道均消失 | 按租户禁用共享 |
| 换出是否值得 | 换入等待、带宽、主机内存与故障恢复 | 无条件低延迟 | 回到 GPU 池或收紧长度 |
| 是否需要扩容 | 整机峰值、尾延迟、队列与增长假设 | 供应商基准可直接复现 | 小规模 canary 后再采购 |
采购材料至少给出保守、中性和高位三种负载,而不是一个最大上下文乘最大并发的极端数。保守场景用于成本下界,中性场景对应业务计划,高位场景验证保护机制。每种场景写出长度分布、并发持续时间、质量门槛和停止条件。如果 Bing、站内分析或生产日志无法取数,就明确写“未取数”,不得用爬虫、IndexNow 或页面浏览计数冒充真实用户负载。
容量计算器的输入合同
计算器接受正整数层数、KV 头、头维、token 和序列数,以及允许的每元素字节。所有值必须带来源;零、负数、非整数和无法解释的小数直接拒绝。输出同时提供字节、MiB、GiB、单序列和单 token,用二进制单位避免 GB/GiB 混淆。计算器不联网、不读取凭据,也不会猜模型配置。
计算器还输出假设清单。用户需要确认是否所有缓存层同构、是否完整保留、是否序列独立、是否忽略块和量化元数据。如果存在滑窗或混合层,可分别运行多个层组后求和;如果引擎提供权威的每层缓存规格,应优先采用该规格。对于无法映射的架构,最诚实的结果是“公式不适用,需要运行测量”。
随文确定性测试只验证算术:上述 32 层例子必须得到 4 GiB;把 token 或序列翻倍必须使结果翻倍;非法输入必须失败。这些测试证明计算器没有在基本乘法和单位换算上出错,不证明输入配置正确,也不证明目标引擎会按该值分配,更不证明任何性能或质量结论。
上线后的监控与回滚
上线后把缓存容量、利用率、命中、逐出、抢占、重算和 OOM 与请求长度、并发、TTFT、TPOT、吞吐和质量告警关联。指标标签要控制基数,避免把完整提示词、用户标识或密钥写入监控。多租户场景按最小必要粒度分组;调查需要的原始记录应脱敏、限权并设置保留期。
预警分为容量、性能、质量和安全四类。容量告警关注持续高水位与块不足;性能告警关注尾延迟和排队;质量告警来自固定 canary 或人工抽检;安全告警关注跨租户命中、异常探测模式和清理失败。单一高命中率不是健康指标:它可能与陈旧模板、过度共享或侧信道风险同时出现。
回滚包包含旧配置、容器或发布版本、启动参数、缓存精度、块和长度限制、流量切换步骤、健康检查和数据清理动作。演练必须验证旧版本能重新加载、请求能切回、缓存状态不会跨不兼容版本误用。若回滚依赖重新下载大权重,应把恢复时间和离线副本纳入,而不是只写“恢复配置”。
变更后先走小比例 canary,使用明确允许的测试流量或内部样本,不制造搜索点击或伪装用户。canary 只证明记录条件下的技术行为,不能证明自然搜索、商业收益或全部生产场景。达到观察窗口后再扩大;任何关键质量、安全或恢复条件失败都立即停止。
怎样从模型配置和服务启动项取得可靠输入
容量计算最容易出错的环节不是乘法,而是把名称相近但含义不同的字段填进公式。应先锁定模型仓库、修订哈希、配置文件哈希和推理引擎版本,再建立“原始字段—采用值—转换规则—证据位置”四列表。层数通常来自隐藏层数量,但混合架构要进一步标记哪些层实际建立完整 KV、哪些层使用滑动窗口或其他状态;注意力头数量必须区分查询头与 KV 头;头维如果不是配置直接给出,只能在结构明确时由隐藏维度和查询头数推导。任何推导都写入台账,不能只留下最后一个数字。
模型卡中的最大上下文只是能力声明,不等于服务实际允许的长度。服务启动项、引擎默认值、路由层限制、聊天模板和网关请求上限都可能形成更小边界。验收时同时记录模型声明上限、引擎解析上限、服务配置上限和请求实际 token 数,并解释谁覆盖谁。若启动日志显示引擎因为显存或结构限制自动收紧长度,应以最终解析值为容量入口,并把自动收紧作为告警,而不是继续用宣传页数字计算。
缓存精度也需要从运行配置取证。权重文件名中的四位或八位量化不能推导 KV 精度;混合精度服务还可能让不同缓存组采用不同数据类型。记录启动参数、引擎最终配置、运行日志和指标暴露的缓存类型;若只有命令行意图而没有运行确认,台账标记“请求值,未确认生效”。量化比例、缩放值、对齐和元数据的实际开销由缓存池分配和整机峰值补足,不在基础公式中假装精确。
有效 token 要从服务端分词结果取得。中文字符、英文单词、字节和 token 之间不存在固定换算;系统提示、工具描述、检索片段、附件占位、多轮模板与输出都会占用长度。负载样本应保存脱敏后的输入哈希、模板版本、tokenizer 标识、输入 token、目标输出上限和最终输出 token。这样当容量偏差出现时,才能区分“字符估算错”“模板膨胀”“输出过长”与“引擎额外开销”。
对于无法映射到传统层数乘头数公式的结构,停止给出伪精确结果。可以把已确认的普通注意力层组单独计算,把未知组标为待测,然后通过空载基线、逐级长度和逐级并发的显存差分估计实际斜率。差分法仍受内存池、图捕获和碎片影响,因此应多次运行、回到基线并报告区间。它是运行观察,不是对内部张量结构的证明。
张量并行、流水并行和多副本下如何避免重复计算容量
单卡公式给出的是逻辑 KV 数据量,分布式部署还要回答这些数据怎样切分或复制。张量并行可能让注意力头或相关投影分布到多张设备,但具体 KV 布局取决于模型结构和引擎实现;不能简单用总量除以设备数。流水并行通常按层分段,某张卡只承载部分层,却还要承担本段权重、工作区和通信缓冲。数据并行或多服务副本往往各自拥有缓存池,整集群容量不能因为请求只进入一个副本就漏算其他副本的预留。
容量报告至少给出逻辑总量、每设备缓存池、每设备整机峰值和集群副本数四个层级。每设备观测要绑定设备编号、并行拓扑、进程、模型修订和启动参数;集群层再记录路由策略、会话粘性和扩缩容规则。若会话在副本间迁移,旧副本上的状态何时释放、新副本是否重新预填充、迁移期间是否双占都要进入峰值测试。只截取一张空闲卡的显存图无法回答这些问题。
多租户路由会影响前缀复用和容量均衡。强粘性可以提高同一会话命中,却可能造成热门副本积压;随机路由有利于分散请求,却会重复预填充并降低前缀命中。验收应在相同总到达率下比较至少两种允许的路由策略,同时观察每副本长度分布、缓存高水位、排队、抢占和失败。目标不是追求最高命中率,而是在隔离、尾延迟和资源利用之间给出可解释选择。
扩容和缩容必须把缓存预热与清理算进恢复时间。新副本刚启动时没有热前缀,首 token 时间可能暂时升高;缩容时如果立即终止仍在生成的请求,会造成重复输出或业务重试。安全方案先停止接收新请求,等待或迁移在途请求,在限定时间后终止并确认缓存、临时文件和日志处理完成。若引擎不支持安全迁移,就明确采用重算,并让客户端幂等处理。
把租户隔离、删除和侧信道纳入缓存验收
缓存优化不能绕过授权模型。首先定义信任组:同一组织、同一项目、同一敏感级别或完全不共享。缓存键除了 token 块,还应纳入模型修订、适配器、多模态输入、工具集合和能够区分信任组的身份信息。若某些字段没有进入引擎缓存身份,就在路由层物理或进程隔离,不能依赖“文本大概不同”降低误命中概率。
前缀命中可能暴露时间差异。测试人员可在授权环境中构造冷前缀、同租户热前缀和跨租户相同前缀,比较首 token 延迟、命中指标和日志。通过条件不是延迟完全相同,而是跨租户请求不能复用不被允许的状态,指标和运维界面也不能泄露其他租户的前缀内容。可选 salt 只是身份控制的一部分;密钥生成、轮换、存储、日志脱敏和事故撤销仍需单独设计。
删除请求应拆成多个存储层验证。用户删除会话后,应用数据库、对象存储、向量库、响应缓存、队列、追踪日志和推理 KV 可能有不同生命周期。为每层写明责任人、触发事件、最长保留、验证方法和失败升级。短寿命 GPU 块通常会被重用或回收,但这不能证明其他持久层已经删除;反过来,数据库删除也不会自动清理正在运行请求的内存状态。
日志和指标不得记录完整提示词、身份令牌、工具密钥或可逆的个人内容。为了分析命中与容量,可保存经过批准的请求类别、长度桶、模板版本、租户匿名标识和不可逆输入哈希,并控制标签基数。需要原始样本的故障调查应使用单独的受控流程,限定访问者、目的和保留期。观测便利不能成为扩大收集范围的理由。
隔离验收一旦失败,应立即停用跨请求共享或切换到更窄信任组,清理相关缓存并保留不含敏感正文的事件证据。之后复核路由、身份键、salt、适配器和多模态哈希是否都参与缓存标识。没有完成影响范围判断前,不把高命中率或吞吐收益作为继续开放共享的理由。
九格负载怎样记录,怎样形成可复核结论
九格矩阵由短、中、长三档有效长度与单请求、常态并发、峰值并发三档负载组合。长度档不应随意等分最大上下文,而应来自真实任务计划或明确的测试设计;无法取得生产数据时写“未取数”,使用假设样本并显著标记。并发档也要写持续时间、到达模式和上限保护,避免一次瞬时请求被描述为稳定并发。
每一格固定模型修订、引擎版本、容器镜像、硬件、并行拓扑、缓存策略、采样参数、输入集合和预热方式。输入只保存允许留存的脱敏样本或哈希;输出执行任务相关的质量检查,而不是仅确认接口返回二百。重复运行次数和统计口径预先确定,至少同时报告中位数与高分位,避免用一次最好结果代表常态。
每格记录输入与输出 token、TTFT、TPOT、端到端耗时、吞吐、排队时间、每设备峰值显存、缓存池占用、命中、逐出、抢占、重算、换入换出、错误和 OOM。质量列根据任务选择事实核对、格式、数值、远距离引用、工具参数或人工评分。性能与质量使用同一批输入,才能防止为了速度改变输出条件后仍声称可比。
测试顺序先跑基线,再只改变一项策略,例如启用前缀缓存、调整块、改变 KV 精度或开启换出。每次变更前确认旧状态已经清理或明确保留,变更后先跑短低并发 canary,再扩展到完整矩阵。若同时改变模型、量化、并发和模板,即使结果变好也无法归因,不能进入采购或上线结论。
停止条件在测试前写入:关键质量样本失败、跨租户错误命中、任何未预期 OOM、尾延迟超过业务门槛、错误率持续越线、主机内存或传输带宽异常、回滚无法在目标时间恢复。触发后保存配置、指标窗口和脱敏错误,回到基线确认恢复;没有恢复基线就不继续下一格。最终结论逐格注明通过、失败、未测和不可比,空白不得解释为通过。
这套矩阵的价值是把“显存够不够”转成容量、性能、质量和安全的共同合同。算术计算器负责发现明显不可能的配置,九格矩阵负责验证运行边界,持续监控负责发现真实分布漂移。三者缺一都不能支撑长期生产结论,也不能用论文或厂商基准替代本站环境的运行证据。
最终检查清单
- 已区分单请求 KV、跨请求前缀、应用响应和 API 计费缓存。
- 层数、KV 头、头维、精度、有效 token 与活跃序列都有来源。
- 已识别 GQA、MLA、滑窗、混合层与多模态等公式边界。
- 结构估算、引擎缓存池和整机峰值分别记录,不互相替代。
- 短中长输入和单、常态、峰值并发的九格矩阵已定义。
- TTFT、TPOT、吞吐、显存、排队、抢占、重算、OOM 与质量同时验收。
- 前缀缓存的租户身份、salt、清理和时间侧信道边界已评估。
- 每次只改一项主要策略,并保留原配置、输入哈希和原始输出。
- 没有把论文、厂商基准、算术夹具或空表写成本站硬件实测。
- 回滚能在限定时间恢复旧版本、流量和数据边界。
证据与时效边界
本文于 2026 年 9 月 23 日重新核验 Hugging Face Transformers 缓存解释与策略、vLLM 当前前缀缓存设计、缓存配置与安全文档,以及 PagedAttention 与 GQA 原始论文。官方文档证明相应版本公开描述的接口与设计;论文证明作者在特定实验条件下报告的方法和结果。它们不证明本站运行了相同硬件,也不保证未来版本参数不变。
读者部署时应重新打开目标模型配置和推理引擎文档,核对版本、支持后端、精度、缓存布局、滑窗、并行和安全选项。本文的独立价值是把公式输入、九格负载、质量检查、隔离与回滚串成同一套验收合同,而不是宣称某个引擎永远更快。若只需要理解术语,可先读本文前半;若要采购或上线,必须完成计算器台账和真实负载矩阵。
官方与原始来源:Hugging Face 缓存解释、Hugging Face 缓存策略、vLLM 前缀缓存设计、vLLM 缓存配置、vLLM 安全文档、PagedAttention 论文、GQA 论文。相关下一步:本地与云端部署成本验收、本地大模型配置与显存估算、梯度消失诊断。
