ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

超节点集合通信拆解:NCCL/ACCL 与 MNNVL/MNACL 在 SuperNode/SuperPod 下的配置骨架

超节点集合通信拆解:NCCL/ACCL 与 MNNVL/MNACL 在 SuperNode/SuperPod 下的配置骨架 1. 超节点集合通信到底难在哪从拓扑发现到通信域建立如果你最近在调多机多卡的 AllReduce可能会遇到一个很反直觉的现象机器之间明明插了 NvLink 或 AccLinknvidia-smi topo -m里也显示 GPU 之间是NV连接但 NCCL 跑起来还是走了网卡带宽卡在 200GB/s 上下上不去。问题往往不在硬件而在集合通信库有没有把跨服务器的链路识别成一个统一的通信域。超节点SuperNode/SuperPod的本质是把多台服务器里的 GPU 通过 NvLink/AccLink 交换芯片连成一个超大带宽、超低延迟的域。这个域在 NCCL 里叫 MNNVLMulti-Node NvLink在 ACCL 里叫 MNACLMulti-Node AccLink。它和传统集群最大的区别是传统集群里节点内走 NvLink、节点间走网卡算法严格分两层而超节点里跨服务器的 GPU 也能走 NvLink/AccLink通信算法必须重新判断“谁和谁能直连”。这篇文章面向的是正在做超节点训练/推理部署的工程师或者想搞清楚 NCCL/ACCL 在 SuperPod 下配置骨架的人。我会按“拓扑发现 → 通信域建立 → 算子下发 → 验证”的顺序给出可复制的环境变量和配置文件骨架并说明怎么用日志和带宽测试确认通信域真的按预期建起来了。适合谁手上有 NvSwitch/AccSwitch 机器、要跑多机集合通信、被 NCCL 日志里MNNVL或CliqueId搞晕的人。2. 前置准备TaoToken 与超节点环境在动手改配置之前先把两件事理清楚一是你用来做验证和调试的模型服务入口二是超节点本身的软件栈版本。我平时做集合通信验证时会用一个稳定的 API 入口来跑小规模推理或对话测试确认 GPU 集群在通信域建立后能正常出结果。TaoToken 的 API 地址是 https://taotoken.net/api 官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。它的模型对话入口可以用来快速验证多卡推理是否正常Coding Plan 适合长期跑 Agent 类任务API Keys 管理在控制台里。不过要注意TaoToken 是模型服务入口不是集合通信库本身。超节点的通信域建立还是靠 NCCL/ACCL 和驱动。你需要先确认驱动版本支持 MNNVLnvidia-smi里能看到 NvSwitch 或 AccSwitch 设备NCCL 版本 ≥ 2.20ACCL 版本按厂商文档拓扑文件可读/sys/class/nvswitch/或厂商对应的 ACS 路径存在注意如果你的机器只有 PCIe 互联没有 NvSwitch/AccSwitch那它不构成超节点下面的 MNNVL 配置不会生效NCCL 会回退到传统 ring/tree。3. 可复制配置NCCL/ACCL 在 SuperNode 下的环境变量与文件骨架这一章是核心。我按“拓扑发现 → 通信域建立 → 算子下发”三个阶段给配置。3.1 拓扑发现阶段让 NCCL 识别 NvSwitch/AccSwitch传统非超节点拓扑识别只做三件事构建 GPU 的 PCIe 树、把网卡挂到 PCIe 树、如果有 NvLink 就加进拓扑。超节点多了一步识别 NvSwitch/AccSwitch 交换芯片并把它作为拓扑节点加入。NCCL 侧关键环境变量# 开启 MNNVL 拓扑识别 export NCCL_MNNVL_ENABLE1 # 指定拓扑文件路径让 NCCL 读取融合后的超节点拓扑 export NCCL_TOPO_FILE/etc/nccl/supernode-topo.xml # 开启 NvSwitch 识别 export NCCL_NVSWITCH_ENABLE1 # 调试日志确认拓扑发现过程 export NCCL_DEBUGINFO export NCCL_DEBUG_SUBSYSTOPO,GRAPHACCL 侧对应配置以厂商文档为准骨架如下export ACCL_MNACL_ENABLE1 export ACCL_TOPO_FILE/etc/accl/mnacl-topo.xml export ACCL_ACS_MERGE1 # 是否合并 AccSwitch 节点1 为合并 export ACCL_DEBUGINFO拓扑文件骨架NCCL XML 简化示例system version1 cpu numaid0 affinity0 pci busid0000:01:00.0 class0x030200 link_speed16.0 GT/s link_width16 gpu dev0 sm80 rank0/ /pci /cpu nvswitch dev0 busid0000:0a:00.0/ nvswitch dev1 busid0000:0b:00.0/ /system提示ACCL 在system-nodes[ACS].count 0时才会创建 ACS 节点也就是把多个 AccSwitch 合并成一个逻辑节点。如果你需要不合并的拓扑做通信优化要显式关掉合并开关。3.2 通信域建立阶段CliqueId 与 clusterUuid超节点不能只在单机内识别必须跨服务器建立统一的 AccLink/NvLink 域。这一步的关键是给集群和通信域打标识clusterUuid和CliqueId。# 集群唯一标识同一超节点内所有节点必须一致 export NCCL_CLUSTER_UUIDsuperpod-cluster-001 # 通信域标识同一 Clique 内一致 export NCCL_CLIQUE_IDclique-0 # 跨服务器拓扑融合 export NCCL_CROSS_NIC1 export NCCL_NET_GDR_LEVEL5ACCL 对应export ACCL_CLUSTER_UUIDsuperpod-cluster-001 export ACCL_CLIQUE_IDclique-0 export ACCL_CROSS_SERVER_LINK1配置文件骨架/etc/nccl/supernode.conf[cluster] uuid superpod-cluster-001 clique_id clique-0 cross_server_link 1 [topology] merge_switch 1 prefer_single_hop 1 [algorithm] use_nvlink_first 1 fallback_to_nic 13.3 算子下发阶段优先 NvLink回退网卡超节点集合通信算法有两个关键点一是跨服务器能走 AccLink 就不走网卡二是多级 AccSwitch 时优先一级交换。# 优先使用 NvLink/AccLink失败才回退网卡 export NCCL_P2P_LEVELNVL export NCCL_NET_DISABLE0 # 多级交换优化优先一级 ACS export NCCL_MNNVL_SINGLE_HOP_PREFER1 # 算法选择 export NCCL_ALGORing,Tree export NCCL_PROTOSimple,LLACCL 对应export ACCL_PREFER_ACCLINK1 export ACCL_SINGLE_HOP_PREFER1 export ACCL_FALLBACK_NIC14. 验证请求用日志和带宽测试确认通信域配置写完不算完必须验证通信域真的按预期建立了。我一般分两步先看日志再跑带宽。4.1 日志验证# 跑一个最小 AllReduce抓 NCCL 日志 NCCL_DEBUGINFO NCCL_DEBUG_SUBSYSTOPO,GRAPH,NET \ ./all_reduce_test -b 8 -e 128M -f 2 -g 8 21 | tee nccl_supernode.log在日志里重点搜这几个关键词grep -E MNNVL|CliqueId|clusterUuid|NVSwitch|ACS nccl_supernode.log预期能看到类似输出NCCL INFO MNNVL enabled, clusterUuidsuperpod-cluster-001 NCCL INFO CliqueIdclique-0, cross-server link detected NCCL INFO Topology: 2 nodes, 16 GPUs, 4 NVSwitch NCCL INFO Channel 00: 0[0] - 8[0] via NVLink (cross-server)如果看到via NET/IB而不是via NVLink说明跨服务器链路没被识别成超节点链路要回去检查NCCL_MNNVL_ENABLE和拓扑文件。4.2 带宽测试# 跨服务器 AllReduce 带宽测试 ./all_reduce_test -b 128M -e 8G -f 2 -g 16 -c 1 # 对比关掉 MNNVL 的带宽 NCCL_MNNVL_ENABLE0 ./all_reduce_test -b 128M -e 8G -f 2 -g 16 -c 1实测下来超节点内跨服务器 AllReduce 带宽应该接近节点内 NvLink 带宽的 70% 以上。如果只有网卡带宽水平比如 200GB/s 以下说明通信域没建对。注意带宽测试时确保没有其他任务占用 GPU否则数据会失真。5. 本篇常见错排查5.1 NCCL 日志里没有 MNNVL 字样原因通常是驱动或 NCCL 版本不支持或者NCCL_MNNVL_ENABLE没生效。检查nvidia-smi -q | grep -i nvswitch nccl --version echo $NCCL_MNNVL_ENABLE如果nvidia-smi里看不到 NvSwitch说明硬件层没识别先解决驱动问题。5.2 CliqueId 不一致导致通信域分裂多机启动时如果各节点的NCCL_CLIQUE_ID不一致NCCL 会建立多个独立通信域跨域通信回退网卡。统一用配置管理工具下发或者用启动脚本注入export NCCL_CLIQUE_ID$(cat /etc/nccl/clique_id)5.3 多级 AccSwitch 没走一级交换如果拓扑里有两级 ACS但通信还是走了两级检查NCCL_MNNVL_SINGLE_HOP_PREFER是否开启。ACCL 侧对应ACCL_SINGLE_HOP_PREFER。5.4 拓扑文件格式错误NCCL 对 XML 格式敏感属性名写错会静默忽略。用xmllint校验xmllint --noout /etc/nccl/supernode-topo.xml5.5 回退网卡后性能骤降这是预期行为但如果你不希望回退可以设NCCL_NET_DISABLE1强制只用 NvLink。不过这样一旦链路故障会直接报错生产环境慎用。6. 继续验证与长期编码的入口配置和验证跑通后下一步通常是把它接到实际的训练或推理任务里。如果你要长期跑编码类 Agent 或需要稳定的模型服务入口可以用 TaoToken 的 Coding Plan 做长期任务编排API Keys 在控制台管理接入文档里有详细的鉴权和调用示例。模型对话入口适合快速验证多卡推理结果是否正常排障和接入相关的细节都在接入文档里。超节点集合通信的坑大多不在算法本身而在拓扑发现和通信域建立这两步。把NCCL_DEBUG_SUBSYSTOPO,GRAPH打开盯着日志里的MNNVL、CliqueId、via NVLink这几个关键词基本能定位大部分问题。剩下的就是在网计算、Symmetric Memory 这些进阶特性等你有具体场景了再往下挖。
返回列表