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 SXM | 80GB | 3.35 TB/s |
| H100 PCIe | 80GB | 2.0 TB/s |
| A100 80GB | 80GB | 2.0 TB/s |
| A100 40GB | 40GB | 1.6 TB/s |
| H20 | 96GB | 4.0 TB/s |
| L40S | 48GB | 864 GB/s |
| RTX 4090 | 24GB | 1.0 TB/s |
注意 H20 虽然算力被阉割了,但显存有 96GB,而且带宽很高,推理场景其实不错。
显存不够怎么办
几个常见的解法:
- 减小 batch size:最直接,但会影响训练效果和效率
- 混合精度:用 FP16 代替 FP32,显存减半
- 梯度累积:多个小 batch 累积梯度,等效大 batch
- 梯度 checkpointing:不存激活值,需要时重新计算,用时间换空间
- 模型并行:把模型切分到多张卡
- ZeRO 优化:DeepSpeed 的显存优化技术,后面会讲
算力(Compute)
是什么
算力是 GPU 的计算能力,通常用 FLOPS(Floating Point Operations Per Second)表示,即每秒能做多少次浮点运算。
常见的单位:
- TFLOPS = 10^12 FLOPS(万亿次)
- PFLOPS = 10^15 FLOPS(千万亿次)
不同精度的算力
同一张 GPU,不同精度的算力差别很大:
| GPU | FP32 | FP16/BF16 | INT8 | FP8 |
|---|---|---|---|---|
| H100 SXM | 67 TFLOPS | 1979 TFLOPS | 3958 TOPS | 3958 TFLOPS |
| A100 80GB | 19.5 TFLOPS | 312 TFLOPS | 624 TOPS | - |
| RTX 4090 | 82.6 TFLOPS | 330 TFLOPS | 661 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 场景下有两种带宽要关注:
- 显存带宽:GPU 核心和显存之间的数据传输速度
- 互联带宽:GPU 之间、GPU 和 CPU 之间的数据传输速度
显存带宽
GPU 计算时要不断从显存读数据、往显存写数据。显存带宽决定了这个数据搬运的速度。
| GPU | 显存带宽 |
|---|---|
| H100 SXM | 3.35 TB/s |
| A100 80GB | 2.0 TB/s |
| RTX 4090 | 1.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.0 | 32 GB/s |
| PCIe 4.0 | 16 GB/s |
| InfiniBand HDR | 25 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,各自适合什么场景。