

▲唐杰长文部分截图(图源:X平台)

▲GLM-5.3 Flash的性能演进
是某个算子执行时间过长,还是计算设备处于空闲等待状态?
是KV Transfer本身性能不足,还是上层调度未能及时推进传输?
某项优化对哪些输入形状有效,又会在哪些条件下发生退化?

▲基于稠密反馈的 Infra Agent 优化闭环。
推理性能优化必须以数值正确性为前提。对于Agent,验证从明确推理引擎实际执行了哪些计算开始。高层并行策略会改变算子的输入切分、执行路径和结果组合方式;仅验证一个算子在非切分条件下的输出,还不足以覆盖它在实际部署中的行为。
为此,我们建立了推理引擎并行策略到算子实现的映射,将系统层面的部署配置转化为Agent可以逐项验证的算子任务。这一映射帮助Agent明确:一种并行配置涉及哪些算子,输入如何被切分,以及哪些计算路径需要与非切分实现进行对照。
在此基础上,我们组织Agent对不同并行切分与非切分路径进行精度比较。对于同一组输入,在对齐计算语义与输出位置后,检查不同执行方式产生的结果是否满足数值误差要求。这样,并行配置、算子路径和误差结果就被关联起来。测试一旦暴露偏差,Agent可以从对应的切分方式和计算路径继续检查,而不必从整个模型重新开始定位。
正是在这一算子验证过程中,我们发现了KDA算子上下文并行(Context Parallel,CP)路径的精度问题。CP与非CP结果之间的偏差,使检查重点落到了并行执行引入的状态传播与合并计算上。
CP切分需要合并不同上下文分片的状态,其核心计算可以简化为:

原实现中,tl.dot即使接收FP32输入,也默认采用TF32计算以提高性能。较低的计算精度使误差在变换合并和状态更新中不断累积,在长上下文下更加明显。
修复方法:将这两处计算显式指定input_precision="tf32x3",通过三次TF32 Tensor Core运算组合出更高精度的结果,在减轻累积误差的同时,尽量保留Tensor Core的性能优势。
这个案例中,反馈环境的作用从问题出现之前就已经开始:并行策略到算子的映射确定了验证对象,切分与非切分路径的对照暴露了数值偏差,计算精度分析解释了偏差来源,回归测试则为修改提供了持续检验的依据。对Agent而言,这条路径把系统层面的并行设计转化为可以执行和追踪的正确性任务。局部验证之后,候选实现仍需回到目标部署,完成模型级精度与服务性能的最终验收。
相关精度修复已合并至Flash Linear Attention上游,详见PR #1180。
对于系统级性能问题,明确的测试场景和性能约束,是Agent判断异常、选择分析方向的起点。
我们的推理优化工程师为Agent定义了单独Prefill、Prefill + KV Transfer、单独Decode等测试场景,用来隔离不同执行阶段及其组合对性能的影响,并为各场景设定验收条件。例如,在相同workload下,以单独Prefill为基准,Prefill + KV Transfer的性能差距不应超过5%。
然而,Agent在测试中发现,部分场景的性能差距超过了20%。这个反馈将排查范围缩小到引入KV Transfer后的额外开销与并发交互。Agent随后深入分析KV Transfer的时间线,发现一个异常:在这些场景中,KV Transfer的Python侧执行始终没有与DeepEP dispatch/combine的调用区间重叠。
这一现象使Agent开始检查DeepEP与Mooncake Transfer的并发关系,并沿调用链进入Python/C++边界。我们使用的DeepEP v1.2.1中,intranode_dispatch和intranode_combine均未显式释放Python GIL;其中,dispatch在需要获取接收token数量时,还会在CPU上等待GPU返回相关信息。
关键在于,进入C++并不意味着自动释放GIL。在这段持锁调用期间,同一进程内负责Mooncake Transfer的Python线程无法及时获得GIL,传输任务的调度与提交因而被推迟,压缩了KV Transfer与后续计算重叠的机会。底层传输即使具备异步执行能力,上层提交受阻也会让预期的并行无法充分发生。
源码中还有一个直接的对照:同版本的internode_dispatch已显式释放GIL,注释说明这样做是为了避免CPU等待期间阻塞其他线程中的KV Transfer。这进一步支持了Agent对intranode路径的判断。
修复的关键,是在相关C++执行区间释放GIL,让Mooncake Transfer的Python线程能够及时推进任务。修复效果需要同时通过时间线与原有性能约束验证:前者检查调度与传输是否获得了重叠执行的机会,后者判断这一变化是否改善了实际服务性能。在相同测试条件下,修复后的Prefill + KV Transfer与单独Prefill的性能差距小于1%。

▲发现并修复KV Transfer并发瓶颈
这个案例中,性能约束先把“没有达到预期”转化为明确的测试偏差,时间线再将排查方向收敛到两个组件的并发关系,最终由代码分析定位到GIL的持有范围。稠密反馈由此把端到端性能、跨层运行行为和具体实现连接起来,为Agent的每一步分析提供依据。
算子优化需要解决两个问题:如何判断一次优化是否有效,以及优化方向从哪里来。
首先,算子性能必须放在推理引擎的真实执行环境中评价。例如,计算Kernel占用更多资源可能缩短自身耗时,却压缩KV Transfer Kernel的执行空间,最终拖慢整体流水线。因此,Agent不仅需要关注算子耗时,还要结合目标Workload、资源约束、任务重叠和端到端收益,建立正确的优化目标。
其次,大量优化经验隐含在SGLang、Flash Linear Attention和DeepGEMM等项目的手写Kernel中。Agent需要从这些代码中提炼优化技巧及其适用条件,形成面向当前算子和目标硬件的候选方案,再通过实验验证其实际效果。已有代码提供优化方向,系统反馈判断优化是否真正成立。
我们让GLM-5.3驱动的Infra Agent从不同代码库、编程语言和硬件平台的存量Kernel中学习优化经验,并通过增量与消融实验,将其提炼为包含适用条件、变换方式、资源约束和验证证据的“优化骨架”。面对新算子,Agent以这些骨架为起点,结合Profiling与分层测试重新确定分块、访存和资源分配策略;验证通过的修改及其适用条件继续回流骨架库。工程师主要负责定义目标与约束,并审核涉及数值语义、并发行为和线上风险的关键修改。
下图展示了典型KDA Decode算子的性能演化过程。引入ReplaySSM以算换存,导致算子执行时间第一次延长(v1相比v0);Agent进行的除法优化将v1的执行时间缩短了9.6%。进一步地,在获得"计算是关键瓶颈"的反馈信息后,Infra Agent发现原实现沿V维度分块,使相同的FP32归一化与门控计算被重复执行四次。它将这些分块合并到同一线程块,提前批量计算并共享中间结果,以牺牲部分并行度为代价从源头消除了重复计算,获得了1.71×的性能提升。

▲典型KDA Decode算子从基础实现到生产版本的性能演进
这个案例中,GLM-5.3驱动的算子Agent从存量实现中抽取优化经验,再把这些经验用在承载自身推理的算子上:它以骨架为起点逐项调优,由分层验证判断每一步去留,由端到端性能判断实际价值,通过验证的经验回流骨架库。模型由此参与了自身推理系统的优化,而每一次上线积累的经验,又降低了下一次优化所需的工程师投入。
三个案例共同说明,反馈的价值不在于数量,而在于能否帮助Agent回答当前问题。大量缺少结构的日志可能掩盖关键信号,观测范围不完整的Profiling可能导致错误归因,在Microbenchmark中成立的优化也未必能够转化为端到端收益。因此,构建反馈环境不仅需要提供测试、日志和性能数据,还需要明确每类观测能够支持什么判断、存在怎样的边界,以及哪些结论必须通过进一步实验才能确认。
工程师在这一过程中承担三项关键职责:定义优化目标与系统约束,构建Agent可以直接使用的反馈环境,以及审核涉及系统架构、异步并发和线上风险的关键修改。在此基础上,Agent提出假设、实施修改并执行实验,再根据反馈保留、修正或否定当前方案。正确性、稳定性与端到端性能共同构成最终的验收标准。
回顾GLM-5.3 Flash的上线过程,算子精度缺陷、跨越Python与C++边界的并发问题,以及关键算子的性能优化,分别对应不同层次的工程挑战。借助局部测试、跨层观测与分层Benchmark,原本模糊的异常现象被逐步转化为可以验证的工程假设,复杂的系统问题也被拆解为一系列可观测、可实验、可归因的迭代过程。正是在这样的反馈闭环中,Agent的代码与推理能力才真正转化为可验证的工程进展。
由GLM-5.3驱动的Infra Agent参与推理基础设施的建设;经过工程师与Agent共同优化的系统,又反过来支撑GLM-5.3 Flash稳定地面向用户提供服务。模型优化系统,系统承载模型。这次实践表明,真正缩短系统工程周期的,不只是更强的模型能力,更是一个能够让模型持续获得反馈、验证判断并修正行动的Agent工程闭环。
当然,我们还没有走到递归自我改进。选择目标、设定边界、判断风险,仍然是人的工作,而且我们认为,在相当长的时间里,这条线应当由人来守。但两周、三倍、十万卡这些数字告诉我们,这条线不会因为我们希望它慢一点就慢下来。




