HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于

GPU 的核心指标:显存、算力、带宽

买 GPU、选 GPU、优化 GPU,都绑不开三个指标:显存、算力、带宽。

很多人只关注显存大小和算力高低,但实际上这三个指标是相互制约的。搞清楚它们的关系,才能理解为什么有些优化有效、有些没用。

这篇讲清楚这三个指标分别是什么,怎么看,以及它们之间的关系。


显存(Memory)

是什么

显存是 GPU 的内存,全称 Video RAM(VRAM),也叫 GPU Memory。

和 CPU 的内存类似,显存用来存储 GPU 计算过程中需要的数据。对于 AI 任务,显存里主要存这些东西:

训练时

  • 模型参数(权重)
  • 梯度
  • 优化器状态(如 Adam 的动量)
  • 激活值(前向传播的中间结果,反向传播要用)
  • 输入数据(当前 batch)

推理时

  • 模型参数
  • KV Cache(注意力机制的缓存)
  • 输入输出数据

怎么算显存占用

粗略估算一个模型需要多少显存:

推理

显存 ≈ 参数量 × 每个参数的字节数

例:7B 模型,FP16 精度
显存 = 7B × 2 字节 = 14GB

FP16 每个参数 2 字节,FP32 每个参数 4 字节,INT8 每个参数 1 字节。

但这只是模型参数本身。推理时还有 KV Cache,实际占用会更多。KV Cache 大小和上下文长度成正比,后面会专门讲。

训练

训练比推理吃显存多得多,因为要存梯度、优化器状态、激活值:

显存 ≈ 参数量 × 16~20 字节(用 Adam 优化器,混合精度训练)

例:7B 模型
显存 ≈ 7B × 18 = 126GB

所以训练 7B 模型,单卡 80GB 显存都不够,得上多卡。

主流 GPU 的显存

GPU显存显存带宽
H100 SXM80GB3.35 TB/s
H100 PCIe80GB2.0 TB/s
A100 80GB80GB2.0 TB/s
A100 40GB40GB1.6 TB/s
H2096GB4.0 TB/s
L40S48GB864 GB/s
RTX 409024GB1.0 TB/s

注意 H20 虽然算力被阉割了,但显存有 96GB,而且带宽很高,推理场景其实不错。

显存不够怎么办

几个常见的解法:

  1. 减小 batch size:最直接,但会影响训练效果和效率
  2. 混合精度:用 FP16 代替 FP32,显存减半
  3. 梯度累积:多个小 batch 累积梯度,等效大 batch
  4. 梯度 checkpointing:不存激活值,需要时重新计算,用时间换空间
  5. 模型并行:把模型切分到多张卡
  6. ZeRO 优化:DeepSpeed 的显存优化技术,后面会讲

算力(Compute)

是什么

算力是 GPU 的计算能力,通常用 FLOPS(Floating Point Operations Per Second)表示,即每秒能做多少次浮点运算。

常见的单位:

  • TFLOPS = 10^12 FLOPS(万亿次)
  • PFLOPS = 10^15 FLOPS(千万亿次)

不同精度的算力

同一张 GPU,不同精度的算力差别很大:

GPUFP32FP16/BF16INT8FP8
H100 SXM67 TFLOPS1979 TFLOPS3958 TOPS3958 TFLOPS
A100 80GB19.5 TFLOPS312 TFLOPS624 TOPS-
RTX 409082.6 TFLOPS330 TFLOPS661 TOPS-

可以看到:

  • FP16 算力比 FP32 高很多(H100 上差 30 倍)
  • INT8 算力比 FP16 还要高

这也是为什么现在 AI 训练都用混合精度(FP16/BF16),推理会用 INT8 量化。精度低一点,算力高很多,而且对模型效果影响不大。

Tensor Core

上面 FP16 算力高,是因为用了 Tensor Core。

Tensor Core 是 NVIDIA GPU 上专门为矩阵运算设计的计算单元,从 Volta 架构(V100)开始有。它能高效做矩阵乘法(GEMM),而深度学习的主要计算就是矩阵乘法,所以 Tensor Core 对 AI 场景特别有用。

普通的 CUDA Core 做 FP16 计算,算力和 FP32 差不多。但 Tensor Core 做 FP16 矩阵运算,算力能高一个数量级。

算力利用率

GPU 的标称算力是理论峰值,实际能用到多少取决于很多因素:

  • 算法是否适合 GPU 并行
  • 内存访问模式是否高效
  • 有没有用 Tensor Core
  • kernel 写得好不好

实际算力利用率(MFU,Model FLOPS Utilization)通常在 30%-60%。大厂优化得好的训练框架能到 50% 以上,已经算很不错了。

算力够不够用

对于大模型训练,算力几乎总是不够的。训练时间 = 计算量 / 算力,计算量是固定的(由模型大小和数据量决定),算力越高训练越快。

对于推理,算力是否够用取决于场景:

  • 离线批处理:算力越高越好
  • 在线服务:延迟更重要,不一定需要最高算力

带宽(Bandwidth)

是什么

带宽是数据传输速度。GPU 场景下有两种带宽要关注:

  1. 显存带宽:GPU 核心和显存之间的数据传输速度
  2. 互联带宽:GPU 之间、GPU 和 CPU 之间的数据传输速度

显存带宽

GPU 计算时要不断从显存读数据、往显存写数据。显存带宽决定了这个数据搬运的速度。

GPU显存带宽
H100 SXM3.35 TB/s
A100 80GB2.0 TB/s
RTX 40901.0 TB/s

为什么带宽很重要

很多人只看算力,忽略带宽。但实际上,很多 AI 任务是带宽瓶颈而不是算力瓶颈。

看一个指标:算术强度(Arithmetic Intensity)

算术强度 = 计算量 / 数据访问量

如果一个算子需要读 1GB 数据,做 1T 次计算,算术强度就是 1000 FLOP/Byte。

GPU 有一个平衡点:

平衡点算术强度 = 算力 / 带宽

H100: 1979 TFLOPS / 3.35 TB/s ≈ 590 FLOP/Byte
A100: 312 TFLOPS / 2.0 TB/s ≈ 156 FLOP/Byte
  • 如果算子的算术强度 > 平衡点,是计算瓶颈,算力越高越好
  • 如果算子的算术强度 < 平衡点,是带宽瓶颈,带宽越高越好

大模型推理是带宽瓶颈

大模型推理时,每生成一个 token,需要读取全部模型参数(几十 GB),但计算量相对不大。算术强度很低,是典型的带宽瓶颈任务。

这也是为什么:

  • H100 的推理性能比 A100 提升有限(带宽没提升那么多)
  • 量化(INT8/INT4)对推理提升明显(减少了需要读取的数据量)
  • batch size 大一点效率更高(摊薄了参数读取的开销)

大模型训练更接近计算瓶颈

训练时 batch size 通常比较大,同样的参数被多个样本复用,算术强度更高,更接近计算瓶颈。所以训练更吃算力。

互联带宽

多卡训练和推理时,GPU 之间要交换数据。互联带宽决定了这个通信的速度。

互联方式带宽(单向)
NVLink 4.0(H100)450 GB/s(单链路 50 GB/s × 9)
NVLink 3.0(A100)300 GB/s
PCIe 5.032 GB/s
PCIe 4.016 GB/s
InfiniBand HDR25 GB/s
100Gbps 以太网12.5 GB/s

可以看到 NVLink 比 PCIe 快一个数量级。所以分布式训练时:

  • 机器内尽量走 NVLink
  • 机器间用 InfiniBand

用低带宽互联做分布式训练,通信时间会很长,GPU 大部分时间在等,利用率上不去。


三者的关系

显存、算力、带宽不是独立的,它们共同决定了 GPU 能跑什么任务、跑多快。

Roofline 模型

有一个经典的性能分析模型叫 Roofline Model,可以直观理解算力和带宽的关系:

            ┌─────────────────────────────
            │          算力天花板
            │     ─────────────────────
性          │    ╱
能          │   ╱
(FLOPS)     │  ╱
            │ ╱  带宽天花板
            │╱   (斜率 = 带宽)
            └────────────────────────────
                 算术强度(FLOP/Byte)
  • 左边区域:带宽瓶颈,性能受限于数据传输
  • 右边区域:算力瓶颈,性能受限于计算能力
  • 拐点:平衡点

选 GPU 要看场景

场景瓶颈关键指标
大模型训练算力 + 显存FP16 算力、显存容量
大模型推理带宽 + 显存显存带宽、显存容量
小模型推理算力算力
长上下文推理显存显存容量(KV Cache 很大)

一个例子

假设要部署 70B 模型做推理:

显存需求

  • 模型参数:70B × 2 = 140GB(FP16)
  • 需要至少 2 张 80GB 的卡,或者用量化

带宽需求

  • 每生成一个 token 要读一遍参数:140GB
  • 如果要达到 50 tokens/s,需要 140 × 50 = 7 TB/s 带宽
  • 单张 H100 带宽 3.35 TB/s,不够
  • 要么多卡,要么降低吞吐预期,要么量化减少参数体积

算力需求

  • 相对于带宽来说,通常不是瓶颈

这个例子说明:大模型推理时,带宽往往比算力更关键。


怎么查看这些指标

查看 GPU 规格

nvidia-smi -q

# 或者只看特定信息
nvidia-smi --query-gpu=name,memory.total,clocks.max.sm,clocks.max.memory --format=csv

实时监控

# 显存和利用率
nvidia-smi -l 1

# 或者用 nvitop
nvitop

性能分析

如果要深入分析算力和带宽利用率,可以用:

  • Nsight Systems:看 timeline,找瓶颈
  • Nsight Compute:分析 kernel 性能
  • PyTorch Profiler:分析 PyTorch 程序性能

这些工具比较专业,需要一定学习成本,但排查性能问题时很有用。


小结

三个核心指标:

  • 显存:决定能跑多大的模型,训练时还要存梯度和激活值
  • 算力:决定计算速度,不同精度差别很大
  • 带宽:决定数据搬运速度,很多任务是带宽瓶颈

它们的关系:

  • 算力和带宽通过算术强度联系,不同任务瓶颈不同
  • 大模型推理通常是带宽瓶颈
  • 大模型训练更接近算力瓶颈

下一篇讲主流 GPU 型号对比:H100、A100、H20、4090,各自适合什么场景。