一、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集群基础认知框架。你可以把它当作一张地图,后面讲的所有内容,都能在这张图上找到位置。

GPU集群基础认知框架 GPU架构演进 Kepler → Maxwell Pascal → Volta Ampere → Hopper 集群拓扑结构 PCIe直连 NVLink全互联 NVSwitch / InfiniBand 通信协议 NCCL MPI GPUDirect RDMA 压测核心关注点 1. GPU间通信带宽(NVLink vs PCIe) 2. 跨节点通信延迟(InfiniBand vs 以太网) 3. 协议栈开销(NCCL vs 裸MPI)

这张图里,三个模块是递进关系。架构决定了你能用什么拓扑,拓扑又决定了你能跑什么协议。压测的时候,这三个层面都得摸清楚。

我的建议:拿到一台新机器,先跑nvidia-smi topo -m看拓扑,再跑ncccl-tests测带宽。别急着上模型,先把底子摸透。

好了,这一章就聊这么多。GPU集群的基础认知,说白了就是三件事:卡是什么、怎么连的、怎么通信。后面我们会一步步深入,把这些东西用到压测实战里。

可可精品资料库