
都说Deepseek省算力,算力到底应该如何计算?
指每秒浮点运算次数,是衡量硬件性能的指标,表示计算设备每秒能够完成的浮点运算次数。指浮点运算次数,用于描述模型推理过程中需要的计算量,即模型的复杂度。MACs(乘加累积操作数):指模型中乘法和加法操作的总次数。在神经网络中,乘加操作(Multiply-Accumulate)是常见的计算模式,例如在卷积层和全连接层中。1次乘加操作通常被视为2次FLOPs。1 MFLOPS(百万次浮点运算)= 10⁶
文章目录
相信大家肯定经常听到显卡算力这些概念,但是到底应该怎么计算算力,以及如果判断训练一个模型需要多少算力呢?
我们来介绍一下深度学习模型的计算量和硬件算力的相关概念,FLOPS(每秒浮点运算次数)和FLOP(浮点运算次数)的定义,以及它们在评估硬件性能和模型复杂度中的应用。
一、定义
- FLOPS(Floating Point Operations per Second): 指每秒浮点运算次数,是衡量硬件性能的指标,表示计算设备每秒能够完成的浮点运算次数。
- FLOP(Floating Point Operations): 指浮点运算次数,用于描述模型推理过程中需要的计算量,即模型的复杂度。
- MACs(乘加累积操作数):指模型中乘法和加法操作的总次数。在神经网络中,乘加操作(Multiply-Accumulate)是常见的计算模式,例如在卷积层和全连接层中。1次乘加操作通常被视为2次FLOPs。
FLOPS的单位换算:
- 1 MFLOPS(百万次浮点运算)= 10⁶ FLOPs
- 1 GFLOPS(十亿次浮点运算)= 10⁹ FLOPs
- 1 TFLOPS(万亿次浮点运算)= 10¹² FLOPs
- 1 PFLOPS(千万亿次浮点运算)= 10¹⁵ FLOPs
- 1 EFLOPS(百京次浮点运算)= 10¹⁸ FLOPs
二、计算方法与案例
2.1 计算FLOPs
2.1.1 全连接层 (FC Layer)
- 输入:
X ∈ ℝ^{B×C_in}
,权重W ∈ ℝ^{C_in×C_out}
,偏置b ∈ ℝ^{C_out}
。 - 输出:
Y = XW + b ∈ ℝ^{B×C_out}
。 - 计算量:
- MACs:
B × C_in × C_out
(每个输出元素需C_in
次乘加)。 - FLOPs:
2 × B × C_in × C_out
(乘加分解为乘法+加法)。
- MACs:
案例:
输入维度 C_in=1024
,输出维度 C_out=4096
,批量大小 B=32
。
- MACs = 32 × 1024 × 4096 = 134.2 MMACs
- FLOPs = 2 × 134.2 M = 268.4 MFLOPs.
2.1.2 卷积层 (CNN)
- 输入:
X ∈ ℝ^{B×C_in×H×W}
,卷积核W ∈ ℝ^{C_out×C_in×K×K}
。 - 输出:
Y ∈ ℝ^{B×C_out×H_out×W_out}
,其中H_out = (H - K + P)/S + 1
。 - 计算量:
- MACs:
B × C_out × H_out × W_out × C_in × K²
(每个输出位置需C_in×K²
次乘加)。 - FLOPs:
2 × MACs
。
- MACs:
案例:
输入 C_in=3
, H×W=224×224
,卷积核 C_out=64
, K=3
, S=1
, P=1
,批量 B=1
。
H_out = W_out = (224 - 3 + 2)/1 + 1 = 224
- MACs = 1 × 64 × 224 × 224 × 3 × 3² = 64 × 224² × 27 = 87.3 GMACs
- FLOPs = 2 × 87.3 G = 174.6 GFLOPs.
2.1.3 Transformer 自注意力层
- 输入:
X ∈ ℝ^{N×D}
(序列长度N
,维度D
)。 - 计算步骤:
- 生成 Q, K, V:
Q = XW_Q
,K = XW_K
,V = XW_V
(每个矩阵W ∈ ℝ^{D×D}
)。 - 注意力得分:
S = softmax(QK^T / √D)
。 - 输出:
Y = SV
。
- 生成 Q, K, V:
- 计算量:
- Q/K/V 投影:
3 × 2 × N × D² = 6ND² FLOPs
(每个矩阵乘法N×D × D×D
)。 - QK^T 乘法:
2 × N²D FLOPs
(N×D
与D×N
相乘)。 - SV 乘法:
2 × N²D FLOPs
。 - 总 FLOPs:
6ND² + 4N²D
.
- Q/K/V 投影:
案例:
序列长度 N=512
,维度 D=768
。
- FLOPs = 6×512×768² + 4×512²×768 ≈ 1.2 TFLOPs.
2.1.4 大语言模型 (LLM)
- 模型结构:由
L
个 Transformer 层组成,每层包含自注意力 + FFN。 - 计算量:
- 前向传播:每 token 的 FLOPs ≈
2 × 参数量
(每参数对应一次乘加)。 - 反向传播:FLOPs ≈
4 × 参数量
(梯度计算需额外 2 倍)。
- 前向传播:每 token 的 FLOPs ≈
案例:
GPT-3 (175B 参数) 推理时生成 1 token:
- FLOPs ≈ 2 × 175B = 350 GFLOPs/token.
训练时(批量B
,序列长度T
): - FLOPs ≈ 6 × 175B × B × T = 1.05 PFLOPs(假设
B=1024
,T=2048
)。
2.2 计算训练时间
训练时间可以通过以下公式估算:
训练时间= 总FLOPs 硬件性能 × GPU利用率 \frac{\text{总FLOPs}}{\text{硬件性能} \times \text{GPU利用率}} 硬件性能×GPU利用率总FLOPs
例如,训练一个包含10亿参数的模型,假设每个参数需要6次浮点运算(2次前向传播、2次反向传播和2次参数更新),训练数据包含100亿个token,则总FLOPs为:
总FLOPs= 6 × 1 0 9 × 1 0 10 6 \times 10^9 \times 10^{10} 6×109×1010 = 6 × 1 0 19 6 \times 10^{19} 6×1019
如果使用的GPU性能为100 TFLOPS(即每秒100万亿次浮点运算),GPU利用率为80%,则训练时间估算为:
训练时间= 6 × 1 0 19 100 × 1 0 12 × 0.8 \frac{6 \times 10^{19}}{100 \times 10^{12} \times 0.8} 100×1012×0.86×1019 = 7.5 × 1 0 4 秒 7.5 \times 10^4 \text{秒} 7.5×104秒 ≈ 20.8 小时 \approx 20.8 \text{小时} ≈20.8小时
三、关键总结
指标 | 定义 | 典型场景 | 关系 |
---|---|---|---|
FLOPS | 硬件算力(每秒浮点运算次数) | GPU/TPU 性能评估 | 无关模型结构 |
FLOPs | 模型总浮点运算次数 | 算法复杂度分析 | 1 MAC = 2 FLOPs |
MACs | 乘加操作次数 | 低功耗设备优化(如移动端 CNN) | 直接关联硬件效率 |
总之,FLOPs和FLOP是评估深度学习模型复杂度和硬件性能的重要指标,理解它们的定义和关系对于模型设计、硬件选择和训练时间估算具有重要意义。
更多推荐
所有评论(0)