ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

可预期网络如何驱动大规模AI训练?解析HPN 7.0架构与工程实践

可预期网络如何驱动大规模AI训练?解析HPN 7.0架构与工程实践 简介这份PDF是阿里云资深网络架构师席永青在AICon北京2024上的演讲材料系统梳理了AI大规模训练场景下数据中心网络从CPU中心向GPU中心演进的必然趋势并重点解析HPN 7.0架构如何满足GPU集群对带宽、时延、可扩展性的严苛要求。内容覆盖GPU集群网络关键诉求、HPN 7.0的多轨双平面拓扑与51.2T交换芯片应用、端网融合与自研HPCC流控、SONiC开源生态带来的白盒化运维等同时探讨了网络性能从Best-effort走向可预期、从SDN到计算定义网络的演进路径并展望了未来AI Infra在液冷、1.6T端口等方向的发展。适合数据中心网络工程师、AI基础设施架构师及大模型训练平台开发者参考可帮助理解万卡级GPU集群的网络设计逻辑与关键技术取舍。资源为单个PDF文件大小5.76MB目前已有101人学习下载便于快速获取这场顶会级架构分享的核心技术要点。 最近在帮团队调一个大模型分布式训练的性能发现一个特别扎心的事实当我们把GPU从128块加到1024块理论算力翻了8倍但训练吞吐只涨了不到4倍。排查到最后瓶颈不在GPU算力也不在显存而是卡在节点间的网络上。分布式训练里的梯度同步、参数交换、并行策略拆分全都依赖网络互联完成。也正是这个背景让我对阿里云的《网络驱动大规模 AI 训练 - 阿里云可预期网络 HPN 7.0 架构》这份文档特别感兴趣。这份架构文档讲的是一个很核心的问题传统数据中心网络是“尽力而为”的模型偶发拥塞和丢包在普通业务里可以忍但放在大规模AI训练里就是致命的——一次重传就可能让上千块GPU同时空转。HPN 7.0想做的事情是把网络做成“可预期”的基础设施让时延、带宽、丢包行为都变得稳定可控。如果你在关心超大规模AI训练为什么需要网络驱动或者正在规划智算集群、做网络选型和调优这文章值得仔细读一遍。我也会结合平时调参和排查性能问题时的实际经验把里面偏工程化的概念讲得更直白一些。1. 可预期网络是什么以及为什么AI训练离不开它1.1 当算力集群变大网络就变成了“隐形天花板”先从一个最基本的观察说起。单机8卡的训练GPU之间通过NVLink/NVSwitch互联带宽能做到900GB/s级别延迟微秒级几乎感觉不到通信瓶颈。但大模型训练几乎不可能停留在单机8卡千亿参数模型光参数就要几百GB单卡显存根本放不下所以要把模型切到几十甚至上百个节点上用张量并行、流水线并行、数据并行、序列并行这些方式协同训练。跨节点的通信依赖什么以太网。每步迭代里数据并行要做梯度AllReduce张量并行要做AllToAll和AllGatherMoE模型的专家路由更是全集群范围的消息洪流。这些通信不是“某个瞬间来一下”而是每一步训练都来一遍。假如网络延迟从50微秒抖动到500微秒或者某条链路出现一次丢包训练框架就要等通信完成才能进入下一步整个集群的GPU都在原地等待。这也是“网络驱动”这四个字的由来网络性能直接决定你能把算力利用率推到多高。网络层面节省10%的通信时间可能就是每天多跑若干训练步折算成GPU资源费用是极其可观的数字。所以把网络看作和GPU同样重要的资源一点也不夸张。1.2 “可预期”三个字到底承诺了什么我理解的可预期网络核心不是“带宽大”而是“表现稳定”。它通常包含几个层面时延可预期无论网络负载怎么变化关键路径的延迟不会剧烈抖动。带宽可预期每条流能拿到的带宽是可计算的而不是靠哈希碰撞碰运气。丢包可预期无损或接近无损避免重传导致的尾部延迟放大。普通互联网应用网页、视频、消息对这类要求不敏感偶尔来一次重传用户感知不到。但AI训练是典型的“同步后备”模型集群里最快的卡也要等最慢的那张算完网络里任何一条慢流都可能导致整轮迭代变慢。这就是所谓的“长尾效应”。可预期网络本质上就是在跟长尾延迟作斗争。可以做个粗糙的类比传统网络像高峰期自驾通畅还是堵车全看运气可预期网络更像地铁运行图虽然秒级延迟未必最低但你知道它什么时候到班次稳定。对AI训练这种依赖严格时序的应用来说这种确定性价值极大。2. 核心细节解析负载均衡、拥塞控制和拓扑一个都不能少2.1 负载均衡从“五元组哈希”到更精细的调度传统数据中心网络做负载均衡主要靠ECMP把一条流按照五元组哈希到不同链路上。问题在于AI训练里的流量往往是几十GB级别的“大象流”几个大流一旦哈希到同一条链路立刻产生拥塞而其他链路可能还在空跑。HPN 7.0这类架构的改进思路是打破“一条流必须固定走一条路径”的限制在包级别做更细粒度的调度。技术上可以是动态路由、包喷洒也可以用集中式控制器计算出更优路径。这样做的难点在于乱序如果同一个流的不同包走了不同路径到达顺序就变了接收端必须要有足够的重排序能力否则RDMA的性能优势会被直接抵消。我在实际测试中见过太多次因为哈希不均导致实际带宽只有理论值一半的情况。所以看一个网络架构能不能支撑大规模AI训练先别急着看端口速率要重点看它的负载均衡是否做到了足够细的粒度以及乱序处理是否成熟。这个点能解释为什么很多听起来“带宽很高”的组网方案真正跑起NCCL来表现平平。2.2 拥塞控制无损网络的关键命门AI训练流量有一个非常明显的特征叫Incast也就是“多对一”。比如64张卡的梯度要同步到同一个目标节点一瞬间所有源端同时灌流量目标端交换机队列立刻爆炸。传统TCP面对Incast只能丢包、重传、超时这在AI训练场景下属于灾难。RDMA之所以能在AI集群里流行靠的是网络无损不丢包、不重传。但是无损网络又依赖PFC优先级流控这种逐跳反压机制PFC本身有副作用比如可能引发队头阻塞甚至死锁需要精细化调优。阿里云在拥塞控制上一直走的是端网协同路线思路简单说就是不再完全依赖交换机端的大缓存硬扛而是让发送端更精准地感知网络拥塞状况动态调整发送速率做到“在网络真正拥堵之前就降速”。这种做法比单纯依赖PFC更可控也比传统TCP的“撞墙之后才退让”更主动。我读HPN 7.0文档时这部分印象很深因为它把“可预期”从口号落到了算法层面。2.3 拓扑与无收敛设计物理基础决定性能上限网络架构能做出多少文章很大程度上看底层拓扑。传统数据中心三层架构核心层、汇聚层、接入层为了控制成本会设置收敛比比如接入到汇聚收敛比1:4就意味着底层有4Gbps的流量挤到上层1Gbps的链路。普通业务可以靠“大部分时间流量不大”来稀释问题但AI训练是所有端口时刻拉满收敛比就是硬伤。一旦收敛带宽可预期性直接归零。所以面向AI训练的集群基本上都会采用无收敛的Clos/胖树拓扑并尽可能压低网络直径。节点之间的跳数越少延迟越可控拥塞点也越少。配合高密度交换芯片和光互联才能支撑万卡级别的并行训练。HPN 7.0在拓扑上的思路本质上是在用物理层的确定性换取上层调度的简单性。2.4 集合通信优化网络驱动训练的具体抓手可预期网络最终要作用到具体训练模式上而AI训练里最典型的通信模式就是集合通信。AllReduce数据并行训练中每张卡先本地计算梯度再把所有卡上的梯度累加并分发回去。AllToAllMoE模型的Expert分发、序列并行中数据需要跨节点重排。AllGather张量并行中汇总切片张量。不同的通信模式对网络的需求不一样。AllReduce对带宽和延迟都敏感AllToAll属于流量模式非常均匀但总量巨大的通信对负载均衡要求更高。HPN 7.0这类架构在设计时会针对这些模式做专门优化比如调整队列调度策略或者在控制器层面识别集合通信语义给不同模式分配不同的资源策略。这也是为什么说“网络驱动”不只是底层硬件的活而是从芯片、交换机、协议到调度器的一整套协同。3. 实操视角从纸面架构到真实训练的踩坑记录3.1 怎么判断你的瓶颈在GPU还是在网络很多朋友上来就问“为什么我的分布式训练GPU利用率只有30%”。我的建议是不要猜直接做对照测试。第一步先用NCCL的all_reduce_perf工具跑一遍纯通信测试把消息大小从128K一直测到几百MB记录每个档位的总线带宽。第二步把这个数值和网卡规格、交换机端口速率做对比正常情况下应该能跑到理论带宽的80%以上。如果差距大网络配置大概率有问题。第三步回到真实训练用nvidia-smi记录GPU利用率曲线同时看训练日志里的时间统计。如果GPU利用率的低谷与通信阶段高度重合说明计算和通信没有重叠好要么改并行策略要么压缩通信量。这种做法适用于自建集群也适用于云上大规模训练任务。我自己用这套方法排查过好几个“集群性能上不去”的case基本上一个测一个准比一群人围着服务器瞎猜高效得多。3.2 估算一次同步要多少带宽一个粗糙但有用的模型以数据并行的梯度同步为例参数规模为P混合精度下梯度用bf16保存那么一次AllReduce同步的数据量约等于2×P。因为Ring AllReduce的通信量近似与卡数无关所以这个估算对不同规模集群都适用。假设P10B单次通信量约20GB。如果网络单流能跑到200Gbps25GB/s理论上完成一次全量梯度同步至少需要0.8秒如果单流带宽只有100Gbps就变成1.6秒。这只是纯通信时间。实际训练中每步计算时间也就几秒通信如果没法与计算重叠那训练速度就会被这一下一下的同步直接拖住。这也是为什么我反复强调规划集群时不要只看GPU型号一定要先根据你的模型大小和并行策略倒推需要的网络带宽和拓扑。把模型参数、梯度精度、并行维度、单步计算时间代入这个粗略模型能很快判断当前组网方案到底够不够用。3.3 网络可观测性建设把问题扼杀在发生前我踩过最大的坑是网络问题发生之后很难定位。AI训练的流量是瞬息万变的等训练结束再去看监控往往已经找不到当时的真实情况。所以建议在集群建设初期就要把网络观测做全。至少要看四类指标网卡侧发送/接收速率、丢包计数、重传计数、暂停帧计数PFC触发的次数。交换机侧端口利用率、队列深度、丢弃包计数、流采样数据。训练侧NCCL的timeline、各阶段耗时占比。应用侧GPU利用率、迭代时间、端到端吞吐。其中暂停帧计数特别值得关注。如果PFC频繁触发说明流量已经接近网络极限或者拥塞控制参数不对这会直接拉低整体吞吐。把这些指标配置好告警阈值训练出问题的时候就能快速判断是网络问题、并行策略问题还是代码问题而不是一群人围在机房干瞪眼。4. 常见问题与排查技巧实录4.1 训练时NCCL报超时怎么排查NCCL超时算是最常见的故障了。我的排查顺序基本固定先看日志是发生在初始化阶段还是训练中段。初始化阶段超时大概率是节点之间的路由不通或者防火墙规则没放行直接ping和测试TCP端口就能定位。训练中段超时先看网卡是不是出现了大量丢包再看交换机的队列深度和暂停帧计数如果这两个指标异常优先怀疑拥塞控制参数和流调度。很多时候重启能临时解决但一定要找到根因否则过一阵还会复发。4.2 链路明明是400G跑起来却只有200G这类问题的排查优先级最高的是负载均衡是否生效。传统ECMP按五元组哈希两个大流撞到同一条链路太常见了。排查方法是登录交换机看每条链路的流量分布如果某条链路利用率特别高而其他链路很低基本可以断定是哈希不均。解决方案要么升级支持动态负载均衡的设备要么在组网时尽量让每个大流单独占用可用链路同时配合集群调度让通信对尽量物理隔离。还有一个容易忽略的点确认网卡的RDMA模式、MTU、PFC优先级配置在链路两端完全一致。这些细节不一致会导致降速协商实际带宽直接砍半。4.3 给准备自建小规模训练集群的几条实在建议如果你只是几十卡规模不一定需要复刻万卡级的完整架构但思路可以借鉴第一网络不要省钱。交换机缓存、光模块、网卡的预算宁可多花不要省因为后期重买和排障的成本更高。第二务必选择支持无损网络和高质量拥塞控制的设备这一点比端口速率更关键。第三动手之前先画清楚通信拓扑图把所有并行模式下的流量走向列一遍确保没有明显的单点瓶颈。第四有条件就先把NCCL通信测试跑透达到理论带宽的70%以上再开始正式训练配置。最后说点个人体会。我拿到HPN 7.0这份文档的时候最强烈的感受是它把“网络”从配角变成了真正的主角。以前大家优化训练性能想到的是模型结构、并行度、显存大小但网络层的确定性往往被忽略。而事实上当集群规模上千以后恰恰是网络决定了你能不能把那么多昂贵的GPU真正用起来。如果你也正在被分布式训练性能问题困扰不妨先静下心统计几项网络指标再决定是否升级架构。很多看似玄学的性能问题最后都会落到一条链路上。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

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