相信大家肯定经常听到显卡算力这些概念,但是到底应该怎么计算算力,以及如果判断训练一个模型需要多少算力呢?
我们来介绍一下深度学习模型的计算量和硬件算力的相关概念,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}
  • 计算量
    • MACsB × C_in × C_out(每个输出元素需 C_in 次乘加)。
    • FLOPs2 × B × C_in × C_out(乘加分解为乘法+加法)。

案例
输入维度 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
  • 计算量
    • MACsB × C_out × H_out × W_out × C_in × K²(每个输出位置需 C_in×K² 次乘加)。
    • FLOPs2 × 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)。
  • 计算步骤
    1. 生成 Q, K, V:Q = XW_Q, K = XW_K, V = XW_V(每个矩阵 W ∈ ℝ^{D×D})。
    2. 注意力得分:S = softmax(QK^T / √D)
    3. 输出:Y = SV
  • 计算量
    • Q/K/V 投影3 × 2 × N × D² = 6ND² FLOPs(每个矩阵乘法 N×D × D×D)。
    • QK^T 乘法2 × N²D FLOPsN×DD×N 相乘)。
    • SV 乘法2 × N²D FLOPs
    • 总 FLOPs6ND² + 4N²D.

案例
序列长度 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 倍)。

案例
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是评估深度学习模型复杂度和硬件性能的重要指标,理解它们的定义和关系对于模型设计、硬件选择和训练时间估算具有重要意义。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐