Appearance
📰 概要
Scaling Laws的路上,到处是隐形坑。
智谱在2026年5月1日发布技术博客,大倒苦水:GLM-5发布以来,团队每天服务数亿次Coding Agent调用,发现了三类异常——乱码、复读、罕见字符生成。
更头疼的是:在线下环境反复测试,根本无法触发异常。但在真实线上环境,每10000个请求大约能复现3-5个异常输出。
排查数周后,智谱揪出真凶:KV Cache回收复用时序与请求生命周期的竞态条件。简单说就是:当多个请求同时运行时,缓存资源的管理逻辑在高并发下出现了不同步。
他们还给出了在线监控策略和具体优化方案。
🔍 解读
这个案例最值得注意的,是智谱没有藏着掖着。
很多公司遇到这种"线下复现不了"的问题,要么悄悄修、要么推到模型头上。但智谱选择写成技术博客公开分享,还给出了实操性很强的避坑指南。
乱码和生僻字的特征是spec_accept_length非常低——投机采样中,小模型生成的草稿被大模型拒绝率高,说明KV缓存状态与草稿模型之间存在明显不匹配。
复读的特征相反:spec_accept_length过高,说明损坏的KV缓存导致注意力模式退化,生成过程被推向高置信度的重复循环。
这两个信号都可以通过在线监控捕捉到。
💎 深挖
竞态条件的根因
智谱将问题归因于:请求生命周期与KV Cache回收复用时序之间的不一致,引起的KV Cache复用冲突。
推理引擎中的PD分离架构,在高并发请求同时执行时可能出现问题。请求A被分配一块KV缓存,请求B同时申请资源,系统可能复用这块还没完全释放的缓存——导致数据污染。
这不是模型的问题,是推理架构的问题。所以你在标准推理环境里怎么测都测不出来,只有高负载场景才会触发。
在线监控策略
智谱总结了一套在线异常监控策略:
当spec_accept_length持续低于1.4且生成长度超过128 token,或者spec_accept_rate超过0.96,系统主动中止当前生成,将请求交回负载均衡器。
这两个阈值是通过分析大量异常样本得出的特征值。乱码和复读在出现前都有明显的投机采样指标异常,可以提前介入。
LayerSplit吞吐提升方案
智谱通过LayerSplit将Prefill和Decode分离部署,KV Cache完全隔离,消除了跨请求的缓存复用冲突。
实测数据:不同输入长度下,吞吐提升10%-132%。输入长度越长,收益越明显。
你能学到什么
什么情况不建议用这套监控策略:如果你的推理系统面向低并发、批量离线推理场景,对延迟不敏感——标准推理框架就够用了,这套在线监控策略反而增加了系统复杂度。
但如果你的场景是:高并发Coding Agent、每天服务百万级以上请求、你对生成质量敏感——智谱的这套方案值得参考。
