跳转至

负载建模:先定义系统承受的压力

在“边界比较”的分析框架里,负载模型首先要回答的,不是应用长什么样,而是系统究竟在承受什么压力。如果压力对象没有被定义清楚,后续关于资源供给、系统行为和校准验证的讨论,就会重新退化为“拿几个 benchmark 试一试”的局部判断。对超节点产业而言,负载建模的目标从来不是写出一部工作负载百科全书,而是提炼出一组可复用、可批量生成、可被真实观测约束的压力画像。

这一领域一个常见误区,是把负载建模理解成一种中立的格式工程,仿佛只要规定了统一图表示和统一 trace 规约,问题就已经解决。但超节点分析真正关心的,不是交换格式本身,而是这些负载对象能否支撑“画边界”这件事。训练、推理以及混合负载之所以需要分开讨论,不是因为它们属于不同应用分类,而是因为它们会把系统推向完全不同的受压方向:训练放大同步边界、流水线气泡和全局一致性代价;推理更早暴露 TTFTTPOT、排队和 KV Cache 管理问题;MoE、长上下文、多模态混部与智能体突发流又会引入路由偏斜、状态膨胀和尾部放大,使前沿在局部区域发生明显形变。

因此,负载建模的真正任务,不是给“workload”下一个尽量完备的定义,而是把系统压力整理成一组可生成、可比较、可解释的需求对象。所谓“可生成”,是它不能只复现一次历史实验;所谓“可比较”,是它不能在建模阶段就预先固化某种硬件或策略选择;所谓“可解释”,是当边界出现拐点、断裂或排序反转时,分析能够回到负载本身解释压力为何变化。

不是一个 workload,而是一族 workload

如果只用单个代表性样例来描述负载,分析最多只能比较若干离散实验点,而无法描述边界。边界天然要求大量候选点,因此负载模型必须支持参数化生成。训练侧需要能够连续改变模型规模、并行维度、同步频率、激活保留比例以及 MoE 路由分布;推理侧需要能够连续改变输入长度分布、输出长度分布、到达过程、并发度和 SLA;混合负载则需要能够表达长短请求占比、多模型混部比例、冷热分布和突发性。只有这样,比较才会从“单点复现”升级为“边界塑形判断”。

但参数化并不意味着什么都应被保留。对超节点的边界判断而言,真正值得进入负载画像的,是那些会改变边界形状和方案排序的因素,而不是只改变局部实现常数的细节。下表给出这一取舍原则:

类别 保留(进入负载画像) 剥离(不进入负载画像) 判断依据
计算结构 算子类型、shape、精度、层数、注意力模式 特定设备的 kernel 实现细节 前者决定计算 / 访存比与通信量级,后者仅影响局部常数
通信意图 集合通信类型、消息大小、同步边界 运行时私有的 allocator/ 排队细节 前者定义负载对互联的需求,后者属于资源模型范畴
阶段差异 Forward/Backward/Sync 边界、Prefill/Decode 分割 某次实验的偶然调度抖动 前者决定前沿拐点和阶段切换代价,后者是噪声
状态生命周期 KV Cache 尺寸演化、激活值峰值时序、梯度存活周期 固定 allocator 的碎片化行为 前者决定显存可行域边界,后者由平台特性决定
到达与 SLA 请求到达分布、并发度、TTFT/TPOT 约束 特定负载均衡器的路由实现 前者是推理侧边界的核心驱动,后者可独立建模
路由与稀疏性 MoE 专家选择分布、top-k 策略、负载不均匀度 特定 MoE 框架的通信实现 前者决定 All-to-All 压力和前沿形变,后者属于实现

换句话说,负载模型描述的是需求,而不是某条既定技术路线已经做出的实现选择。

从这个意义上看,硬件无关和策略中立并不是抽象层面的建模美学,而是为了给后续资源模型和系统模型保留完整解空间。如果在负载规约里已经写死某种 TP/PP/DP 组合、某种固定调度方式或某条显存卸载路径,那么分析实际上就已经从“边界比较”退化为“既定路线的性能估算”。这样的模型也许能复现实验,却很难支撑方案判断。

负载模型还必须显式保留阶段差异与状态差异。很多系统收益并不发生在平均负载上,而恰恰发生在阶段切换、状态膨胀和极端工况上。训练中的前向、反向和同步边界,推理中的 PrefillDecode 差异,MoE 中专家分布的不均匀性,KV Cache 的生命周期、分页与驱逐压力,以及请求到达的突发性和尾部分布,都会决定边界上的关键拐点。如果这些差异在工作负载阶段就被平均掉,那么后续前沿形状也会被抹平,很多真正改变方案排序的机制差异将不再可见。

静态图与动态执行迹的分工

这也是为什么建模仿真需要同时容纳静态图与动态执行迹,但不能把两者的关系写成简单的形式分类。静态计算图的价值,不在于它“更规范”,而在于它适合训练侧的大范围配置扫描,能够以较低成本暴露计算量、通信意图、关键路径和同步边界;动态执行迹的价值,不在于它“更真实”,而在于它能够保留请求到达、阶段切换、状态变化和尾部行为,因此特别适合关键点校准、跳变解释和极端场景验证。两者并非彼此替代,而是分别服务于快速描边和关键约束。

表示形式 核心能力 适用阶段 典型工具 / 标准
静态计算图 低成本暴露计算量、通信意图、关键路径 大范围配置扫描、前沿粗描 Chakra ET、ONNX Graph、Alpa cost model
动态执行迹 保留到达、切换、状态与尾部行为 关键点校准、跳变解释、极端验证 Chakra Execution Trace、nsys trace、线上 trace

这也意味着负载模型必须同时兼容两种使用方式:一方面足够简化,能够和快速模型、离线 sweep 配合,支撑数千点级的边界描绘;另一方面又足够贴近真实,能够在候选前沿点、敏感区和跳变点上回到真实 trace、线上观测或高保真仿真,把误差收紧到足以支撑排序判断的程度。如果只能服务于前者,边界会画得很快但缺乏解释力;如果只能服务于后者,分析会很精细,却高成本到无法承担“描边”任务。负载建模真正需要的是这两种能力之间的可切换性。

从需求空间到可描边对象

走到这一步,负载建模的落点就很清楚了:它追求的不是某种唯一正确的抽象格式,而是几组可以直接用来画边界、比较边界的工作负载族。下表给出四类核心工作负载族及其关键参数:

负载族 代表性场景 核心可变参数 对前沿的塑形作用
训练主线 稠密预训练、MoE 训练、长上下文训练、多模态训练 模型规模、TP/PP/EP/DP 维度、同步频率、激活保留比例、MoE 路由分布 决定训练侧前沿在同步放大、气泡率、显存和能效上的主形状
推理主线 短提示词交互、混合长短请求、长上下文生成、高并发在线服务 输入 / 输出长度分布、到达过程(Poisson/ 突发 /trace、并发度、SLA(TTFT/TPOT P99batch 策略 决定推理侧前沿在时延、吞吐、Goodput KV 管理上的主形状
极端工况 超长序列(>128K、专家负载极度偏斜、突发流量峰值、多模型混部干扰 序列长度上界、路由不均匀度、突发倍率、混部比例 不一定构成主前沿,但决定某条路线是否进入不可部署区域
未来变量 超稀疏 MoE>256 专家、多模态长交织、Agent 工作流、推理时计算 专家数量 / 激活比、模态交织密度、工具调用频率、自适应计算步数 为未来演进讨论提供边界变形的压力入口

训练主线之所以必须覆盖稠密预训练、MoE 训练、长上下文训练和多模态训练,是因为这些因素共同决定训练侧前沿在同步、通信、显存与能效上的主形状;推理主线必须覆盖短提示词、混合交互、长上下文、高并发和突发流,是因为它们直接塑造 TTFTTPOT、吞吐与 Goodput 之间的关系;极端工况不一定构成主前沿,却往往决定某条路线是否进入不可部署区域;未来变量则为后续“边界如何继续移动”提供了压力入口。

至此,负载模型的行业角色也就明确了。它不是应用百科,也不是新的抽象标准,而是把“系统会承受什么压力”整理成一组可以用来画边界、比较边界、校准边界的需求对象。只有在这一前提下,资源模型谈供给才有对象,系统模型谈推演才有输入,校准验证谈误差才有落点。