D·A·M 基础

在生产环境中,“它很慢”和“它错了”往往都不是有信息量的症状。一个服务栈可能因为加速器处于空闲状态(数据饥饿)而错过延迟目标,因为模型做了不必要的工作(算法开销),或者因为加速器被饱和(机器受限)。本附录提供了一个紧凑的诊断框架——数据、算法与机器(D·A·M)——并确立单机性能基础,集群级计算、通信与协同都建立在这一基础之上。

Learning Objectives
  • 按主导的数据、算法或机器轴对单机瓶颈进行分类,同时识别混合成因
  • 将优化技术映射到其 D·A·M 交叠区域,以理解它们跨越了哪些轴
  • 应用铁律方程对性能问题进行定量诊断
  • 利用算术强度区分内存受限与计算受限的工作负载
  • 为每个数据、算法或机器轴选择合适的性能剖析工具和优化策略
  • 使用 D·A·M 记分卡指标(I/O 开销、活跃参数、MFU)评估系统健康度

本附录的使用方法

本附录设计为单机性能的参考手册。首先从记分卡式指标入手,形成关于哪个轴占主导的假设,然后选择能够证实(或证伪)该假设的工具。

当单个 GPU 上的训练很慢时,检查利用率、数据等待时间和模型 FLOPs 利用率(MFU),然后将各项分别映射到其数据、算法或机器轴。当服务错过延迟目标时,判断所处形态是延迟受限(开销)、内存受限(权重/KV 移动)还是计算受限。当成本急剧上升时,使用 D·A·M 评分标准,确保投入针对主导项,而非非瓶颈部分。

数据—算法—机器(D·A·M)分类法是机器学习系统工程的主要诊断框架。它形式化地描述了信息流、数学逻辑与物理执行之间的相互依赖关系。当性能停滞或行为退化时,应问:信息流在哪里受阻? 该分类法帮助实践者沿三条诊断轴分解瓶颈,1 同时认识到真实系统可能涉及混合成因或轴之间的相互作用。

1 MECE(相互排斥、完全穷尽):源自管理咨询领域(由麦肯锡推广)的一项分类原则,要求各类别互不重叠,并共同涵盖所有可能性。应用于系统工程时,它可作为一种有用的理想化分解方式,但实践中的 D·A·M 瓶颈往往相互重叠:一个内核可能同时受内存限制、需要大量同步,且与可用硬件匹配不佳。

诊断摘要

该分类法直接对应 集群定律 中引入的机器学习系统铁律。表 1 汇总了每条轴的作用、主要物理约束与核心优化路径。

表 1: D·A·M 轴参考:每条轴对应一种不同的物理约束和一项高效优化策略。从这里开始诊断:先确定哪项约束构成瓶颈,再采用相应的优化手段。
轴 作用 物理约束 高效优化手段
数据(D) 信息(燃料) 带宽(\(\text{BW}\)) I/O 流水线优化
算法(A) 逻辑(蓝图) 运算量(\(O\)) 模型压缩
机器(M) 物理(引擎) 吞吐量(\(R_{\text{peak}}\)) 硬件加速

铁律映射

明确三条轴之后,下一步是将它们与时间联系起来。任何机器学习任务的性能都取决于工作在 D·A·M 各轴上的分布,而铁律映射揭示了哪个组件的变量主导执行过程:

\[ T = \underbrace{ \frac{D_{\text{vol}}}{\text{BW}} }_{\text{Data (D)}} + \underbrace{ \frac{O}{R_{\text{peak}} \cdot \eta_{\text{hw}}} }_{\text{Algorithm (A)/Machine (M)}} + \underbrace{ L_{\text{lat}} }_{\text{Overhead}} \]

算法与机器共享计算项,两者的区别在于工程师控制的是哪个变量。减少总运算量(\(O\))是算法层面的优化手段,而提高硬件的峰值吞吐量(\(R_{\text{peak}}\))或利用率(\(\eta_{\text{hw}}\))是机器层面的优化手段。

D·A·M 协同:从求和到取最大值

加法形式的铁律表示顺序执行,即数据、算法与机器依次执行的最坏情况。重叠执行可以使总耗时从各项之和趋向各项中的最大值,而完全重叠则确定了理想下界:

\[ T_{\text{sequential}} = \frac{D_{\text{vol}}}{\text{BW}} + \frac{O}{R_{\text{peak}} \cdot \eta_{\text{hw}}} + L_{\text{lat}} \quad \xrightarrow{\text{overlap}} \quad T_{\text{pipelined}} \geq \max\left(\frac{D_{\text{vol}}}{\text{BW}},\; \frac{O}{R_{\text{peak}} \cdot \eta_{\text{hw}}}\right) + L_{\text{lat}} \]

系统工程师的任务是让这些组件并行运行,而不是串行运行。表 2 汇总了关键的 D·A·M 协同技术:

表 2: D·A·M 重叠执行技术:每项技术都允许一条 D·A·M 轴在另一条轴的操作尚未完成时执行,从而将铁律中相加的各项转变为重叠执行的各项。
技术 重叠执行的 D·A·M 轴 实现方式
预取 D 与 M 重叠执行 使用 prefetch_factor、pin_memory=True 的 DataLoader
CUDA 流 D 与 M 重叠执行 为 H2D 传输和计算分别使用独立的流
异步梯度同步 M(通信)与 A 重叠执行 随着梯度桶就绪,将梯度全归约与剩余的反向传播计算重叠执行
双缓冲 D 与 M 重叠执行 填充缓冲区 \(i+1\),同时使用缓冲区 \(i\) 进行计算

算术强度边界

这种重叠执行的视角仍留下一个实际问题:工作负载究竟是在等待字节传输,还是在等待浮点运算。数据轴(内存受限)与机器轴(计算受限)之间的边界并非任意划定,而是由工作负载的算术强度2(\(I\))在数学上定义。

2 算术强度:浮点运算次数与传输字节数之比(FLOP/byte)。将其与硬件的屋脊点(\(R_{\text{peak}}/\text{BW}\))比较,即可判断工作负载是内存受限还是计算受限。

下列症状是筛查信号,而非诊断结论。算术强度位于 \(R_{\text{peak}}/\text{BW}\) 左侧的工作负载,每传输一个字节所能提供的有效计算量不足以让加速器充分工作;但解读原始利用率时,必须同时考察内存带宽利用率、数据加载器等待时间、内核占用率以及执行追踪中的空隙。

  • GPU 利用率低 (\(<\) 80%): 排查数据、CPU 或启动方面的饥饿。通过数据加载器等待、主机 CPU 饱和、内存带宽计数与时间线缺口加以确认。
  • GPU 利用率高 (\(>\) 95%): 只有在计算单元处于忙碌状态且内存带宽未饱和时,才将其视为机器受限。若内存带宽已饱和,瓶颈仍然位于数据/机器边界。
  • 若批大小为 1:应视为延迟或启动开销可能成为关键问题的警示。对于大语言模型(LLM)解码,批大小为 1 的执行通常受内存带宽限制,除非追踪显示调度缺口。
  • 若算术强度低于临界点(在 H100 上约为 295.2 FLOP/byte):该工作负载很可能属于内存受限(数据/机器边界)。

瓶颈诊断

瓶颈确定后,表 3 展示了哪些优化有效、哪些优化是浪费:

表 3: 有效优化 vs. 浪费的优化:优化错误的项只能带来有限的改善,且成本效率较差。内存受限的模型仅靠增加峰值 FLOP/s 不会加速;它需要更高的算术强度、更少的数据搬运,或更快的内存子系统。
若工作负载属于… 主导项 有效的优化 浪费的优化
内存受限 \(D_{\text{vol}}/\text{BW}\) 量化、剪枝、批处理、内核融合、更高的内存带宽 仅增加峰值 FLOP/s
计算受限 \(O/(R_{\text{peak}} \cdot \eta_{\text{hw}})\) 更好的内核、张量核心、更快的 GPU、更低的精度 增加更多内存带宽(非绑定项)
延迟受限 \(L_{\text{lat}}\) 批处理请求、内核融合、异步调度 既非计算也非带宽(开销占主导)

工具映射

在操作表缩小可能的修复方案之后,工具映射确定了验证所需的测量。使用 表 4 在沿某个特定 D·A·M 轴诊断瓶颈时选择正确的性能剖析工具:

表 4: D·A·M 工具映射:用于沿各 D·A·M 轴诊断瓶颈的性能剖析工具。
轴 关键指标 主要工具 次要工具
数据 批加载与等待时间 Framework 剖析器追踪 iostat、pidstat(I/O/CPU)
算法 FLOPs、模型深度 PyTorch Profiler DeepSpeed Flops Profiler
机器 GPU 利用率、SM 占用率 Nsight Compute DCGM、Nsight Systems

D·A·M 记分卡

表 5 中的效率比率将系统性能与其理论上限进行比较评级。该成绩单以 MFU3 为锚点,即已实现模型 FLOP/s 与硬件理论峰值 FLOP/s 之比。

3 MFU(模型 FLOPs 利用率):仅衡量有用的模型计算,排除梯度同步与内存管理等开销。

表 5: D·A·M 效率评分标准:使用这三个数值来刻画单机成熟度。
轴 指标 定义 不及格 及格
数据 I/O 开销 \(\frac{\text{Data Wait Time}}{\text{Total Step Time}}\) \(>\) 10% \(<\) 1%
算法 压缩/稀疏比 \(\frac{\text{Effective or active parameters}}{\text{Dense baseline parameters}}\) 取决于工作负载 取决于工作负载
机器 MFU \(\frac{\text{achieved model FLOP/s}}{\text{peak FLOP/s}}\) \(<\) 30% \(>\) 50%

扩展分类法:从节点到集群

这些单机评级在推进到分布式设计时最为有用。D·A·M 分类法是单机的诊断基线,但随着系统从单个节点扩展到机器学习集群,每条轴都会经历定性转变。理解这些联系对于从本地优化过渡到集群级工程至关重要。

约束的演进

表 6 将每条轴从节点级关注点映射到其在集群规模上的转变:

表 6: D·A·M 约束从节点到集群:D·A·M 分类法的每条轴在从单个节点扩展到多节点集群时如何变化。节点级关注点(左)让位于性质不同的集群级约束(右);瓶颈从本地资源迁移到全局协同开销。
轴 节点级关注点(D·A·M) 集群规模上的转变
数据(D) I/O 带宽(磁盘/PCIe) 通信墙:瓶颈从本地存储转移到网络互连结构的双划分带宽。
算法(A) 模型深度/运算数 并行策略:逻辑现在包含计算如何在 \(N\) 台设备(3D 并行)之间划分。
机器(M) 峰值 TFLOP/s、HBM 功耗与可靠性墙:约束不再只是芯片速度,而是每机架瓦数与集群级 MTBF。

过渡到 \(C^3\)

D·A·M 诊断单个节点的组成部分,而 \(C^3\) 分类法(The C^3 分类法)诊断集群的交互作用。

  1. 计算(\(C_1\))继承了算法与机器两个轴,但增加了扩展效率损失这一因素。
  2. 通信(\(C_2\))继承了数据轴,但受光速和网络拓扑支配,而非仅由本地 I/O 决定。
  3. 协同(\(C_3\))是面向大规模系统的衔接维度,在单节点层面没有对应项。它代表协同开销,即用于同步、检查点和故障恢复的时间,这些开销只有在集群规模下才会显现。

这一递进关系确保不会为了单节点效率(高 MFU)而牺牲集群规模下的效率(导致低扩展效率)。节点优化的目的是服务于集群。

总结

D·A·M 分类法为每一次机器学习系统分析提供诊断基线。通过将瓶颈定位到数据、算法或机器,从业者可以确保优化工作针对起制约作用的约束。这种单节点分析方法是本书贯穿始终讨论的集群规模工程的前提。

Key Takeaways: 单机诊断启发式方法
  • 识别主导轴:在提出任何优化方案之前,先判断数据、算法或机器中哪一项是起制约作用的约束。
  • 剖析算术强度:算术强度能够定量区分受数据制约和受机器制约的两种形态。
  • 运用铁律:铁律将模糊的症状转化为由具体项表征的瓶颈。
  • 使用评分卡评级:数据—算法—机器评分卡在扩展到集群规模之前,先为“良好”性能确立统一标准。
回到顶部
← 三卷书架