每位AI工程师都应了解的9个GPU概念
一份简单实用的GPU内部工作原理指南,AI工程师真正需要的内容。
梯形图转SCL | 博途AI辅助编程文档 | AI模型价格对比 | AI工具导航 | ONNX模型库 | Vibe Coding教程 | PLC在线仿真器 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
像PyTorch这样的框架之所以易于使用,是因为它们隐藏了GPU层面发生的所有复杂性。
但如今的公司和研究实验室正在寻找能够深入了解PyTorch内部工作原理、解释计算预算去向、调试GPU并使LLM更具性能的工程师。
以下是9个简单解释的概念,将帮助你更好地理解GPU。
- 1、2、3:讨论GPU计算硬件
- 4、5、6:讨论GPU内存
- 7、8:讨论程序如何在GPU上执行
- 9:讨论多个GPU如何连接在一起
让我们开始吧!
1. 流式多处理器
流式多处理器(SM)是NVIDIA GPU的核心计算单元。
它类似于CPU的核心,但有一个主要区别:它可以并行执行指令和特定操作,如矩阵乘法,速度快得多。
虽然CPU核心针对单线程的高速执行进行了优化,但GPU上的SM针对跨多个线程的高吞吐量进行了优化(并行运行大量线程)。
流式多处理器(SM)之所以如此命名,是因为:
- 它处理数据流(需要类似计算的数据输入持续提供给它)
- 它包含多个处理单元,可以并行执行数据流上的计算
SM的主要组件包括:
- CUDA核心(INT32、FP32、FP64):用于基本算术计算
- 张量核心:用于矩阵乘法计算
- Warp调度器和分发单元:用于选择下一个运行的线程组(warp)
- 加载/存储(LD/ST)单元:用于在内存和寄存器之间移动数据
- 寄存器/寄存器文件:用于临时存储每个线程的数据
- L1缓存:用于临时存储要在SM组件之间使用的数据
- 共享内存:与L1缓存相同的SRAM分区,可用于存储数据。虽然L1自动缓存数据,但共享内存可以以编程方式使用。
以下是NVIDIA H100 GPU的SM架构图。单个H100 SXM有132个这样的SM。

虽然上述组件在GPU中最常见,但你可以在H100 GPU中看到更多组件,例如:
- SFU(特殊功能单元):用于执行指数、对数和三角函数。
- 纹理(Tex)单元:用于高效处理表面纹理数据
- 张量内存加速器:用于在全局内存和共享内存之间高效移动多维数据
- L0和L1指令缓存:小型快速缓存内存,将常用指令存储在计算核心附近
2. CUDA核心
CUDA(计算统一设备架构)核心在SM中每个时钟周期处理一个简单的算术操作,如整数和浮点计算。
不同的CUDA核心处理不同类型的数值精度,如INT32、FP32和FP64,如上图架构图所示。
H100 SXM GPU具有:
- 每个SM 128个FP32 CUDA核心
- 每个GPU 16,896个FP32 CUDA核心
CUDA核心比CPU核心简单得多。虽然CPU核心可以执行复杂操作,但CUDA核心的工作是作为基本算术的简单计算器。正是这些核心的大规模并行计算使GPU如此强大。
请注意,"CUDA核心"一词指的是硬件,与CUDA软件生态系统没有直接关系。
3. 张量核心
张量核心是SM中的专用单元,可以执行快速矩阵乘加操作。
这些操作构成了深度学习工作负载的大部分,由张量核心处理,而非矩阵操作(如激活函数、归一化和逐元素操作)则由CUDA核心处理。
NVIDIA于2017年在Volta GPU架构中首次引入张量核心,极大地加速了神经网络训练工作流程。
张量核心还针对不同的数值精度进行了专门优化,如FP16、BF16、TF32和FP64。H100 GPU具有针对低精度格式(如FP8)的专用张量核心,而Blackwell系列GPU则包含针对FP4(具体为NVFP4)的张量核心。
你经常会看到GPU规格中讨论TFLOPS,这指的是GPU张量核心和CUDA核心的性能。

4. 高带宽内存
高带宽内存(HBM)是GPU的主内存。它也称为全局内存或VRAM。这是存储模型权重、激活值和KV缓存的内存。
HBM安装在GPU芯片旁边,与直接蚀刻在芯片上的较小内存组件(L2、L1和寄存器文件)一起工作(片上内存)。
它是一种动态随机存取内存(DRAM),提供更大的容量,比片上内存更便宜,而片上内存是一种静态随机存取内存(SRAM),速度极快但容量小得多。

5. 片上内存
片上内存包括直接蚀刻在芯片上的内存组件,因此称为"片上"。
这些是静态随机存取内存(SRAM)的一种,读写数据速度极快,但比HBM小得多。
按访问速度升序和容量降序排列,这些是:
- L2内存/缓存(在GPU的所有SM之间共享)
- L1内存/缓存(在SM的组件之间共享)
- 寄存器
在上图所示的H100 SM架构图中,你可以看到指令和数据缓存根据它们存储的内容分别标记。另外,"寄存器文件"指的是寄存器的数组或集合,而不是单个寄存器。
像FlashAttention这样的算法通过利用这种内存层次结构来加速计算。FlashAttention将注意力计算分割成适合片上内存的小块(称为Tiles),而不是反复从HBM读取中间数据。
6. 内存带宽
内存带宽是数据在HBM和SM之间移动的速率。通常以GB/s或TB/s为单位报告。
一些流行NVIDIA GPU的峰值内存带宽如下:
- L40S:864 GB/s
- A100 80GB SXM:2 TB/s
- H100 SXM:3.35 TB/s
- B100:8 TB/s
对于LLM推理,每个解码步骤都从HBM加载所有模型权重到计算核心(张量/CUDA核心),为每个序列生成一个token。这导致了内存带宽瓶颈,因为移动数据的速度比SM计算的速度慢得多。
这被描述为**内存墙,**处理器速度的提高比内存速度快得多。这使得大多数LLM推理,特别是解码,是内存密集型而非计算密集型。

7. 内核
内核是一个在多个GPU线程上并行运行的函数,每个线程在不同数据上执行相同的操作。这称为**单指令多线程(SIMT)**执行模型。
PyTorch函数可能会启动一个或多个内核,具体取决于所需的操作。
如果你听说过,内核融合是一种流行的技术,它将多个GPU内核组合成一个,使中间结果保留在寄存器或共享内存中,而不是写入和读回全局内存。FlashAttention是用于注意力相关计算的融合内核的示例。
8. 线程、Warp、块和网格
CUDA(计算统一设备架构)是NVIDIA的GPU编程软件生态系统。使用CUDA在GPU上编程执行被组织成多个层次,理解这些层次很重要。
线程是GPU上最基本的执行单元。每个线程都有自己的一组私有寄存器。
32个线程的组称为Warp。warp中的所有线程在SM上并行执行相同的操作。这使得warp成为GPU上真正的执行单元。
线程被分组为块,在单个SM上运行并共享其共享内存。块包含多个线程,这些线程自动分成warp执行。
网格是与内核一起启动的块组。网格中的块是独立的,GPU可以将它们调度到任何可用的SM上。这种执行层次结构使内核可以在SM上扩展。
NVIDIA还在其Hopper架构中引入了线程块集群,其中多个块被分组在一起在相邻的SM上运行,并使用分布式共享内存(DSM)高效共享数据。块集群位于CUDA执行层次结构中的块和网格之间。

需要注意的是,在CUDA中,程序员可以定义线程数量以及网格和块的维度。但是,warp不是由程序员直接创建的。相反,GPU自动将每个块中的线程分组为32个线程的warp进行执行。
9. PCIe、NVLink和NVSwitch
GPU很少单独使用,而是与其他GPU连接以形成大规模数据中心。它们按以下层次结构排列:
- 服务器或节点(4到8个GPU)
- 服务器机架(10到100个GPU)
- 集群或Pod(100到1000个GPU)
- 数据中心(10,000到100,000个GPU)

各种互连用于GPU间通信。我们讨论的三个重要互连是:
- PCIe
- NVLink
- NVLink与NVSwitch
PCIe是连接硬件组件(如GPU)到CPU和彼此之间的标准总线。
第5代PCIe提供128 GB/s,第6代PCIe提供256 GB/s的双向GPU到GPU带宽。
将其与NVIDIA专有的GPU到GPU互连NVLink进行比较,NVLink在带宽上是PCIe的重大升级。不同版本NVLink在两个GPU之间提供的双向带宽如下:
- H100上900 GB/s(NVLink 4)
- B200上1.8 TB/s(NVLink 5)
- Rubin上3.6 TB/s(NVLink 6)
但是有一个问题:NVLink的总带宽在其连接的GPU之间共享。这意味着如果H100通过NVLink连接到三个其他H100 GPU,其900 GB/s带宽将在连接之间分配。
NVSwitch是NVIDIA的另一个专有系统,为此提供了解决方案。它是一种高带宽、低延迟的结构,连接单个系统内的多个GPU,允许它们在每个连接上共享完整的NVLink带宽。

原文链接:9 GPU Concepts Every AI Engineer Should Know
汇智网翻译整理,转载请标明出处