6.3 缓存的隐性成本:显存、溢价与失效重建


文档摘要

6.3 缓存的隐性成本:显存、溢价与失效重建 6.2 的盈亏平衡算得漂亮,前提是只算了明面上的钱——token 费降了、回本月数出来了。可显存、写溢价、失效重建这三笔账一旦漏掉,回本承诺就会变成乐观的假象。这一节把缓存的持有成本和交易摩擦逐项翻开算:它占的不是免费的仓库,而是你本可以用来多接请求的显存;它不是只省不花,每次 miss 都偷偷贴一笔写入税;它更不是一劳永逸,前缀一变就得全量重写。算清这三笔半账,缓存才从"省钱神器"变回"有成本的工程决策"。 显存被挤掉的那部分并发 缓存要落地,KV 就得常驻显存。第2章给过 KV 显存公式:单 token 的 KV 占用 ≈ 2 × 层数 × 隐维度 × 每元素字节数(半精度下每元素两字节)。

6.3 缓存的隐性成本:显存、溢价与失效重建

6.2 的盈亏平衡算得漂亮,前提是只算了明面上的钱——token 费降了、回本月数出来了。可显存、写溢价、失效重建这三笔账一旦漏掉,回本承诺就会变成乐观的假象。这一节把缓存的持有成本和交易摩擦逐项翻开算:它占的不是免费的仓库,而是你本可以用来多接请求的显存;它不是只省不花,每次 miss 都偷偷贴一笔写入税;它更不是一劳永逸,前缀一变就得全量重写。算清这三笔半账,缓存才从"省钱神器"变回"有成本的工程决策"。

显存被挤掉的那部分并发

缓存要落地,KV 就得常驻显存。第2章给过 KV 显存公式:单 token 的 KV 占用 ≈ 2 × 层数 × 隐维度 × 每元素字节数(半精度下每元素两字节)。以一个七十亿参数模型为例,层数三十二、隐维度四千零九十六,单 token KV ≈ 2×32×4096×2 ≈ 五十二万字节,也就是约 0.5 兆字节每 token。这个数字看着小,乘上并发就吓人。

假设一张卡留给 KV 的预算是二十四吉字节。不缓存时,每个并发请求占用自己整条序列的 KV,平均序列四千 token,就是约两吉字节每请求,这二十四吉字节能撑起十二路并发。现在你为提升命中率,把共享前缀(两千 token)整段常驻缓存池——这段前缀的 KV 约一吉字节,且被所有命中请求共享复用,看起来省了每请求那两千 token 的重复计算。但它占掉的一吉字节是从并发池里硬切出来的:并发预算变成二十三吉字节,可承载并发降到约十一路?不对,要更狠地看真实案例——下面那家企业把前缀段加长一倍,缓存池吃到八吉字节,并发预算只剩十六吉字节,并发直接掉到八路。

关键账在这里:缓存省的是"重复计算那两千 token 的算力时间",但它用"常驻一吉字节显存"去换。显存是租金,换算成并发容量就是钱。当命中率提升带来的算力节省,抵不过并发下降导致的吞吐损失时,单位请求成本反而上升。这层隐性成本在 6.2 的回本表里完全看不见,因为它不出现在 token 账单上,只出现在"同样硬件能接多少量"的容量账上。

每次 miss 都贴的写入税

6.1 提过缓存写价,6.2 也把它折进了有效单价。但这里要单独强调它的"隐性"属性:写税只在未命中时发生,而业务的未命中往往集中在流量峰值的长尾请求上。高峰期为了接住突发,你不得不扩容;扩容后命中率若没同步上来,写税总量随请求量线性放大,峰值月费的尾巴会被这笔税悄悄拉长。更烦的是写税和命中率是负相关的——你越想靠加长前缀提命中率,写占比 w_r 反而可能上升(因为更多请求被判定"值得写"),写税吃掉的那部分节省就更多。所以有效单价公式里的第三项不是装饰,它是命中率曲线的天花板,也是月节省被低估的主要来源。

前缀一变,全量重写

提示缓存通常按固定前缀命中。业务一旦改 prompt 模板、加系统指令、换版本号,旧前缀失效,缓存池里那批 KV 全部作废,下一次命中前要全量重新计算并写入。这笔账有两层:一是失效当期的算力浪费(本该命中却全 miss,按全价付);二是重建期的延迟尖刺(冷启动时首字延迟飙升,可能触发超时和重试,重试又加倍费 token)。很多团队在大促或发版当天看到成本曲线异常,根因就是缓存被发版清零、当晚全量重建。这层隐性成本在月度报表里会被"平均命中率"抹平,只有按小时看才暴露——所以它既隐性,又猝不及防。

养缓存的人力和事故账

网关要开发统一接入与回退逻辑,监控要建命中率、写税、失效事件的看板,事故要有人处理(缓存污染导致错误回答、缓存雪崩导致全量回源)。这三样都是持续人力,归入 6.1 自建账里的"运维人力"项,但在 API 视角下它根本不在厂商账单上,容易被技术负责人忘算。我的经验账是:缓存相关的人力运维,第一年约占改造投入的三到四成,且逐年不降——因为业务越复杂,缓存策略越要调。把它当一次性买断来算回本,是第三种常见虚低。

翻车复盘:为提命中率反而推高单位成本

背景:某中台团队月调用两亿次,原缓存前缀两千 token、命中率四成,显存预算二十四吉字节撑十二路并发,单位请求成本记为一基准值。操作:为冲命中率,把缓存段从两千 token 加长到四千 token,缓存池显存占用从一吉字节涨到八吉字节。结果:命中率只从四成爬到四成半(长尾请求本就难缓存,加长前缀边际收益很低),但并发容量从十二路掉到八路,高峰期被迫扩容零点五张卡。解读:加长前缀换来的那点命中率增益,节省的 token 费远不够覆盖扩容卡租;真正亏在显存挤掉并发导致的容量账。变式:若他们不是加长前缀,而是把可缓存的长尾请求单独路由到缓存策略更激进的通道,命中率同样能提到四成半,却不挤占主池显存——同样的目标,账完全不同。这个案例说明:提命中率有无数条路,只有把显存当租金、把并发当产能的那条路,才算得清真实净收益。

一道写税的小算术

写税最容易被低估,值得单独算一道。假设读价约为常规价的十分之一、写价比常规价高四分之一:命中率八成时,每十个请求里八个走读价、两个全价加写税——那两笔写税合计相当于零点五笔全价请求,写税占总支出约一成;若命中率跌到五成,写税占比直接翻倍以上。也就是说,命中率每掉一档,写税不是线性增长而是加速增长,因为更多的 miss 同时意味着更多的"全价+溢价"组合。把这条曲线画在预算表旁边,你就明白为什么 6.2 的盈亏平衡点对命中率如此敏感——写税是平衡点右移的隐形推手。

四类隐性成本对照

把上面四笔账并到一张表,做预算时逐项打勾,才不会在回本承诺上翻车。

隐性成本 发生在哪 怎么量化 在哪种账上隐形 缓解手段
显存挤占并发 缓存常驻占用 KV 预算 用 KV 公式反推损失并发路数×卡租 不出现在 token 账单,只在容量账 前缀只缓存高复用段,分池隔离
写入税 每次未命中首写 写价×写入量,随请求量放大 折进有效单价但易被低估 控制写占比,长尾不写
失效重建 发版/改 prompt 当天 失效期全价 miss + 延迟尖刺重试 被月平均命中率抹平 灰度发版,缓存版本化
运维与事故 全年持续 人力月成本 + 事故处理工时 API 账单完全没有 网关与监控标准化,减少定制

隐性账翻完,一笔缓存改造的真实净收益才算露全貌:明账省下的 token 费,减掉显存租金、写税、重建浪费、养人成本,才是能写进回本表的数。下一节我们不只看这个数对不对,还要把它变成一张月末财务能对账的报表。


作者与出处
原作者: 灏天文库
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U