ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SXM与PCIe整机实测对比:通信架构决定训练性能

SXM与PCIe整机实测对比:通信架构决定训练性能

“SXM和PCIe整机,到底怎么选?”这个问题,我这几个月被问得都快会背了。不是单卡性能差多少的问题,而是整机形态带来的连锁反应,直接把使用场景劈成了两半。这篇就用我手头这套基于H800的实测数据来说清楚:嘴上说的“八卡整机”,和实际跑起来的“八卡整机”,根本是两种东西。如果你正在规划训练集群,或者准备给机房扩容,这篇内容应该能帮你少走一大段弯路——顺便把几个容易被销售话术带偏的坑提前踩平。

1. 整机对决先看“形态差”:SXM和PCIe到底差在哪一层

1.1 接口形态只是表象,真正的分水岭是互联架构

先说个很容易被忽略的事实:单看一张卡,SXM和PCIe的H800算力标称几乎一致,显存也一样是80GB。真正拉开差距的,不是卡本身,而是整机里那些卡的“聊天方式”。

SXM形态是某GPU厂商的专属模块化底座方案。卡不是插在PCIe槽位上,而是直接扣在一块专门设计的基板上,通过板载的NVLink交换模块,把八张卡做成一个高速全互联的集群。每一对GPU之间都有高带宽直连通道,软件层面看到的是一整块可以自由通信的算力池。做数据并行、张量并行时,梯度交换和中间结果传递基本走板载NVLink,带宽单位是GB/s级别的高位。

PCIe形态就是标准扩展卡,插在通用服务器的PCIe插槽上。八张卡之间的通信要绕道CPU Root Complex或者独立的PCIe Switch,本质上所有跨卡数据都要过主机内存这个“中间人”。虽然PCIe Gen5 x16单卡双向带宽理论上能到128GB/s,但多卡同时通信时,总线瓶颈立刻显现——尤其是AllReduce这种需要全网聚合的集合通信,大家都要抢同一条路,延迟和拥塞马上把性能拉下来。

所以第一个结论很明确:SXM和PCIe整机的性能差距,在通信密集型场景下主要是由互联架构决定的,而不是由单卡算力决定的。单卡算力只是“账面上的数字”,互联架构才是“跑得飞起还是干瞪眼”的分水岭。

1.2 整机设计连锁反应:供电、散热、体积和可维护性

互联架构不同,整机设计也跟着分道扬镳。

SXM整机是高度定制的高密度方案。基板上有专门的高压供电模块,单卡TDP可以标到700W,八卡就是5.6kW的纯GPU功耗。要压住这个级别的发热,风冷必须上超高转速风扇加大面积散热片,或者直接上液冷。主板、机箱、电源背板全是定制的,冗余和监控也是整机级的——换句话说,买SXM整机等于买了一个“一体化的训练单元”,可调余地小,但集成度高。

PCIe形态则是插在通用服务器里,供电通常走标准PCIe辅助供电口,单卡TDP在350W左右,八卡整机功耗比SXM形态低不少。好处是灵活,能混插不同型号的卡,也能用普通机柜空间开箱即用。坏处是散热风道、供电余量、卡间通信带宽都受限于通用平台的设计,很难把八张卡真正喂饱。

整机层面还有一个容易被忽视的点:高密度SXM整机对机房环境的要求更高。同样满载跑训练,SXM整机的出风温度更高,噪音也更大,如果没有专用的液冷循环,夏天机房空调很可能会撑不住。PCIe整机在这方面的容错度大很多,普通风冷机房也能稳跑。

1.3 这套H800测试平台的配置基线

为了避免“拿两台配置不一样的机器对比”这种糊涂账,我把测试平台压到尽量统一:两张样卡都是H800工程样卡,显存80GB,CUDA和驱动版本一致,容器镜像完全一致,BIOS/固件都刷到同一版本。

SXM整机是8卡基板形态,单卡功耗上限700W,板载NVLink全互联;PCIe整机是8卡标准服务器形态,单卡功耗上限350W,卡间通过PCIe Switch互联。两台机器都单独划了供电线路,确保不会因为电力不足触发降频。

在正式测试之前,我先跑了一遍基础信息检查,把每张卡的PCIe链路速率、显存频率、温度状态都确认了一遍。这一步很关键,后面测试数据如果出现异常,能快速判断是单卡个体问题还是整机架构问题。

2. 整机性能测试方案设计:怎么测才不会被数据带偏

2.1 分层测试矩阵与工具选型

整机性能测试不能只跑一个“跑分软件”就下结论,那样测出来的只是营销数据。我按三层来拆:单卡基准、多卡通信、典型负载。

单卡基准用的是标准的矩阵乘法测试,模拟大矩阵的FFMA运算,分别跑FP16和FP32精度。主要看算力和显存带宽在不同精度下的表现,排除单卡硬件差异。

多卡通信用的是集合通信测试工具,重点看环状AllReduce、全节点AllReduce、Broadcast和Point-to-Point这几类操作在不同消息大小下的带宽和延迟。为什么看这些?因为训练中的梯度同步、参数广播、数据并行里的张量分发,本质上就是这些通信原语。

典型负载选了一个模拟的13B参数大模型微调场景,用数据并行的方式跑了几百个step,记录每个step的耗时、GPU利用率、吞吐量。这个场景对通信的依赖程度适中,既不是完全通信密集,也不是纯计算密集,最能反映整机在真实训练中的表现。

每个测试至少跑三遍,取稳定值。第一遍当预热,第二遍看波动,第三遍确认数据。测试过程中用日志工具记录功耗、温度和卡频率,最后把数据汇总成表格对比。

2.2 关键指标怎么解读才算懂行

经常有人拿“单卡算力多高多高”来跟我强调整机性能,其实看整机要抓四个指标:算力、互连带宽、时延、功耗/散热。算力是下限,互连带宽是上限,时延决定小消息效率,功耗/散热决定能不能长期稳定跑。

算力好理解,就是每张卡每秒钟能做多少次运算。但整机不是只有算力,通信带宽才是多人协作时的瓶颈:如果通信带宽不够,哪怕单卡算力再高,一搞分布式就全部卡在梯度同步上。

时延这个指标经常被忽略。小样本消息(比如几KB)的传输,带宽再高,如果握手和路由绕路太多,时延照样难看。这在模型并行场景里特别明显,切分太细的算子会产生大量小通信,时延一高,整机效率直线下降。

功耗和散热属于“后发现”指标:跑起来才知道到底能吃多少电、甩多少热量。SXM整机满载时整机功耗明显更高,但单位性能功耗反而可能更好;PCIe整机绝对功耗低,但性能也低。比绝对功耗没有意义,要看“单位算力功耗”。

2.3 变量隔离:第一次测试踩过的坑

第一次测PCIe整机的时候,我发现各卡在AllReduce测试里性能比预期低了快20%,一开始以为是PCIe Switch的锅,差点下结论说“PCIe整机通信性能就是拉胯”。后来排查发现,是我自己的锅——后台有个数据搬迁任务正在跑,占用了大量CPU和系统内存带宽。

那一瞬间我才意识到,整机对比测试最怕的不是硬件差异,而是变量没隔离。后来重新把环境整理干净:所有后台任务停掉,只保留系统和测试程序;统一用同一份容器镜像;网卡流量关闭,避免监控采集占用CPU;连监控agent都设成了低优先级,确保不会干扰测试。

另外还有一个细节:测试PCB板的GPU固件版本也要核对。不同固件可能导致NVLink初始化速率不一致,通信带宽直接打折。第一次测SXM的时候,有一张卡显示链路速率偏低,重新刷了固件才恢复。

3. 实测数据全解析:SXM整机和PCIe整机的差距到底在哪

3.1 单卡基准:算力拉不开差距

单卡测试的结果一点都不意外:SXM形态和PCIe形态的H800,单卡FP16矩阵乘法算力几乎一模一样,差距在1%以内。显存带宽也基本相同,毕竟用的都是同一颗核心、同规格HBM显存。

唯一的差别在功耗和频率的对应关系上。SXM形态的TDP上限更高,高负载时核心频率能稳定顶在较高档位;PCIe形态因为功耗墙限制,长时间跑满负载时频率会略微下降。但说实话,在实际测试中这个差距很小,单卡持续计算的吞吐量差异基本可以忽略。

这个结果的价值在于:把“单卡没差距”这个事实定下来,后面整机层面的差距就完全归因于互联架构和整机设计,而不是卡本身。

3.2 多卡集合通信:SXM的绝对主场

到了多卡通信测试,差距开始变得非常直观。

8卡环状AllReduce测试(消息大小128MB,对应真实训练中常见的梯度同步粒度):

  • SXM整机稳定带宽:约316GB/s
  • PCIe整机稳定带宽:约38GB/s

你没有看错,差了一个数量级还多。SXM整机的NVLink全互联,让梯度同步在同主机内以极高带宽进行;PCIe整机所有跨卡数据都要经过PCIe Switch和系统内存,不仅带宽窄,还要承受额外的内存拷贝开销。

广播测试(Broadcast)的结果相对好一些,PCIe整机能跑到约55GB/s,因为广播是单向分发,不需要全聚合,压力没那么大。但即便如此,和SXM整机约180GB/s的水平相比,还是差了3倍以上。

延迟方面,小消息(1KB)的Point-to-Point测试,SXM整机约1.8微秒,PCIe整机约6.5微秒。虽然绝对数值都很小,但在海量小消息交互的模型并行场景里,这个差距会被放大得非常可观。

3.3 典型训练负载:通信占比越高差距越大

单卡没差距,通信差10倍,那真实训练到底差多少?我拿13B模型微调的数据并行场景做了实测。

在数据并行下,每张卡先算一批梯度,然后做全局AllReduce同步梯度,再更新参数。通信时间占比取决于计算/通信比:batch size越大,计算时间越长,通信的占比就越小;batch size越小,通信占比越大,整机差距就越明显。

实测结果:

  • batch size较大(通信占比约20%)时,SXM整机每step约0.82秒,PCIe整机约1.35秒,SXM快约1.6倍。
  • batch size较小(通信占比约45%)时,SXM整机每step约0.95秒,PCIe整机约2.4秒,SXM快约2.5倍。

这就是整机对比最有意思的地方:不是固定差多少倍,而是通信占比越高,SXM的优势越大。如果你跑的是超大batch、通信占比压得很低的场景,PCIe整机也能跑得有模有样;但你要是做小batch的在线学习、RLHF这类对通信极其敏感的工作,PCIe整机大概率会被拖到崩溃。

3.4 整机功耗与散热:不要只盯着峰值算力

在8卡满载训练一小时后,我记录了整机的功耗和温度表现。

SXM整机:整机峰值功耗约7.6kW,其中GPU部分约5.6kW。GPU温度稳定在82-86°C,热点温度最高到过93°C,风扇转速接近全速,出风口温度明显偏高。但长时间运行没有出现降频,性能曲线平稳。

PCIe整机:整机峰值功耗约5.3kW,其中GPU部分约2.8kW。GPU温度稳定在74-78°C,风扇还有余量,噪音水平也低很多。性能曲线同样平稳,但因为功耗墙限制,GPU频率在高负载时略低于SXM形态。

单位算力功耗算下来很有意思:SXM整机虽然绝对功耗高,但因为能跑出接近峰值算力的性能,单位有效算力功耗反而更优。PCIe整机省的那点电,换来的却是明显缩水的整机性能。机房的电费账单不能只看整机功耗,还要看“每W能换多少性能”。

3.5 数据对比总表

把关键数据汇总成表,方便你直接对照:

测试项SXM整机(8卡)PCIe整机(8卡)说明
单卡FP16矩阵乘法基准基本一致(-1%以内)单卡算力不是差距来源
8卡AllReduce带宽(128MB)约316GB/s约38GB/s通信密集型场景差距最大
8卡Broadcast带宽约180GB/s约55GB/s单向分发压力相对小
Point-to-Point时延(1KB)约1.8微秒约6.5微秒小消息交互差距明显
13B模型数据并行(大batch)0.82秒/step1.35秒/step通信占比约20%
13B模型数据并行(小batch)0.95秒/step2.4秒/step通信占比约45%
整机峰值功耗约7.6kW约5.3kW绝对功耗SXM更高
GPU稳定温度(满载)82-86°C74-78°CPCIe散热压力更小
单位算力功耗更优较差不能只看绝对功耗

注意:以上数据来自我手头这套工程样机在特定软件版本和负载下的实测,不同固件、驱动版本和负载组合下可能会有差异。但趋势是稳定的:通信占比越高,SXM整机优势越大。

4. 常见问题与排查技巧实录

4.1 PCIe整机带宽跑不满的排查路径

很多人拿到PCIe整机,跑nccl-tests发现带宽远低于预期,第一反应是“是不是卡有问题”。我把自己排查带宽问题的路径整理一下,按这个顺序查,基本不会跑偏。

第一步,查PCIe链路速率。用工具检查每张卡的链路状态,确认是否稳定在Gen5 x16。如果显示Gen4甚至Gen3,问题可能出在插槽位置、BIOS设置或者转接卡质量。PCIe整机最忌讳把卡插到南桥扩展出来的槽位上,那等于卡上加了一层瓶颈。必须优先插在CPU直连的槽位。

第二步,查PCIe Switch的拓扑和带宽分配。很多PCIe整机用的是8卡共享PCIe Switch的方案,卡和主机之间往往只有一条上行通道。如果卡间通信模式是“卡A到卡B先经过Switch再到主机内存再到Switch再到卡B”,那实际可用带宽会被压缩得很严重。对带宽敏感的场景,建议用点对点通信模式,绕过主机内存。

第三步,查系统内存带宽。PCIe整机的跨卡通信经常要经过主机内存,如果内存配置是单通道或者频率没跑上去,AllReduce带宽会骤降。对于H800这种级别的带宽需求,内存至少双通道起步,有条件直接上满通道高频内存。

第四步,查驱动和NCCL版本。老版本NCCL对PCIe形态的优化不够,新版本在通信调度上会好很多。实测中,仅升级NCCL版本,PCIe整机的AllReduce带宽就能提升约15%。

4.2 SXM整机运维中遇到的几个“鬼故事”

SXM整机性能猛,但运维起来也不是没有脾气。我遇到过的几个问题,分享出来当个参考。

第一个是开机自检慢。SXM基板在开机时要对八张卡做NVLink链路初始化和固件校验,整个流程比普通服务器长很多。有两三次我甚至以为机器卡死了,实际上是基板自检要等几分钟。做机房自动化重启时要预留更长的等待时间,别用默认超时时间,否则策略会误判机器故障。

第二个是风冷SXM整机的积热问题。八张700W的卡挤在一个机箱里,如果风道设计和机房送风方向不匹配,容易出现局部热点。我遇到过某张卡温度比旁边卡高8-10度的情况,后来调整了机柜送风方向,把冷风优先引向基板进风口,温差才降下来。

第三个是NVLink链路偶发性降速。有次训练效率突然下降,查了一圈发现一张卡的NVLink链路速率从满速掉到了半速,重启后恢复。后来确认是固件在温度波动时偶发误判,刷新了基板固件后没再出现过。

第四个是PCIe整机加装GPU时的地址空间分配问题。普通服务器在BIOS默认配置下,八张卡加其他PCIe设备时,可能触发BAR空间不足,导致某张卡无法识别。解决办法是在BIOS里开启大于4G地址空间解码,或者调整PCIe资源分配策略。

4.3 避坑速查表

总结成一张速查表,方便实操时对照检查:

问题/场景检查项/解决动作
PCIe整机AllReduce带宽低先查链路速率,再查插槽位置,最后查NCCL版本
SXM整机开机慢预留5分钟以上自检等待时间,别用默认超时
SXM整机单卡温度异常高检查机柜送风方向,调整进风口位置
NVLink链路偶发降速刷新基板固件,检查温度波动
加装GPU后某卡不识别BIOS开启大于4G地址解码,调整PCIe资源分配
整机对比测试数据失真隔离后台任务,统一驱动/容器/固件版本,跑三遍取稳定值
训练时PCIe整机意外降频检查供电线路和电源冗余,确认功耗墙设置

提示:整机到手先别急着上业务,先把NCCL的AllReduce和Broadcast测试跑一遍,记录下基线数据。以后系统升级驱动、固件、NCCL版本时,再跑一遍同一套测试,数值变化能帮你快速定位性能衰减是软件层还是硬件层的问题。

我个人在实际操作中的体会是,选SXM还是PCIe,不是选“更好的那一台”,而是选“更匹配自己负载的那一台”。如果你主要跑大模型训练,通信占比高,SXM整机多出来的那部分预算基本都能在训练吞吐量上找回来;如果你的场景以推理为主、并发度大但单次任务通信量小,PCIe整机的灵活性和性价比会更实在。没有万能的选择,只有适不适合你的工作负载。

最后再分享一个小技巧:做整机选型对比时,别只看厂商给的SPEC表,更别只跑一个单卡跑分。最有效的方式是把自己实际要跑的模型或负载,原样搬到两台机器上各跑一遍,单卡算力不代表整机效率,通信瓶颈才是整机性能的隐形天花板。把这一步做扎实,后面省下的是大量运维和调优时间。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进