第二章:GPU硬件选型——这些指标决定了你的训练速度

做深度学习训练,选GPU这事,真不是看显存大就完事了。我这些年踩过的坑,差不多能写个小册子。今天咱们就把显存容量、计算能力、内存带宽、NVLink这几个硬指标拆开聊,每一条都跟你的训练速度和模型能不能跑起来直接挂钩。

显存容量:模型能不能跑,先看它

显存是第一个门槛。模型参数量、批次大小、中间激活值,全得塞进显存。我见过有人买了RTX 4060(8GB)想训LLaMA 7B,结果batch size设成1都爆显存,根本没法用。

显存占用的主要部分:

  • 模型权重:参数量 × 精度字节数(FP32 4B, FP16 2B, INT8 1B)
  • 优化器状态:Adam需要2~3倍显存,SGD要1倍
  • 激活值:梯度检查点可以缩减,但会增加计算
  • 批次数据:输入图像/文本+标签

选多少显存合适?我给你个参考:

  • 6GB以下:只能跑小模型(几十M参数)或推理
  • 8-12GB:跑ResNet50、BERT-base没问题,但batch size别太大
  • 24GB(RTX 3090/4090):能训7B模型混合精度,LLaMA 7B可以用
  • 40-80GB(A100、H100):训13B以上大模型,多卡并行也不慌
  • 96GB+(A800、H800、MI300X):企业级,千亿参数

避坑指南:我曾经天真地以为“显存不够就调低batch size”,结果发现有的框架(比如PyTorch)即使batch size=1,光模型权重+优化器状态就已经超了。选卡前先算一笔账:

# 估算显存(FP16训练,Adam优化器)
参数数量 = 7e9
权重显存 = 7e9 * 2B = 14GB
优化器状态 = 7e9 * 2 * 4B = 56GB  # Adam维护momentum和variance
总显存 ≈ 14 + 56 + 激活值≈10GB = 80GB
# 结论:单卡24G根本跑不动

计算能力(Compute Capability):别买错版本

我习惯用Compute Capability(CC)来判断这块GPU支持哪些CUDA特性。不是所有新卡都兼容老代码,反过来也是。比如CUDA 11.8要求CC 6.0+,你要是手里还有块GTX 960(CC 5.2),那就得降CUDA版本。

GPU架构Compute Capability代表卡关键限制
Volta7.0V100不支持cuDNN 9.0+
Turing7.5RTX 2080 Ti不支持FP8
Ampere8.0 / 8.6A100, RTX 3090支持BF16
Hopper9.0H100支持FP8 Transformer Engine
Blackwell10.0B200下一代生态

选卡时,我建议你确认两点:

  1. 你用的深度学习框架最低支持哪个CC?(比如PyTorch 2.0要求CC 6.0+)
  2. 你需要的新特性(FP8、BF16、稀疏张量)是否被该CC支持?

你可以用nvidia-smi查CC:

nvidia-smi --query-gpu=compute_cap --format=csv
# 输出示例:8.9(对应RTX 4090)

或者在代码里查:

import torch
print(torch.cuda.get_device_capability(0))
# 输出:(8, 9)

内存带宽:这才是真正的训练瓶颈

很多人只看算力(TFLOPS),但实际训练中,算力经常喂不饱。为什么?因为内存带宽决定了你把数据从显存搬到计算单元的速度。我举个例子:

  • RTX 4090:算力82.6 TFLOPS(FP16),带宽1008 GB/s
  • V100:算力14 TFLOPS(FP16),带宽900 GB/s

你看,4090的算力是V100的6倍,但带宽只多了12%。这意味着跑小矩阵(比如BERT微调)时,4090根本跑不满算力,主要瓶颈在带宽。我曾经用4090训一个文本分类模型,GPU利用率只有30%,一看是带宽打满了。

经验公式:计算强度 = 算力 / 带宽。如果计算强度低(比如小矩阵、注意力机制),带宽就是短板。

  • 高计算强度任务:大卷积、全连接层(batch size大) → 带宽压力小
  • 低计算强度任务:flash attention、小batch推理 → 带宽决定上限

选卡时,建议看HBM2e / HBM3的带宽数字。A100 SXM版带宽2039 GB/s,比PCIe版的1555 GB/s高30%,你想想看,这差距在训练大模型时能省多少时间。

NVLink:多卡通信的加速器

单卡不够用了怎么办?上多卡。但卡和卡之间怎么通信?NVLink就是NVIDIA的“高速公路”,比PCIe快好几个级别。

互连方式单跳带宽(双向)典型延迟适用场景
PCIe 4.0 x1632 GB/s~1µs数据加载、模型并行(小规模)
NVLink 3.0(V100)600 GB/s(6链路)~200ns张量并行、流水线并行
NVLink 4.0(A100)600 GB/s(12链路)~200ns超大模型训练、全对全通信
NVLink 4.0(H100)900 GB/s(18链路)~150nsFP8训练、专家路由

我记得有一次做Megatron-LM的多卡训练,8张V100 PCIe版,用PCIe通信,张量并行那一层通信耗时占整个step的60%。换成NVLink版本(DGX-1),延迟直接降到5%。从此我选多卡方案,必看NVLink支持。

如果预算有限,买不到NVLink版,可以靠以下几点补救:

  • 减少通信频次:梯度累积加大有效batch size
  • 使用ZeRO-3:只在需要时通信
  • 优先使用数据并行(通信量最小),慎用张量并行

一张图看懂GPU选型决策

GPU硬件选型决策流程 确定任务类型 估算显存需求 检查Compute Capability 评估内存带宽 多卡:NVLink or PCIe? 确定GPU型号 💡 决策要点 小模型/推理 → 带宽优先 大模型训练 → 显存+NVLink FP8训练 → Compute Capability 9.0+ 多卡不配NVLink→数据并行 预算有限→二手V100或A100

实战选型建议

最后给你一个快速判断表,平时我选卡就这样对号入座:

场景推荐GPU核心指标预算参考
学生/个人入门RTX 3060 12GB显存够,带宽一般约2k
中小模型微调RTX 4090 24GB带宽1008GB/s,算力高约1.2w
7B模型预训练A100 80GB × 8显存+NVLink+带宽约30w+
大模型推理H100 80GBFP8加速,带宽3.35TB/s约20w
实验/开发V100 32GB二手性价比高,兼容性好约4k

再次提醒:买卡前一定先查框架的CUDA版本和CC要求。我曾经买了两块RTX 4080(CC 8.9),结果公司统一用CUDA 10.2,根本不支持,白白浪费了俩月时间升级环境。嗯,这坑我替你们踩过了。