2. GPU硬件原理:从Fermi到Hopper的架构演进
聊GPU硬件原理,我习惯从架构演进讲起。为什么?因为只有理解了芯片设计者的思路变迁,你才能真正明白——为什么有的任务跑得快,有的任务死活上不去。
说白了,GPU最初就是为图形渲染设计的。但后来大家发现,这玩意儿做并行计算也挺猛。于是NVIDIA从Fermi架构开始,正式把GPU推向了通用计算领域。嗯,这条路一走就是十几年。
2.1 架构演进:Fermi到Hopper
我个人把GPU架构演进分成三个阶段:
- 奠基期(Fermi → Kepler):确立CUDA核心概念,引入通用计算能力
- 成熟期(Maxwell → Volta):能效比大幅提升,Tensor Core首次亮相
- 爆发期(Turing → Hopper):AI专用硬件加速,显存带宽突破天际
每个架构我都踩过坑。记得有一次在Fermi架构的卡上跑一个大规模矩阵运算,性能死活上不去。后来发现是全局内存访问模式不对——Fermi的L1缓存和共享内存是分开的,你如果没用好共享内存,性能直接腰斩。
| 架构 | 发布年份 | 关键特性 | 我的评价 |
|---|---|---|---|
| Fermi | 2010 | 512 CUDA核心,ECC内存 | 通用计算的起点 |
| Kepler | 2012 | SMX单元,动态并行 | 能效比大跃进 |
| Maxwell | 2014 | 第三代SM,低功耗设计 | 省电王者 |
| Pascal | 2016 | NVLink 1.0,统一内存 | 多卡互联的里程碑 |
| Volta | 2017 | Tensor Core,独立线程调度 | AI计算的转折点 |
| Turing | 2018 | RT Core,INT8/Tensor Core增强 | 实时光线追踪+AI |
| Ampere | 2020 | 第三代Tensor Core,MIG | 云原生GPU的标杆 |
| Hopper | 2022 | Transformer引擎,DPX指令 | 大模型时代的专属武器 |
核心观点:架构演进的核心逻辑就两条——并行度越来越高,专用硬件越来越强。从Fermi的512核心到Hopper的18432核心,增长了36倍。但真正让AI训练起飞的是Tensor Core,这个后面细说。
2.2 CUDA核心与Tensor Core
很多人搞混这两个概念。我简单解释一下:
- CUDA核心:通用计算单元,什么都能算,但一次只能算一个标量
- Tensor Core:专用矩阵计算单元,一次算一个4×4矩阵乘法
你想想看,一个Tensor Core一次完成的运算,CUDA核心要跑16次。这就是为什么AI训练中Tensor Core这么重要。
我曾经在一个项目里优化BERT训练,一开始用CUDA核心跑矩阵乘法,一个batch要3秒。后来改成Tensor Core,直接降到0.4秒。嗯,7.5倍的差距,这就是专用硬件的威力。
避坑指南:Tensor Core不是所有数据类型都支持。Ampere架构支持TF32、FP16、BF16、INT8。如果你用FP32训练,Tensor Core是不工作的。我曾经见过有人买了A100,结果代码里写死了FP32,白白浪费了80%的性能。
Tensor Core的演进也很关键:
- Volta(第一代):只支持FP16,精度要求高
- Turing(第二代):加入INT8和INT4,推理加速明显
- Ampere(第三代):支持TF32、BF16、稀疏化计算
- Hopper(第四代):Transformer引擎,自动精度选择
2.3 显存带宽与容量
显存这东西,说白了就是GPU的「内存」。但它的重要性远超CPU内存——因为GPU计算的核心瓶颈,往往不在算力,而在数据搬运。
我做过一个测试:在V100上跑ResNet-50,理论算力利用率只有35%。为什么?因为数据从显存搬到计算单元的速度跟不上。这就是所谓的「内存墙」问题。
| GPU型号 | 显存容量 | 显存带宽 | 显存类型 |
|---|---|---|---|
| V100 | 16/32GB | 900 GB/s | HBM2 |
| A100 | 40/80GB | 2039 GB/s | HBM2e |
| H100 | 80GB | 3350 GB/s | HBM3 |
注意看带宽的增长:从V100的900GB/s到H100的3350GB/s,增长了3.7倍。但同期算力增长了多少?H100的FP16算力是V100的6倍。算力和带宽的增长速度不匹配,这就是为什么大模型训练时,显存带宽往往成为瓶颈。
警告:显存容量不是越大越好。我见过有人买8张A100 80GB跑一个7B模型,结果显存利用率不到30%。大显存意味着高成本,选型时要根据模型大小和batch size精确计算。
2.4 NVLink与NVSwitch
单卡性能再强,也有极限。多卡互联才是大规模训练的关键。NVLink和NVSwitch就是NVIDIA给出的答案。
NVLink:GPU之间的高速互联通道。从Pascal的NVLink 1.0(160GB/s)到Hopper的NVLink 4.0(900GB/s),带宽翻了5.6倍。
NVSwitch:全互联的交换网络。一个NVSwitch可以连接16张GPU,实现任意两张GPU之间的全带宽通信。
我记得第一次搭建DGX A100的时候,看着那8张A100通过NVSwitch全互联,心里只有一个感觉——这玩意儿就是为分布式训练量身定做的。
关键数据:8张A100通过NVSwitch互联,任意两张GPU之间的通信带宽都是600GB/s。相比之下,如果用传统的PCIe 4.0 x16,带宽只有32GB/s。差了将近20倍。
NVLink的拓扑结构也很重要:
- Ring拓扑:GPU首尾相连,适合小规模集群
- Mesh拓扑:GPU网格互联,中等规模
- NVSwitch全互联:任意GPU直连,大规模训练首选
我曾经在一个项目中,因为拓扑选择不当,导致通信开销占了总训练时间的40%。后来改成NVSwitch全互联,通信开销降到了5%以下。嗯,这个教训让我深刻理解了「通信拓扑决定训练效率」这句话。
2.5 知识体系总览
下面这张图是我自己整理的GPU硬件知识体系,涵盖了本章的核心内容:
这张图把GPU硬件原理分成了四个维度:架构演进、计算核心、显存系统和互联技术。我个人建议你把这四个维度串起来理解——架构演进决定了核心类型,核心类型决定了显存需求,显存需求又反过来影响互联设计。环环相扣,缺一不可。
我的建议:如果你刚开始接触GPU硬件,先别急着看具体参数。先把这张图的结构记在脑子里,然后逐个击破。遇到不懂的,就想想「这个设计解决了什么问题」。比如Tensor Core解决的是矩阵乘法效率问题,NVLink解决的是多卡通信瓶颈问题。理解了「为什么」,参数自然就记住了。
好了,这一章的内容就到这里。GPU硬件原理是集群部署和GPU调度的基础,把这些搞明白了,后面讲分布式训练、资源调度的时候,你就能理解为什么有的方案行得通,有的方案行不通。