FLOPs 是 Floating Point Operations Per Second 的缩写,表示 每秒浮点运算次数。在深度学习和计算领域中,FLOPs 通常用来衡量模型的计算复杂度,表示模型执行一次完整前向或后向传播所需的浮点运算数量。
1. FLOPs 的定义
FLOPs 指的是一个模型在计算过程中所需要执行的基本浮点运算的总数。这些运算包括:
- 加法
- 减法
- 乘法
- 除法
例如:对于矩阵乘法,如果矩阵大小为 A ∈Rm×n和 B∈Rn×p,
- FLOPs 计算公式为:2⋅m⋅n⋅p,因为矩阵乘法需要 m⋅n⋅p 次乘法和相同数量的加法。
2. 为什么 FLOPs 很重要?
FLOPs 主要用于衡量模型的计算成本和效率,尤其在以下场景中:
- 模型复杂度:
- FLOPs 数值越高,表示模型越复杂,计算成本越高。
- 深度学习模型中,FLOPs 通常决定了模型的推理和训练时间。
- 硬件性能匹配:
- 不同硬件(如 GPU、TPU)的性能指标往往用 FLOPs 来衡量(如 TFLOPs,表示每秒万亿次浮点运算)。
- 模型比较:
- 在模型选择中,FLOPs 是一个重要参考指标。相同精度的情况下,较低的 FLOPs 表示模型更高效。
- 能源消耗:
- FLOPs 的数量与计算所需的能耗成正比,因此优化 FLOPs 有助于降低计算成本。
3. FLOPs 的计算实例
在 Transformer 中,FLOPs 主要由以下模块决定:
-
注意力机制(Attention):
需要计算查询 Q、键 K、值 V 的点积,计算复杂度为:
其中 n 是序列长度,d 是隐藏层维度。
-
前馈神经网络(Feed-Forward Network, FFN):
FFN 中的两个全连接层 FLOPs 约为:
其中 n 是序列长度,d 是隐藏层维度。
4. FLOPs 和训练成本
FLOPs 还用于对比不同模型的训练成本。例如,Transformer 的 FLOPs 是其他复杂模型(如 RNN 和 CNN)的一个重要比较维度:
- Transformer (base model):
- EN-DE(英语到德语):3.3⋅10^18
- EN-FR(英语到法语):2.3⋅10^19
- GNMT + RL Ensemble:
- EN-DE:1.8⋅10^20
- EN-FR:1.1⋅10^21
Transformer 以显著更低的 FLOPs 数实现了优越的性能。
5. FLOPs 与硬件性能
FLOPs 还经常结合硬件的性能进行讨论。例如,一个 GPU 的理论峰值性能可能用 TFLOPs(万亿次浮点运算)表示。比如:
- NVIDIA P100 GPU:理论性能约为 9.5 TFLOPs。
- 如果某模型需要 10^19 FLOPs 训练,那么在 8 个 P100 GPU 上完成大约需要 3 天。
计算步骤:
-
每秒总 FLOPs 计算能力:
- 8 块 GPU 的总性能为:
每秒 FLOPs 总数 = 8×9.5×10^12
= 76×10^12FLOPs/s
= 7.6×10^13FLOPs/s。
- 8 块 GPU 的总性能为:
-
完成训练所需总时间(秒):
- 模型需要 10^19 FLOPs,总时间为:
时间(秒) = 总 FLOPs / 每秒 FLOPs 总数 = 10^19
/ 7.6×10^13
≈ 1.316×10^5 秒。
- 模型需要 10^19 FLOPs,总时间为:
-
转换为天数:
- 1 天 = 86400 秒,所以:
时间(天)= 1.316×10^5 / 86400 ≈ 1.52天。
- 1 天 = 86400 秒,所以:
- 理论上,在 8 块 P100 GPU 上完成一个需要 10^19 FLOPs 的模型训练,大约需要 1.52 天(约 36 小时)。
- 如果实验中包含其他瓶颈(如内存访问、I/O、并行化效率不足等),实际时间可能会接近 3 天。
如果实际时间为 3 天,则暗示硬件利用率约为 1.52/3 ≈ 50%。
总结来说,FLOPs 是衡量模型计算复杂度的核心指标,对于评估模型效率和硬件需求至关重要。