量子位 1小时前
智谱公布“降智”的秘密:Scaling不可避免的痛
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_keji1.html

 

Scaling 即正义?智谱挠了挠头——

很痛苦,而且压力山大……

智谱最新发布的一篇技术博客,画风稍微有点不一样:

没有过去的硬核技术输出,反而大倒苦水从 GLM-5 以来的各种花式踩坑,官方称之为「Scaling Pain」

我们的推理基础设施正承受着前所未有的压力,每天都要服务数亿次 Coding Agent 调用。

过去几周,一些用户在使用 GLM-5 系列模型执行复杂 Coding Agent 任务时,遭遇多种异常,比如乱码、复读和罕见字符生成。

而且这些问题在标准推理环境中压根复现不出来!!!

排查数周,团队终于揪出真凶,彻底戳破Scaling Laws路上的隐形 Bug。

不仅详细总结了自身遭遇的昂贵教训,还给出了一套极具实操性的避坑指南。

简单来说,如果屏幕前的你正打算给自己的 Agent 加码,那么这篇来自一线实战的经验总结,建议先反复阅读背诵~

定位关键 Bug

事情是酱紫的——

自从 GLM-5 发布以来,智谱通过观察用户的大规模 Coding Agent 推理过程,发现了三类异常现象:

乱码输出:内容杂乱无意义;

重复生成:模型不断重复输出相同内容;

生僻字:出现异常字符。

这引起了团队工程师的警觉,于是说干就干,先是通过本地回放用户反馈,重复运行相同请求数百次,结果始终无法触发异常。

换言之,模型本身并非根本原因。

在进一步模拟在线环境后,团队尝试调整 PD 分离比例并持续提高系统负载,异常现象终于得以复现,在每 10000 个请求中大约能复现出 3-5 个异常输出。

这说明,异常现象很有可能出自高负载下的推理状态管理,指向底层推理链路。

但同时也引出了另一个问题,线下的复现率仍低于用户线上反馈的频率,这就意味着现有的检测方法存在遗漏或触发条件尚未完全覆盖。

于是智谱团队继续对异常输出的检测方法进行优化。他们发现投机采样(Speculative Decoding)指标可作为异常检测的重要参考。

投机采样原本用于提升模型推理性能,它先由小模型生成草稿(draft tokens),再由大模型验证是否接受这些 token,最终能够在不改变输出分布的情况下提升 decode 效率。

而在 GLM-5 的三类异常中,乱码和生僻字的 spec_accept_length 非常低,也就是说目标模型的 KV 缓存状态与草稿模型之间存在明显不匹配。

复读则拥有过高的 spec_accept_length,表明损坏的 KV 缓存可能导致注意力模式退化,将生成过程推向高置信度的重复循环。

基于以上观察,智谱总结出了一套在线异常监控策略

当 spec_accept_length 持续低于 1.4 且生成长度超过 128 token,或者 spec_accept_rate 超过 0.96,系统就会主动中止当前生成,并将请求重新交回给负载均衡器。

紧接着,智谱开始进一步解析异常原因:

PD 分离架构下的 KV Cache 竞态

团队通过分析请求生命周期和推理引擎中的 PD 分离执行时序,将问题归因于请求生命周期与 KV Cache 回收与复用时序之间的不一致,从而引发的 KV Cache 复用冲突。

为了消除这类竞态情况,研究人员在推理引擎中引入了更为严格的时序约束,会在请求终止和 KV Cache 写入完成之间建立显式同步

具体来说,在发出中止指令后,解码阶段会向预填充阶段发送通知。预填充阶段只有在满足以下任一条件时才会返回安全回收信号:未启动任何 RDMA 写入,或所有先前发出的写入操作已完全完成。而解码阶段只有在收到此确认后才会回收并重用相应的 KV Cache 槽位。

该机制将确保 KV Cache 写入不会跨越内存复用边界,从而避免跨请求的 KV Cache 损坏。

最终修复该 bug 后,异常输出的发生率从约万分之十几下降至万分之三以下。

HiCache 加载时序缺失

此外,当 KV Cache 换入与计算重叠时,当前实现未能保证数据在使用前已完成加载,导致可能出现未就绪 KV Cache 被访问的情况。

为解决这一问题,团队重构了 HiCache 读取流程,同时引入数据加载与计算之间的显式同步约束。

在启动 Indexer 算子之前,先插入一个 Load Stream 同步点,确保相应级别的 Indexer 缓存已完全加载。Forward Stream 只有在数据准备就绪后才会进行计算,从而消除了 read-before-ready 的问题。

应用此修复后,在相同的工作负载条件下,由执行时序不一致引起的异常被消除,系统终于得以稳定。

Prefill 侧优化

事实上,这两种 Bug 都指向了同一个常见的系统瓶颈:

在长上下文的 Coding Agent Serving 任务中,Prefill 阶段已经成为影响系统性能的主要因素。

于是为了缓解 Prefill 阶段在高并发下的内存和带宽压力,团队另外设计了 KV Cache 分层存储方案——LayerSplit

在该方案中,每个 GPU只存储部分层的 KV Cache,显著降低了每个 GPU 的内存占用。然后在执行 Attention 计算前,将对应层的 KV Cache 广播给其他相关 rank。

为了降低通信开销,还进一步设计有 KV Cache 广播与 indexer 计算的重叠机制,将通信延迟隐藏在计算过程中。这样唯一的额外通信开销就来自 Indexer Cache 的广播,其大小仅为 KV Cache 的八分之一,整体通信成本可以忽略不计。

团队将 LayerSplit 和GLM-5.1结合发现,在 Cache 命中率达到 90%、请求长度在 40k 到 120k 区间内时,系统吞吐量提高了 10% 到 132%,且随着上下文长度的增加,收益也随之增长。

总体而言,该优化显著提升了系统在 Coding Agent 场景下的处理能力。

同时智谱也认为,当智能真正进入高并发、长上下文的 Coding Agent 场景后,维护推理基础设施的输出质量变得至关重要。未来大规模 AI 需要的不仅是 Scaling Law 推动的能力增长,还必须有等量级的系统工程支撑。

参考链接:

[ 1 ] https://z.ai/blog/scaling-pain

[ 2 ] https://www.zhipuai.cn/zh/research/159

—  欢迎 AI 产品从业者共建  

「AI 产品知识库」是量子位智库基于长期产品库追踪和用户行为数据推出的飞书知识库,旨在成为 AI 行业从业者、投资者、研究者的核心信息枢纽与决策支持平台。

一键关注 点亮星标

科技前沿进展每日见

宙世代

宙世代

ZAKER旗下Web3.0元宇宙平台

一起剪

一起剪

ZAKER旗下免费视频剪辑工具

相关标签

基础设施
相关文章
评论
没有更多评论了
取消

登录后才可以发布评论哦

打开小程序可以发布评论哦

12 我来说两句…
打开 ZAKER 参与讨论