网络拓扑:Fat-Tree、Torus、Dragonfly等常见拓扑结构
核心原理:拓扑决定通信的“地理”规则
在InfiniBand网络中,拓扑结构决定了交换机与交换机、交换机与计算节点之间的物理连接方式,进而决定了数据从源端到目的端需要经过多少跳(hop)、是否存在瓶颈链路、以及故障时如何绕行。与以太网常见的无结构树形或扁平大二层不同,InfiniBand为高性能计算(HPC)和人工智能(AI)集群设计了多种规则化拓扑,其中最具代表性的是Fat-Tree(胖树)、Torus(环面/网格)和Dragonfly(蜻蜓)。
理解拓扑的关键在于三个维度:对分带宽(bisection bandwidth)、端口利用率和可扩展性。Fat-Tree通过“越往上带宽越宽”的设计消除核心瓶颈;Torus通过多维环面连接降低长距离跳数;Dragonfly则通过分组全互联减少全局链路数量。三者本质是在成本、延迟、扩展规模之间做不同取舍。
核心概念速览:
- 跳数(Hop):数据经过的交换机数量,直接影响延迟。
- 对分带宽:将网络切成两半时,跨切面链路的总带宽,衡量网络拥塞上限。
- 无阻塞(Non-blocking):任意节点间通信带宽等于端口带宽,不因竞争而下降。
- 局部性(Locality):通信距离越近,延迟越低,拓扑设计需匹配通信模式。
方法流程:如何选择与部署拓扑
实际部署中,拓扑选择并非随意,而是遵循一套从需求到落地的决策流程。以下为典型方法:
- 确定规模与通信模式:统计计算节点数量、GPU/NIC数量,分析作业的通信特征(如All-to-All、Neighbor、Bisection等)。
- 计算端口预算:以Fat-Tree为例,若使用N个叶子交换机(每个有K个上行端口),则核心交换机数量需满足
核心数 = (叶子数 × 上行端口数) / 核心交换机端口数。 - 评估对分带宽需求:AI训练通常要求1:1无阻塞收敛比;传统HPC可接受2:1或4:1。
- 选择拓扑并规划布线:Fat-Tree适合中小规模(≤数千节点),Torus适合规则网格计算(如气象模拟),Dragonfly适合超大规模(≥数万节点)。
- 配置路由算法:InfiniBand子网管理器(OpenSM)需针对拓扑选择路由算法——Fat-Tree用
updn(上行下行),Torus用dor(维度顺序路由),Dragonfly用adaptive routing。
# OpenSM路由算法配置示例(/etc/opensm/opensm.conf)
# Fat-Tree拓扑推荐
route_engine=3 # 3 = updn (up/down)
# Torus拓扑推荐
# route_engine=4 # 4 = dor (dimension order routing)
# Dragonfly拓扑推荐
# route_engine=6 # 6 = adaptive routing
案例/场景:三种拓扑的典型应用
| 拓扑 | 典型规模 | 代表场景 | 优势 | 劣势 |
|---|---|---|---|---|
| Fat-Tree | 数百~数千节点 | 中小型AI训练集群、企业HPC | 无阻塞、易理解、故障隔离好 | 线缆数量多(O(N log N)),成本高 |
| Torus | 数千~数万节点 | 气象模拟、分子动力学(规则网格通信) | 线缆少、局部通信延迟低 | 全局通信需多跳,对分带宽低 |
| Dragonfly | 数万~数十万节点 | 百亿亿次(Exascale)超算、大规模AI | 组间链路少、扩展性极强 | 路由复杂,需自适应路由算法 |
以NVIDIA DGX H100集群为例,常见配置为Fat-Tree:每台DGX H100有8个400Gbps HDR InfiniBand端口,若搭建256节点集群,则需256个叶子交换机(每个提供32个下行端口),核心层需256 × 32 / 64 = 128个64端口核心交换机,实现无阻塞通信。
误区/复盘:常见拓扑选择与实施错误
常见误区:
- 盲目追求“无阻塞”:并非所有应用都需要1:1对分带宽。若作业以局部通信为主(如邻域交换),Torus的性价比远高于Fat-Tree。
- 忽略路由算法匹配:在Torus上使用默认的updn路由会导致严重拥塞,必须切换为DOR或自适应路由。
- 布线错误导致逻辑拓扑失真:Fat-Tree要求严格按层级连接,若将叶子交换机直接互联,会破坏无阻塞特性。
- 未考虑故障域:Dragonfly中单个组内交换机故障可能影响整个组的通信,需设计冗余链路。
复盘建议:在部署前使用
ibdiagnet工具验证拓扑完整性,检查是否有非预期链路;使用ibnetdiscover导出实际拓扑图,与设计文档比对。若发现对分带宽不足,优先检查核心层交换机端口是否全部启用、是否存在单点链路。