AI概念与词典

KV 缓存要多少显存?从模型配置到并发验收的计算指南

用可审计公式估算KV缓存,区分前缀复用、分页、量化与换出,并用九格负载矩阵验收显存、延迟、质量和隔离。

KV 缓存从预填充、逐步解码到服务回收的生命周期
本页目录
  1. 先把四种“缓存”分开
  2. KV 缓存为何能减少重复计算
  3. 先判断通用公式是否适用
  4. 一个可复核的容量计算例子
  5. PagedAttention 解决碎片,不会消除逻辑容量
  6. 前缀缓存何时命中,何时不该共享
  7. GQA、KV 量化、滑窗和换出分别改变什么
  8. 九格负载矩阵怎么设计
  9. 从零开始的验收步骤
  10. 如何解释常见异常
  11. 采购和上线决策表
  12. 容量计算器的输入合同
  13. 上线后的监控与回滚
  14. 怎样从模型配置和服务启动项取得可靠输入
  15. 张量并行、流水并行和多副本下如何避免重复计算容量
  16. 把租户隔离、删除和侧信道纳入缓存验收
  17. 九格负载怎样记录,怎样形成可复核结论
  18. 最终检查清单
  19. 证据与时效边界

直接答案:KV 缓存保存自回归模型已经处理过的注意力 Key 与 Value,使后续 token 不必重新生成全部历史 K/V;代价是缓存随有效上下文、层数、KV 头数、精度和同时活跃序列增长。部署时不能只套一个公式:先从模型配置算结构容量,再用短、中、长输入与三档并发测峰值显存、首 token 时间、逐 token 时间、吞吐、排队、抢占和质量,最后给碎片、工作区与异常峰值留余量。

本文服务一个明确任务:给定模型结构和业务负载,算出可审计的 KV 缓存预算,判断 PagedAttention、GQA、KV 量化、前缀缓存或换出分别解决什么问题,并形成可回滚的容量验收。文中的数值是计算器确定性输出,不是目标 GPU、模型质量或厂商服务实测;任何采购和生产结论都必须在真实模型、引擎版本、硬件与脱敏负载上复测。

KV 缓存从预填充、逐步解码到服务回收的生命周期
兰塞 AI 原创生命周期图。它解释状态如何产生、读取和释放,不表示某个推理引擎的耗时测量。

先把四种“缓存”分开

单次生成的 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。

KV 缓存显存预算由模型结构、请求负载和运行余量三部分组成
兰塞 AI 原创容量台账图。公式给出结构部分,块管理、权重、工作区和异常峰值仍需运行测量。

一个可复核的容量计算例子

假设仅用于演算的结构为 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;质量记录任务检查点。平均值之外至少保留中位数和高分位,样本数不足时直接说明。

每次只改变一个主要因素,例如缓存精度、块大小、前缀缓存、最大长度或换出。模型权重、引擎版本、容器、驱动、硬件、采样参数、输入顺序、预热和重复次数保持一致。若必须同时升级版本,应把它作为新基线,而不是把全部差异归因于某个缓存开关。环境摘要和命令需去除密钥后保存。

KV 缓存九格负载验收的固定项、记录项和停止条件
兰塞 AI 原创验收矩阵。空表是测试计划,只有实际运行并保存输入、环境与输出后才能称为实测。

从零开始的验收步骤

  1. 锁定对象。记录模型名称与修订、配置文件哈希、推理引擎与容器版本、GPU 型号和数量、驱动、KV 精度、最大上下文、张量并行、调度参数和前缀缓存策略。任何无法确认的字段进入阻断清单。
  2. 建立容量台账。从配置读取层组、KV 头、头维和精度;用随文计算器生成结构估算。对于 MLA、混合注意力或滑窗,按组计算或标记公式不适用,并记录引擎最终可用缓存 token 与块数。
  3. 准备负载。对短中长输入脱敏,保存哈希和 token 计数。定义常态与峰值并发及持续时间。质量检查点覆盖事实、格式、长距离依赖、工具参数和拒答边界,避免只检查输出是否非空。
  4. 采集空载基线。启动服务后先记录权重加载、图捕获和固定工作区占用。等待稳定,再跑统一预热。空载基线不计为 KV,但决定剩余空间;其他 GPU 进程必须记录或隔离。
  5. 运行九格矩阵。每格多次运行,保存原始时间戳、请求 ID、输入哈希、token 数、输出哈希、指标序列与错误。出现容量错误时保留触发前最后一档,不要自动重试到成功后隐藏失败。
  6. 做单因素对照。开启或关闭待评估策略,重新启动到可比状态,再运行同一矩阵。前缀缓存还要分别测冷请求、相同前缀热请求和只差少量动态字段的请求。
  7. 人工验收与回滚。比较质量、尾延迟、吞吐和峰值显存。任何关键质量回退、隔离无法证明、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 论文。相关下一步:本地与云端部署成本验收、本地大模型配置与显存估算、梯度消失诊断。