第三章 GPU架构深度解析:NVIDIA CUDA Core与Tensor Core的演进
说实话,做AI芯片架构这行这么多年,我见过太多人把GPU当成一个黑盒子来用。写CUDA代码时只关心“有多少个核”,却不知道这些核到底是怎么工作的。今天我就带你把V100到H100的架构变化掰开揉碎了讲清楚。
3.1 从V100说起:Volta架构的革命性突破
2017年,NVIDIA发布了Volta架构的V100。我记得当时拿到第一块V100样卡时,最震撼的不是它的算力,而是那个全新的Tensor Core。
V100的SM(Streaming Multiprocessor)单元结构是这样的:
- 每个SM包含64个CUDA Core(FP32)
- 每个SM包含8个Tensor Core(第一代)
- 每个SM包含4个纹理单元
- 共享内存容量:96KB(可配置)
你想想看,在V100之前,大家做矩阵乘法都是用CUDA Core一条一条指令去算。Tensor Core的出现,说白了就是把矩阵乘法这个最核心的操作,从软件层面硬生生搬到了硬件层面。
关键数据:V100的Tensor Core在FP16精度下,理论算力达到125 TFLOPS,而CUDA Core的FP32算力只有15.7 TFLOPS。差了整整8倍。
3.2 Tensor Core的演进:从第一代到第四代
Tensor Core的迭代,我把它总结为“精度越来越灵活,计算越来越暴力”。
| 架构 | GPU | Tensor Core代际 | 支持精度 | 单SM Tensor Core数 |
|---|---|---|---|---|
| Volta | V100 | 第一代 | FP16 | 8 |
| Turing | T4 | 第二代 | FP16, INT8, INT4 | 8 |
| Ampere | A100 | 第三代 | FP16, BF16, TF32, INT8, INT4 | 4 |
| Hopper | H100 | 第四代 | FP16, BF16, TF32, FP8, INT8, INT4 | 4 |
这里有个细节很多人会忽略:A100的Tensor Core数量从8个降到了4个。为什么?因为每个Tensor Core的计算能力翻倍了。A100的第三代Tensor Core支持了稀疏矩阵计算,说白了就是利用矩阵中大量的0值,跳过无效计算。
我的经验:在实际部署大模型时,我建议优先使用BF16而不是FP16。BF16的指数位和FP32一样,动态范围更大,训练时不容易出现梯度爆炸。我在一个LLaMA-65B的部署项目中,从FP16切到BF16后,推理精度提升了0.3%,而速度几乎没有下降。
3.3 SM单元与显存带宽:一对相爱相杀的搭档
做硬件加速这么多年,我越来越觉得:算力是矛,带宽是盾。没有足够的带宽,再强的算力也发挥不出来。
来看一组数据:
| GPU | SM数量 | CUDA Core总数 | 显存带宽 | L2缓存 |
|---|---|---|---|---|
| V100 | 80 | 5120 | 900 GB/s | 6 MB |
| A100 | 108 | 6912 | 1555 GB/s | 40 MB |
| H100 | 132 | 16896 | 2000 GB/s | 50 MB |
你发现没有?从A100到H100,CUDA Core数量翻了2.4倍,但显存带宽只提升了28%。这意味着什么?
嗯,这里要注意:大模型推理时,很多操作是带宽受限的,而不是算力受限。比如Attention机制中的KV Cache读取,每次推理都要把整个KV Cache从HBM搬到SM上。如果带宽跟不上,SM就只能干等着。
我曾经踩过的坑:在一个GPT-175B的推理项目中,我一开始只关注算力利用率,把batch size调得很大。结果发现GPU利用率只有30%左右。后来用NVIDIA Nsight分析才发现,瓶颈在显存带宽上。KV Cache的读取占用了80%以上的带宽。最后我不得不减小batch size,并启用Flash Attention来减少HBM访问。
3.4 H100的架构创新:Transformer Engine与DPX指令
H100最大的亮点,我觉得是Transformer Engine。它不是一个单独的硬件单元,而是一套软硬件协同的方案。
Transformer Engine的核心逻辑:
- 自动检测每层激活值的动态范围
- 动态选择FP8或FP16精度
- 在Tensor Core中执行混合精度计算
- 自动处理精度转换和缩放
说白了,就是让硬件自己决定“这层用8位算还是16位算”。我在测试中看到,对于BERT-Large模型,Transformer Engine能带来1.5倍的端到端加速。
另外,H100还新增了DPX指令集,专门加速动态规划算法。虽然大模型推理中暂时用不到,但我觉得未来在序列对齐、路径规划等场景中会有用武之地。
3.5 架构演进的核心逻辑:从通用到专用
回顾V100到H100的演进,我总结出三条主线:
- 计算单元越来越专用:从通用CUDA Core到专用Tensor Core,再到Transformer Engine
- 精度越来越灵活:从FP32到FP16/BF16,再到FP8/INT8/INT4
- 数据移动越来越高效:L2缓存从6MB到50MB,显存带宽从900GB/s到2TB/s
你想想看,这些变化其实都在回答同一个问题:如何让GPU更好地服务于深度学习,特别是大模型?
核心观点:未来的GPU架构,一定会继续沿着“专用化”和“精细化”的方向走。专用化是指增加更多类似Tensor Core的专用计算单元;精细化是指更细粒度的精度控制和数据管理。
好了,这一章的内容就到这里。下一章我们会深入探讨如何利用这些架构特性,写出真正高效的推理代码。
公众号:蓝海资料掘金营,微信deep3321