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硬件原理 从Fermi到Hopper 架构演进 Fermi→Kepler Maxwell→Pascal Volta→Hopper 计算核心 CUDA核心 Tensor Core RT Core 显存系统 显存容量 显存带宽 HBM类型 互联技术 NVLink NVSwitch

这张图把GPU硬件原理分成了四个维度:架构演进、计算核心、显存系统和互联技术。我个人建议你把这四个维度串起来理解——架构演进决定了核心类型,核心类型决定了显存需求,显存需求又反过来影响互联设计。环环相扣,缺一不可。

我的建议:如果你刚开始接触GPU硬件,先别急着看具体参数。先把这张图的结构记在脑子里,然后逐个击破。遇到不懂的,就想想「这个设计解决了什么问题」。比如Tensor Core解决的是矩阵乘法效率问题,NVLink解决的是多卡通信瓶颈问题。理解了「为什么」,参数自然就记住了。

好了,这一章的内容就到这里。GPU硬件原理是集群部署和GPU调度的基础,把这些搞明白了,后面讲分布式训练、资源调度的时候,你就能理解为什么有的方案行得通,有的方案行不通。

可可精品资料库