第一章: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集群架构:

GPU集群典型拓扑架构 计算节点 1 GPU 1 GPU 2 GPU 3 GPU 4 NVSwitch 计算节点 2 GPU 5 GPU 6 GPU 7 GPU 8 NVSwitch InfiniBand 交换机 (HDR/NDR) 并行存储 Lustre/GPFS GPU NVLink InfiniBand NVSwitch

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集群调优不是玄学,是工程。把基础概念搞懂了,后面的事情就好办了。

个人习惯:我每次接手新集群,第一件事就是跑一遍带宽测试和延迟测试。拿到基线数据后,再开始调优。没有基线,你都不知道优化有没有效果。


想要更多资料,联系可可