这届云栖大会我重点关注的是“AI系统网络架构”这个方向。前两年聊AI基础设施大家的目光基本都放在GPU算力和显存上开口就是多少TFLOPS、多少GB。今年风向变了会场里听得最多的反而是另一个问题你的集群跑大模型训练时通信开销到底占了多少算力利用率只有三四成瓶颈到底在单卡还是在网卡和交换机之间这个转变很关键。大模型训练早就不是“单卡跑完一个模型”的时代而是几百上千张卡协同工作的分布式作业。网络架构就是整套分布式系统的“神经系统”决定了几千张算力卡之间能不能高效协同。这篇文章我会结合这次大会的技术热点以及自己实际做过的训练集群网络方案把AI系统网络架构的设计思路、选型逻辑、参数计算和排障经验一次讲清楚。1. AI系统网络架构为什么被单独摆上讲台1.1 大模型训练中网络扮演的角色变化传统深度学习训练比如几张显卡跑一个图像分类模型网络充其量是个“后勤部门”。偶尔同步一次梯度卡和卡之间不需要频繁通信网络延迟稍微高一点也无所谓。现在的LLM预训练完全不同动辄百亿千亿参数单卡显存放不下只能把模型切到几十台甚至几百台机器上。每前进一步都要把每一层的梯度、优化器状态、中间激活值在节点之间来回传递。模型越大切得越碎节点之间的通信频率和通信量就越惊人。这种情况下网络已经从“后勤部门”变成了“生产流水线”它和GPU算力、显存容量并列成为决定训练效率的三大要素之一。我习惯用一个“万人协作”的类比来解释这件事算力卡是每个参与者的手脚速度网络是人与人之间传递信息的通道。如果每个人干活都很快但通道窄、延迟大、还动不动丢东西整体项目推进速度反而会被沟通成本拖垮。AI集群里也一样算力利用率上不去很多时候不是GPU不够快而是网络根本喂不饱那么多GPU。1.2 三个通信瓶颈足以拖垮整个集群具体到训练流程网络要面对的瓶颈主要有三类每一类都对应训练框架里的核心并行方案。第一类是梯度同步。数据并行下每个GPU算出一批梯度后需要把所有GPU的梯度拿来做一次全局规约才能更新模型参数。模型参数越多梯度张量越大这一步的通信量就越可观。像ZeRO-3这种优化器状态分片方案每一步还需要做多轮All-to-All通信压力比传统数据并行高一个量级。第二类是模型并行带来的点对点通信。张量并行会把一层网络的计算切到多张卡上每算完一小块就要同步一次流水线并行虽然在层与层之间搬运的是中间激活值但同样要求低延迟高带宽。这两类流量如果碰上网络抖动GPU就会大量空转等待数据。第三类是全对全通信All-to-All。混合专家模型MoE每次做专家路由时每个token要发往不同专家所在的设备意味着所有设备之间都要互相传数据。这类通信的特点是“谁都可能给谁发数据”流量模型极其分散最考验网络拓扑和负载均衡能力。这三类通信中只要有一个环节设计不合理就会导致整个集群的算力被白白浪费。很多团队花大价钱买了高端GPU结果实际训练吞吐只有理论值的30%查到最后基本都是网络架构出了问题。2. 网络架构的核心组成与关键技术选型2.1 从单卡算力到集群算力网络拓扑怎么选AI集群的网络拓扑本质上是“算力互联”的拓扑设计。一个典型的做法是把GPU网卡连接到TOR接入层交换机再通过汇聚层和核心层把几十甚至数千个GPU串起来。为了保证任意两个节点之间的通信路径都不拥堵多数AI集群会采用胖树或CLOS拓扑核心思路就是用大量中低端交换机堆出高带宽的无阻塞网络。拓扑选型时有一个绕不开的概念叫收敛比。收敛比做到1:1意味着任意接入端口都能以全速和其他端口通信任何通信模式都不会被上行链路卡住。收敛比做到1:3上行带宽就被压缩了多个节点同时向上通信时必然在某条路径上形成拥塞。AI训练网络和普通互联网业务不同。普通业务是少量长连接叠加大量短连接偶尔拥塞用户可以接受AI训练是持续的、高强度的分布式协作流量任何一次拥塞都会直接拉长迭代时间损失全集群的算力。所以稍微认真点的集群收敛比都会优先做到1:1宁可多买交换机和光模块也不在上面省成本。2.2 RoCE、IB与传统以太网三种路线的取舍在协议层面绝大多数AI集群跑的是RDMA远程直接内存访问。它的特点是绕过CPU和内核让GPU数据直接从网卡进入远端内存大幅降低延迟和CPU占用。现在市面上主流的方案分三类InfiniBandIB、RoCE v2以及传统以太网配合专业调优。IB是为高性能计算设计的全封闭体系网络设备、网卡、交换芯片一体优化延迟低、可靠性高性能和稳定性天花板最高。缺点是贵而且生态相对封闭网卡和交换机都得配套买后期扩展的成本很高。RoCE v2做的则是把RDMA能力搬到普通以太网上。这个方案的吸引力很直接成本低能和现有数据中心网络复用厂商支持也广。代价是RoCE依赖的“无损网络”能力并不能天然获得必须通过PFC和ECN等机制配合否则一旦丢包RDMA性能会断崖式下跌。传统以太网本来没有无损特性需要靠PFC优先流控和ECN显式拥塞通知配合把丢包概率尽量压到零。从我的实际经验看中小规模集群选RoCE v2是性价比最高的路线只要配置认真做性能可以非常接近IB。倒是有一点被很多人忽略真正拉开体验差距的不是协议本身而是“无损网络”这套工程能力。2.3 无损网络的“无损”是怎么来的PFC、ECN与流控这里多说一点为什么AI网络必须追求“无损”。RDMA数据传输本身依托硬件重传但重传代价极高。普通TCP丢了1%的包吞吐可能只下降一点点RDMA流量如果丢包性能直接腰斩甚至更糟。所以AI网络必须把丢包概率控制在极低水平这也是无损网络概念被反复强调的原因。无损网络的核心机制有两个一个是PFC交换机在输出队列快满时向上游设备发送暂停帧让上游先别发数据另一个是ECN在队列深度超过阈值时给报文打拥塞标记接收端看到标记后反馈给发送端让发送端主动降速。PFC是“暂停”ECN是“减速”两者配合得当才能保证要么不拥塞要么拥塞时快速恢复。但这里有个很多人踩过的坑PFC不是做得越激进越好。暂停帧过多会把拥塞扩散到整条链路甚至波及无辜流量造成队头阻塞。很多集群训练跑不快不是网络带宽不够而是PFC风暴一触发所有流量都被按在地上摩擦。后面排障案例里我会具体讲这个现象。3. 一组可落地的AI集群网络设计过程3.1 先算清楚账通信量、带宽与时延需求设计集群网络第一步不是买设备而是算账。你得知道自己要跑的模型是什么、并行方案是什么、每轮迭代会产生多少通信量。这个账算不清楚后面所有参数都是空中楼阁。举个例子。假设一个团队要做70B参数模型的微调用ZeRO-3数据并行。梯度同步时全量梯度和优化器状态都需要分片对分片做All-to-All通信。粗略估算一下每轮训练一个token通信量可以轻松达到几十GB。如果希望一轮通信在10秒内完成就需要至少3GB/s以上的有效聚合带宽考虑协议头、重传、拥塞控制等额外开销网络带宽至少翻倍才稳。除了带宽还要看延迟。训练过程中流水线并行和部分集合通信原语对延迟非常敏感而大块梯度通信更吃带宽。设计网络时最好把延迟敏感流量和带宽敏感流量分开处理用不同的流量队列或不同的网络切片承载否则两种流量互相挤占性能会两头不讨好。3.2 具体的组网拓扑与端口规划我们来做一个可复现的规划。假设要搭建一个32台8卡节点合计256卡的AI训练集群。每台节点有8张GPU每张GPU配一张200Gbps网卡单节点总出口带宽就是1.6Tbps。如果采用胖树拓扑把32个节点挂到4台接入交换机上每台接入交换机下接8个节点那么每台接入交换机的下行就是8个200G端口下行带宽1.6Tbps为了做到1:1无收敛上行总带宽也需要1.6Tbps也就是需要8个200G上行端口。核心层通常部署4台交换机做Mesh互联把全部接入域连起来同时保证任意跨域通信的路径尽量短。这个规模下实际项目里我会推荐两层CLOS结构接入层4台核心层4台核心和接入之间全互联。端口矩阵是4×4×200G规模和成本都比较可控后续如果要扩展到64节点把核心层再扩容4台就行。很多人做规划时会把端口全部占满不留冗余这是很危险的。扩容和故障替换都需要端口余量建议至少预留20%。还有一个容易忽略的点节点内GPU多会存在机内通信和机间通信的差别。机内GPU之间走高速内部互联带宽高且稳定一旦数据要跨节点就必须走网卡和外部网络。规划机间网络时要把每块网卡所在的命名空间、IP地址、路由关系提前排好别等集群跑起来再发现IP冲突或者路由选路错误。这类问题排查起来极其痛苦而且经常被误判为应用问题。3.3 部署与调优中的关键参数部署阶段有几个关键参数值得逐一核对。第一个是MTU。RoCE流量建议开启巨型帧典型值是9000字节这样能显著减少报文数量和头部开销把有效带宽提上来。注意Cluster内所有节点和交换机端口都要统一MTU不一致会导致分片或者静默丢包。第二个是流控策略。PFC优先级队列和ECN阈值的设置不能一概而论通常要看交换机的缓存大小并结合实际流量特征反复压测调整。最稳妥的做法是先全部关掉PFC和ECN跑一轮基础性能基线再逐步开启观察指标变化找到当前配置下的最佳平衡点。第三个是网卡侧参数包括队列数量、中断绑定、RDMA拥塞控制参数等。这些参数在驱动默认值下往往不是最优的尤其是大规模All-to-All场景下默认参数很容易触发拥塞。还有一项基础但特别重要的集群时间同步。很多人想不到训练集群对时钟同步要求很高分布式集合通信依赖超时判断节点间时间偏差大会出现诡异的通信超时报错。我们每次部署新集群都会先跑一轮ib_write_bw做带宽压测再用ib_read_lat测延迟跑完一组数据存成基线。以后任何性能波动都拿这个基线做对照超过5%就要追查到底。4. 训练集群网络问题排查实录与避坑指南4.1 案例训练速度骤降PFC暂停帧把交换机堵住了有一次训练任务跑得很顺loss稳定下降结果某天突然整轮迭代时间从20秒猛增到60秒。一开始以为是GPU故障但登录监控看GPU利用率并没有掉问题出在通信耗时占比明显上升。登录交换机一看PFC暂停帧计数器在持续暴涨说明有队列在反复触发流控。进一步追踪发现问题出在一个节点的GPU和网卡之间存在偶发性的瞬时报文突发把交换机某个队列的缓存打满了PFC一连串暂停帧发出去把周边几个交换机的流量都堵住了。我们做的调整是把RoCE流量单独放到一个优先级队列限制普通存储流量和RoCE流量混跑然后根据业务报文特征把ECN阈值调低让发送端更早感知拥塞同时业务侧开启梯度通信压缩和分片把突发尖峰削平。调完之后迭代时间回到22秒左右。这个案例给我最大的教训是网络问题不能只看带宽够不够还要看流量模型和交换机缓冲策略匹配不匹配。4.2 案例All-to-All通信跑不满哈希不均背锅另一个典型问题是256卡规模下做MoE模型训练All-to-All通信的聚合带宽只有理论值的一半。但每条链路单独看利用率都不高整张网络看起来挺空闲的。这种“整体跑不满单点也不忙”的现象一半以上是负载均衡出了问题。用流量分析工具逐条链路统计后发现多路径ECMP哈希没有做好负载均衡。All-to-All通信会产生大量持续数毫秒甚至更长的“大象流”传统哈希容易把几条大象流分到同一条链路上导致链路忙闲严重不均。解决思路有两个。一是把ECMP哈希的流粒度从五元组调整为更细的随机种子方式让大象流尽量分散到不同链路二是启用自适应路由相关的动态选路特性让交换机根据实时链路负载做转发决策。要注意的是这些特性不是所有设备都支持必须在选型阶段就确认硬件和软件版本能力别等上线了才发现缺功能。4.3 常见问题与排查工具速查表下面这些都是我实际遇到过的、出现概率很高的问题整理成一张速查表方便对照工作。现象可能原因优先排查点训练迭代耗时突增PFC风暴、路由震荡交换机丢包计数、PFC暂停帧计数GPU利用率低但网络占用不高小报文过多、同步等待网卡报文速率、集合通信耗时统计跨节点通信延迟高MTU不一致、驱动固件版本不一致检查所有节点MTU与网卡固件版本带宽利用率不对称ECMP哈希不均流量分析工具按链路统计吞吐偶发超时重传队列缓存不足、背压配置错误交换机缓存占用、丢包日志配合排查常用工具可以记一下ib_write_bw、ib_read_lat测RDMA性能和延迟ethtool -S看网卡收发包统计perftest系列工具做带宽时延基准测试聚合通信库自带的profiler功能可以定位是哪个集合通信原语慢。我的习惯是调试时先量化后动配置不要凭感觉反复改参数。每次只改一个变量保留记录这样出了问题能快速回退。5. 中小团队怎么借鉴这套架构5.1 规模不大也要守住几个底线很多团队手里的集群没到千卡规模只有几十张卡这时候是不是就不用关心网络架构了我觉得恰恰相反。哪怕只有两台8卡服务器跑分布式训练网络配置不当也会让性能掉一半。我见过一个只有32卡的小团队GPU利用率长期只有25%排查到最后发现是RoCE流量和普通NFS存储流量跑在同一个VLAN里存储备份任务一跑训练流量就疯狂丢包。后来把RoCE流量独立到专用子网再把PFC和ECN配置好训练吞吐直接翻了近一倍。这个案例告诉我规模越小越要注意隔离和基线。中小团队没必要一上来就上IBRoCE v2完全够用。关键是配置层面别偷懒第一确认网卡和交换机支持RDMA并正确启用第二RoCE流量走独立VLAN或独立子网避免和业务流量互相干扰第三部署后做一次完整的带宽压测把结果保存下来当作基线。这些动作都不复杂但对稳定性的提升非常明显。5.2 网络能力反推出来的几个训练技巧网络架构设计清晰之后很多训练侧的问题也能反推优化。比如梯度通信开销大可以开启梯度压缩、梯度累积或通信算子融合把多个小通信合成一个大通信减少握手次数。比如流水线并行中适当减少切分数量、增大batch size能降低单位时间内的通信频率。数据加载、日志写入、模型checkpoint这些存储流量尽量不要和训练流量共用网络路径否则存储抖动会直接拖垮训练进度。还有一个更上层的建议网络架构决定了你能跑多大规模的并行方案。如果网络带宽不足就别硬上跨节点的张量并行尽量把张量并行限制在单节点内节点之间用数据并行或流水线并行传输压力会小很多。这也是为什么很多千卡集群的网络拓扑设计要提前和算法团队对齐算法方案的边界本质上就是网络架构的边界。我个人做下来最大的体会是不要迷信某一种协议或者某一套设备先把自己的通信量和流量模型摸清楚再做架构选型遇到问题先看计数器再动配置少跳坑比什么都强。这套方法论今天放在大模型训练里适用放到任何分布式系统上也完全通用。
阅读完成 · 觉得有帮助?