大模型训练 MFU 计算方法
1. 概述
在深度学习领域,MFU(Model FLOPs Utilization,模型浮点运算利用率) 是衡量大模型训练效率的核心指标。它描述了模型在实际训练过程中有效利用硬件理论计算能力的程度。对于 GPT 和 Llama 等参数量巨大的 Transformer 模型,监控并优化 MFU 是提升训练吞吐量、降低计算成本的关键。
2. MFU 的核心概念
2.1 定义
MFU 定义为模型在实际训练过程中每秒执行的有效浮点运算次数与硬件理论峰值算力的比值:
2.2 关键要素
- Actual FLOPs(实际达到的 FLOPs):指模型执行前向传播(Forward)、反向传播(Backward)及优化器更新等所需的所有计算。
- Theoretical Peak FLOPs(硬件理论峰值):硬件(如 NVIDIA H100 或 Ascend 910)在特定精度(如 FP16/BF16)下的标称最大吞吐量。
2.3 核心意义
- 诊断瓶颈:低 MFU 通常意味着存在通信带宽瓶颈(Communication Bound)、内存带宽限制(Memory Bound)或算子实现效率低下。
- 优化指导:通过调整 Batch Size、并行策略(TP/PP/DP)或使用混合精度训练来逼近硬件极限。
3. Transformer 模型的 FLOPs 推导
以标准的 GPT 架构为例,详细推导其在训练过程中每步所需的浮点运算量(FLOPs),为评估大模型训练效率提供理论基础。
3.1 FLOPs 定义
- FLOPs:表示完成一次矩阵乘法所需的浮点操作次数。
- 对于一个
的矩阵乘法: - 所需 FLOPs 数量为:
- 包含:
次乘法操作; 次加法操作; - 总计约
。
- 所需 FLOPs 数量为:
3.2 Transformer 层的 FLOPs 分析
3.2.1 符号定义
| 符号 | 含义 | 符号 | 含义 |
|---|---|---|---|
| Batch Size(批大小) | Hidden Dimension(隐藏层维度) | ||
| Sequence Length(序列长度) | Vocabulary Size(词表大小) | ||
| Number of Layers(层数) | MLP 中间层维度 |
3.2.2 Self-Attention 模块 FLOPs
3.2.3 公式
3.2.4 FLOPs 计算
| 操作 | 输入形状 | 输出形状 | FLOPs |
|---|---|---|---|
总计 Attention FLOPs:
3.2.5 MLP 模块 FLOPs
3.2.6 结构
- 升维:
- GeLU 激活
- 降维:
3.2.7 FLOPs 计算
| 操作 | 输入输出 | FLOPs |
|---|---|---|
总计 MLP FLOPs:
3.3 单层 Transformer 总 FLOPs
忽略轻微的逐元素操作(如 LayerNorm、Softmax、GeLU),单层前向传播总 FLOPs 为:
3.4 Vocabulary Embedding FLOPs
3.4.1 操作
- 将 token ID 映射为 embedding 向量。
- 形状变换:
。
3.4.2 FLOPs
注意:此步骤通常只在前向传播中执行一次,但在反向传播中也有类似计算。
3.5 模型总 FLOPs
假设 GPT 模型有
| 组件 | FLOPs 公式 |
|---|---|
| Self-Attention | |
| MLP | |
| Embedding | |
| 单个 Transformer 层 | |
| 整模型总 FLOPs |
4. 反向传播与全流程计算
4.1 梯度计算原理
在反向传播(Backward)中,对于每一个线性变换
- 对权重的梯度:
→ 一次矩阵乘法; - 对输入的梯度:
→ 一次矩阵乘法。
结论:在训练中,反向传播的计算量约为前向传播的 2 倍。
4.2 训练总 FLOPs
包含前向和反向传播的单步总计算量约为:
注意:若考虑重计算/激活值检查点(Recompute),倍数会增至约 4 倍。
4.3 经验简化公式
对于大模型,当
5. Llama 系列模型的 MFU 特化计算
Llama 模型在标准 Transformer 基础上引入了 GQA(Grouped Query Attention) 和 SwiGLU 激活函数,其计算分布略有不同。
5.1 模型结构简要说明
- 使用 Llama 2 架构:包含多层 Transformer 解码器。
- 关键组件:
- Attention 模块:含 RoPE、QKV 投影、Softmax、输出投影;
- FeedForward 模块:含两个线性层与 SiLU 激活函数;
- RMSNorm:归一化操作;
- lm_head:最终输出层。
注意:
、 、 分别为 Q/K/V 的权重矩阵; 为输出投影; 、 、 为 FFN 中的权重。
5.1.1 Llama 架构差异点
- GQA 影响:
、 的投影维度降为 ( 为 head 比例系数)。 - SwiGLU 影响:FFN 层由三个线性矩阵
、 、 组成,中间维度为 (通常为 )。
5.1.2 符号定义
| 符号 | 含义 |
|---|---|
| batch_size | |
| num_layers(层数) | |
| seq_length(序列长度) | |
| hidden_size(隐藏维度) | |
| num_heads(注意力头数) | |
| head_dim(每个头的维度) | |
| intermediate_size(FFN 中间维度) | |
| vocab_size(词表大小) | |
| repeat(重复因子,通常为 | |
| ffn_dim_multiplier(FFN 扩展倍数,一般为 4) |
关系式:
5.2 各模块 FLOPs 详细分析
5.2.1 Attention 模块( 层)
| 操作 | 输入 | FLOPs |
|---|---|---|
总计 Attention FLOPs(每层):
5.2.2 FeedForward 模块( 层)
| 操作 | 输入 | FLOPs |
|---|---|---|
总计 FFN FLOPs(每层):
5.2.3 lm_head 模块
| 操作 | 输入 | FLOPs |
|---|---|---|
注意:该操作仅在最后一步执行,但对总 FLOPs 贡献显著。
5.3 总 FLOPs 推导
5.3.1 前向传播总 FLOPs(单次)
提取公因子
代入
进一步近似:
,常忽略或合并; - 当模型规模较大时,
项相对较小。
5.3.2 反向传播 FLOPs
- 反向传播 FLOPs
前向的 2 倍; - 因此,总训练 FLOPs
3 前向 FLOPs。
提示:MFU 计算时需使用总 FLOPs(前向 + 反向 + 优化器),但此处以前向为主进行估算。
5.4 实例分析:Llama2-70B
给定参数:
代入公式:
对于 70B 模型,由于参数量极大,其
6. 总结与优化建议
| 优化方向 | 操作手段 | 对 MFU 的影响 |
|---|---|---|
| 计算密度 | 增大 Batch Size | 显著提升,减少算子调度和通信开销 |
| 通信优化 | 调整 TP/PP 比例 | 降低通信延迟,减少算力闲置 |
| 算子融合 | 使用 FlashAttention | 降低显存带宽压力,提高计算利用率 |
| 精度转换 | 使用 BF16/FP8 | 提升单位时间内的理论吞吐量 |
专家目标:在千卡规模的集群训练中,将 MFU 稳定在 55% - 70% 是大模型训练达到工业级性能的标志。