第一章:GPU集群概述
各位同学好,我是老K。在HPC这个圈子里摸爬滚打了十几年,今天咱们来聊聊GPU集群的入门课。说实话,每次带新人时我都会先问一个问题:你真正理解GPU和CPU的区别吗?很多人答不上来。好,那咱们就从这里开始。
1.1 GPU计算发展史:从游戏卡到算力霸主
GPU最初是干嘛的?打游戏。2006年之前,大家觉得GPU就是个图形加速器。直到NVIDIA发布了CUDA,事情开始变了。
我记得2008年第一次用CUDA做科学计算,那感觉就像发现了新大陆。一块GTX 280,浮点性能顶得上一个小型集群。当然,那时候编程体验很差,动不动就显存溢出。
几个关键节点:
- 2006年:NVIDIA发布CUDA,GPU通用计算元年
- 2012年:AlexNet用GPU训练,深度学习爆发
- 2017年:Volta架构引入Tensor Core,AI训练提速10倍
- 2020年:A100发布,MIG技术实现GPU分区
- 2023年:H100 Hopper架构,Transformer引擎专为大模型设计
你想想看,从最初的几百个CUDA核心到现在的上万核心,从单精度到混合精度,GPU的发展速度比摩尔定律还猛。
核心观点:GPU计算的成功,本质上是「并行化」对「串行化」的胜利。不是CPU不行,而是应用场景变了。
1.2 GPU vs CPU架构差异:一个像工厂,一个像博士
我经常用这个比喻:CPU是博士,什么都会但数量少;GPU是流水线工人,只会简单操作但人多。
具体差异看这张表:
| 对比维度 | CPU | GPU |
|---|---|---|
| 核心数量 | 4-64核 | 数千核(如H100有18432个CUDA核心) |
| 缓存设计 | 大缓存(L1/L2/L3) | 小缓存,依赖高带宽显存 |
| 控制单元 | 复杂分支预测、乱序执行 | 简单控制,SIMT模式 |
| 内存带宽 | ~100 GB/s | ~2 TB/s(H100) |
| 适用场景 | 逻辑控制、串行任务 | 大规模并行计算、矩阵运算 |
为什么会这样?说白了,CPU要处理各种复杂指令,所以控制单元占了大量面积。GPU呢?它假设所有线程做同样的事,控制单元可以做得非常简单,省下来的面积全塞计算单元。
避坑指南:我曾经遇到一个项目,团队把CPU上的串行算法直接搬到GPU上跑,结果比CPU还慢。为什么?因为GPU最怕分支和同步。记住:GPU适合的是「数据并行」,不是「任务并行」。
1.3 GPU集群典型拓扑:NVLink和InfiniBand
单卡再强也有极限。集群才是王道。但怎么把GPU连起来?这里有两个关键网络。
NVLink:GPU之间的高速公路
NVLink是NVIDIA自家的互联技术。我习惯把它比作「GPU之间的直连通道」。A100有12条NVLink,带宽600 GB/s。H100更猛,18条NVLink,带宽900 GB/s。
典型拓扑:
- DGX A100:8卡全互联,每张卡都和其他7张卡直连
- DGX H100:8卡通过NVSwitch互联,形成全带宽交换
InfiniBand:集群的骨干网
跨节点通信怎么办?InfiniBand上场。目前主流是HDR(200 Gbps)和NDR(400 Gbps)。
我个人习惯用这个拓扑:
- 每个节点内部:NVLink连接8张GPU
- 节点之间:InfiniBand连接,通常用Fat-Tree拓扑
- 存储网络:独立InfiniBand或以太网
注意:网络拓扑设计直接影响性能。我曾经见过一个集群,因为网络设计不合理,多机训练时通信开销占了60%以上。GPU算力再强也白搭。
下面这张图展示了典型的GPU集群架构:
1.4 集群性能指标:FLOPS、带宽、延迟
衡量一个GPU集群好不好,就看三个数:算力、带宽、延迟。我习惯把它们叫做「铁三角」。
FLOPS:每秒浮点运算次数
这是最直观的指标。H100的FP16算力是1979 TFLOPS,FP8是3958 TFLOPS。但注意:理论峰值和实际能跑到的差距很大。
实战经验:我测试过一个集群,理论算力100 PFLOPS,实际跑大模型训练只能到60 PFLOPS。瓶颈在哪?通信和IO。所以别只看纸面数据。
带宽:数据搬运的速度
分三个层次:
- 显存带宽:H100是3.35 TB/s
- 节点内带宽:NVLink 900 GB/s
- 跨节点带宽:InfiniBand NDR 400 Gbps(约50 GB/s)
你想想看,跨节点带宽比显存带宽慢了两个数量级。这就是为什么分布式训练要尽量减少通信。
延迟:响应时间
延迟分很多种:
- GPU Kernel启动延迟:微秒级
- NVLink延迟:几百纳秒
- InfiniBand延迟:1-3微秒
- 跨机房延迟:毫秒级
避坑指南:我曾经遇到一个案例,集群跨了两个机房,延迟差了5倍。结果训练时梯度同步成了瓶颈,GPU利用率不到30%。后来把所有节点放在同一个机柜里,问题解决。
1.5 小结:集群设计的核心思想
嗯,说了这么多,总结一下我的经验:
- 算力要匹配:GPU算力、网络带宽、存储IO要平衡,别出现短板
- 拓扑要合理:NVLink解决节点内,InfiniBand解决节点间
- 延迟要控制:能放一个机柜就别放两个,能走NVLink就别走网络
- 监控要到位:没有监控的集群就是盲人摸象
最后说一句:GPU集群调优不是玄学,是工程。把基础概念搞懂了,后面的事情就好办了。
个人习惯:我每次接手新集群,第一件事就是跑一遍带宽测试和延迟测试。拿到基线数据后,再开始调优。没有基线,你都不知道优化有没有效果。
想要更多资料,联系可可