Skip to content

加速器算力账:从规格书到可交付 FLOPs ​

规格书上的 TFLOPS 是"理论峰值",不是"你能用到的算力"。本文把一张加速卡的账拆成三层:理论算力怎么推导、算术强度决定瓶颈、实测利用率才是可交付值。方法框架参考开源书稿《深入理解 AI Infra:量化分析与系统设计》(李博杰,Apache-2.0),公式与算例为本站自行推导整理,可复算。

1. 第一层:理论算力怎么算 ​

GPU 的峰值 FLOPs 由三要素决定:

Peak_FLOPs=cores×freq×FLOPs_per_cyclePeak\_FLOPs = cores \times freq \times FLOPs\_per\_cycle

  • cores:CUDA core(FP32)或 Tensor Core(FP16/INT8);
  • freq:核心频率(GHz);
  • FLOPs_per_cycle:每周期每核浮点运算次数——FP32 FMA 为 2,Tensor Core FP16 视代际为 512~1024。

常用卡的规格账(FP16 Tensor Core 理论峰值):

卡显存带宽FP16 峰值BF16 峰值算术强度拐点
A100 80G2.0 TB/s312 TFLOPS312 TFLOPS156 FLOPs/Byte
H100 SXM3.35 TB/s989 TFLOPS989 TFLOPS295 FLOPs/Byte
L40S 48G864 GB/s362 TFLOPS362 TFLOPS419 FLOPs/Byte

判断:同样叫"FP16",Tensor Core 的稀疏/稠密、峰值频率差异能让数字差一倍。规格书数字只用于数量级估算,真正交付要看第三层。

2. 第二层:算术强度决定瓶颈 ​

算术强度(Arithmetic Intensity,AI)= 每字节数据对应的 FLOPs:

AI=FLOPsBytes_movedAI = \frac{FLOPs}{Bytes\_moved}

用 roofline 判定:当 AI 大于拐点(= 算力/带宽)时算力受限,否则带宽受限。上表可见:

  • L40S 拐点 419 FLOPs/Byte——绝大多数 LLM 算子低于这个值,是带宽受限;
  • H100 拐点 295——带宽相对更充裕,更多算子落在算力受限区。

这就是"为什么 L40S 显存带宽小、大模型跑不快"的量化答案:不是算力不够,是每搬 1 字节能做的事少。

3. 第三层:decode 是带宽受限的活 ​

LLM 推理的 decode 阶段,每生成 1 个 token 要读一遍全部权重:

Bytes_per_token≈N×bytes_per_param,Tokens_per_sec=BWBytes_per_tokenBytes\_per\_token \approx N \times bytes\_per\_param, \quad Tokens\_per\_sec = \frac{BW}{Bytes\_per\_token}

70B 模型 FP16(140 GB/次读取)在 L40S 上:

864 GB/s140 GB≈6.2 tok/s/卡\frac{864\ GB/s}{140\ GB} \approx 6.2\ tok/s/卡

而"算力账"算出的 decode 上限(362T / 2×70B ≈ 2585 tok/s)永远到不了——权重读取带宽先把它卡死了。decode 是带宽受限问题,prefill 是算力受限问题,两者优化方向完全不同。

4. 可复算 Python 函数 ​

python
def gpu_account(bw_gbps, peak_tflops, n_params_b, bytes_per_param=2):
    """给定带宽/算力/参数量,返回 decode 带宽上限与理论算力上限(tok/s)"""
    bytes_per_token = n_params_b * 1e9 * bytes_per_param          # B
    decode_bw = bw_gbps * 1e9 / bytes_per_token                    # tok/s
    flops_per_token = 2 * n_params_b * 1e9                         # decode 2N FLOPs
    compute_ceiling = peak_tflops * 1e12 / flops_per_token         # tok/s
    return decode_bw, compute_ceiling

gpu_account(bw_gbps=864, peak_tflops=362, n_params_b=70)
# (6.17, 2585.7)  → decode 实际被带宽压在 ~6 tok/s

5. 实测对照与交付 ​

用途正确口径常见错误
单卡推理 QPS 预估带宽账(decode)+ 算力账(prefill)分开算拿规格 TFLOPS 直接推
训练吞吐预估按 MFU 40-60% 折损按峰值 × 100%
卡型选型先看拐点是否匹配负载 AI只看 TFLOPS 数字

交付清单:

  1. 对每个候选负载,先算 AI 并对照拐点,确认瓶颈是算力还是带宽;
  2. decode 吞吐一律按带宽账估算,算力账仅作上限参考;
  3. 实测 MFU/利用率与理论值对比,偏差 >30% 时按"拓扑→驱动→参数→应用"排查(见 验收与性能基线)。

本文为本站自行推导整理,方法框架参考开源书稿《深入理解 AI Infra》(Apache-2.0);具体版本号与实测数据以现场为准。

AI-HPC 智算超算专家 · Contact: openaihpc@gmail.com