一、GPU集群基础认知:架构演进、拓扑结构与通信协议
做GPU集群压测,第一件事不是跑benchmark。
而是搞清楚你手里拿的到底是什么硬件。
我见过太多团队,上来就开跑,结果性能上不去,查了半天发现是拓扑配错了。嗯,这种坑我踩过不止一次。
1.1 GPU架构演进:从Kepler到Hopper
先聊聊GPU架构。说白了,GPU就是一块专门做并行计算的芯片。
我个人习惯把架构演进分成三个阶段:
- Kepler/Maxwell时代:那时候GPU主要还是做图形渲染。CUDA核心少,显存小,做计算得精打细算。我记得2014年用K80做训练,一个模型跑三天,现在想想真是慢得离谱。
- Pascal/Volta时代:NVLink出现了,Tensor Core也来了。这是转折点。P100开始支持NVLink,V100直接上了Tensor Core。我在项目中遇到过,同样的模型,V100比P100快了将近4倍。
- Ampere/Hopper时代:A100和H100,基本就是为大规模集群设计的。第三代NVLink,带宽高得吓人。H100还加了Transformer Engine,专门优化大模型。
核心变化:从单卡计算 → 多卡互联 → 集群协同。每一次架构升级,都在解决同一个问题——怎么让更多GPU一起干活。
1.2 集群拓扑结构:你GPU之间怎么连的?
集群拓扑,说白了就是GPU之间的连接方式。
你想想看,8张卡放在一台机器里,它们怎么通信?
常见的拓扑结构有这几种:
| 拓扑类型 | 特点 | 典型场景 |
|---|---|---|
| PCIe直连 | 走PCIe总线,带宽有限(PCIe 4.0 x16约32GB/s) | 老旧集群、小规模训练 |
| NVLink全互联 | GPU之间直接通信,带宽极高(A100 NVLink约600GB/s) | DGX系列、高性能训练 |
| NVSwitch | 通过交换机互联,支持更多GPU | DGX SuperPOD、大规模集群 |
| InfiniBand | 跨节点通信,RDMA技术 | 多机多卡训练 |
我曾经在一个项目中,发现8卡机器里GPU 0和GPU 7之间的通信延迟比GPU 0和GPU 1高了3倍。查了半天,原来是拓扑没配好,数据走了PCIe而不是NVLink。避坑指南:跑压测前,一定先用nvidia-smi topo -m看看拓扑图。
小技巧:用nvidia-smi topo -m可以查看GPU之间的连接方式。如果看到"NV"字样,说明走的是NVLink;如果是"PIX"或"PHB",那就是PCIe。
1.3 通信协议简介:GPU之间怎么说话?
GPU之间通信,不是直接传数据那么简单。
它们需要一套协议来协调。我常用的协议有这几种:
- NCCL:NVIDIA的集体通信库。做分布式训练必备。它封装了NVLink、InfiniBand、PCIe等各种底层通信。说白了,你调NCCL,它自动选最快的路。
- MPI:消息传递接口。老牌协议,HPC领域用得最多。NCCL其实也借鉴了MPI的思想。
- GDR(GPUDirect RDMA):让GPU直接读写网卡数据,不用经过CPU内存。这玩意儿能大幅降低延迟。我在项目中遇到过,开了GDR之后,跨节点通信延迟从200微秒降到了50微秒。
为什么会这样?因为传统方式要数据从GPU→CPU内存→网卡,多了一步拷贝。GDR直接跳过CPU,快得不是一星半点。
注意:GDR不是所有网卡都支持。Mellanox ConnectX-5以上才支持。用之前先查兼容性,否则开了反而报错。
1.4 知识体系总览
下面这张图,是我自己总结的GPU集群基础认知框架。你可以把它当作一张地图,后面讲的所有内容,都能在这张图上找到位置。
这张图里,三个模块是递进关系。架构决定了你能用什么拓扑,拓扑又决定了你能跑什么协议。压测的时候,这三个层面都得摸清楚。
我的建议:拿到一台新机器,先跑nvidia-smi topo -m看拓扑,再跑ncccl-tests测带宽。别急着上模型,先把底子摸透。
好了,这一章就聊这么多。GPU集群的基础认知,说白了就是三件事:卡是什么、怎么连的、怎么通信。后面我们会一步步深入,把这些东西用到压测实战里。