多卡 PCIe P2P 死锁卡死 (`iommu=pt` / ACS) 与 DGX Spark 200GbE RoCEv2 退化 TCP 慢速
排查双机 DGX Spark ConnectX-7 200GbE 集群静默退化回千兆 TCP (`NET/Socket`)、RoCEv2 建链报 `ibv_modify_qp failed`,以及多卡 vLLM (`TP=2/4`) 在 AMD/Intel 工作站上卡死在 NCCL/RCCL 初始化的根因。
你当前排查的是双机 DGX Spark (ConnectX-7 200GbE QSFP 直连) 分布式集群,还是单台插有多张 PCIe 显卡(RTX 5090 / PRO 6000 / Radeon AI PRO R9700)的工作站?
nvidia-smi topo -m 2>/dev/null || ibv_devices
「多卡 PCIe P2P 死锁卡死 (`iommu=pt` / ACS) 与 DGX Spark 200GbE RoCEv2 退化 TCP 慢速」的全部 3 步终端探测命令与分支判据
无需逐层点击交互,以下列出本故障决策树每一层的宿主机只读探测命令、预期基线提示与输出流向。
你当前排查的是双机 DGX Spark (ConnectX-7 200GbE QSFP 直连) 分布式集群,还是单台插有多张 PCIe 显卡(RTX 5090 / PRO 6000 / Radeon AI PRO R9700)的工作站?
nvidia-smi topo -m 2>/dev/null || ibv_devices
- • 双机 DGX Spark (200GbE 直连):vLLM / Ray 生成极慢 (<4 tok/s,日志显示 `NET/Socket`) 或报错 `ibv_modify_qp failed`
→ q-rocev2-socket-or-qp-error - • 单机双卡/四卡 PCIe 工作站:`vllm serve --tensor-parallel-size 2` 永远卡死在 `Initializing distributed environment`
→ q-p2p-nvidia-or-amd-r9700
在双节点启动过程中,`NCCL_DEBUG=INFO` 终端日志打印了哪种特征信息?
show_gids | grep -i roce && ip -br link
- • 日志显示 `NCCL INFO NET/Socket : Using [0]wlan0` 或普通管理网口(速度比 200GbE RDMA 慢 10–20 倍)
→ sol-connectx7-rocev2-hca-binding - • 日志显示 `NET/IB : ibv_modify_qp failed` 或 `transport retry counter exceeded (error 12)`
→ sol-rocev2-gid-index-mtu9000
当前卡死在张量并行 (`TP=2` 或 `TP=4`) 初始化阶段的是哪类多卡平台?
cat /proc/cmdline && sudo lspci -vvv | grep -i "ACSCtl:" | head -n 6
- • 多卡 NVIDIA(双卡 RTX 5090 / RTX PRO 6000 / 4090):卡死在 `ncclAllReduce` 或提示 `P2P is disabled`
→ sol-pcie-iommu-pt-and-acs-p2p - • 多卡 AMD Radeon AI PRO R9700 (32GB×2) / RX 9070 XT:RCCL 卡死或报 `MEMORY_APERTURE_VIOLATION`
→ sol-multi-r9700-rccl-sdma-tuning
「多卡 PCIe P2P 死锁卡死 (`iommu=pt` / ACS) 与 DGX Spark 200GbE RoCEv2 退化 TCP 慢速」包含的 4 类根因、修复代码与验收命令
修复方案:显式绑定 `NCCL_SOCKET_IFNAME` 与 `NCCL_IB_HCA=mlx5_0:1`,强制走 200GbE ConnectX-7 RoCEv2
sol-connectx7-rocev2-hca-binding在双机 NVIDIA DGX Spark 上,若不显式指定高速网卡,Ray 与 NCCL 默认会绑定主机名对应的管理网口(常为千兆有线或 Wi-Fi),导致跨机张量通信从 24.6 GB/s 的 RDMA 暴跌至不足 100 MB/s 的 TCP Socket。
- 启动 Ray 集群时,必须将 `--node-ip-address` 绑定在 200GbE QSFP112 直连网卡 (`enp1s0f0np0`) 的 `/30` 专用子网 IP(如 `192.168.10.1` 与 `192.168.10.2`)。
- 在两台节点上同时导出 `NCCL_SOCKET_IFNAME=enp1s0f0np0`、`NCCL_IB_HCA=mlx5_0:1` 与 `NCCL_IB_DISABLE=0`,强制激活 GPUDirect RDMA。
# Pin Ray & NCCL to the 200GbE ConnectX-7 QSFP112 interface: export NCCL_DEBUG=INFO export NCCL_IB_DISABLE=0 export NCCL_IB_HCA=mlx5_0:1 export NCCL_IB_GID_INDEX=3 export NCCL_SOCKET_IFNAME=enp1s0f0np0 export GLOO_SOCKET_IFNAME=enp1s0f0np0 # Verify ~197 Gb/s (24.6 GB/s) RDMA bandwidth before launching vLLM: ib_write_bw -d rocep1s0f0 -F --report_gbits -s 1048576 -q 8 -b 192.168.10.1
[边界说明]确认启动日志出现 `NCCL INFO NET/IB : Using [0]mlx5_0:1/RoCE`;双机跑 Qwen3-235B-A22B 的生成速度将从 TCP 下的 2.8 tok/s 跃升至 34.6 tok/s。
ethtool enp1s0f0np0 | grep -E "Speed|Link detected"修复方案:双端对齐 `mtu: 9000` 巨型帧并指定 `NCCL_IB_GID_INDEX=3` (IPv4 RoCEv2)
sol-rocev2-gid-index-mtu9000当一端默认使用 RoCEv1(GID 索引 0/1)而另一端使用 IPv4 RoCEv2(GID 索引 3),或其中一台节点的网卡未开启 `mtu 9000` 巨型帧导致 4096 字节 RDMA 载荷包被丢弃时,QP 建链即报 `ibv_modify_qp failed` 或超时错误 12。
- 在双节点运行 `show_gids`,找到 `VER` 列为 `v2` 且对应 `192.168.10.x` IPv4 地址的索引号(通常为 `3`),统一导出 `export NCCL_IB_GID_INDEX=3`。
- 在两台节点上执行 `sudo ip link set dev enp1s0f0np0 mtu 9000`(并写入 Netplan 持久化),确保 RDMA 4K MTU 帧无损传输。
# Set MTU 9000 jumbo frames on both ConnectX-7 endpoints: sudo ip link set dev enp1s0f0np0 mtu 9000 ip -d link show enp1s0f0np0 | grep mtu # Inspect RoCEv2 GID table and lock GID index 3: show_gids | grep -E "192\.168\.10\.|v2" export NCCL_IB_GID_INDEX=3
[边界说明]在双机无交换机 QSFP112 DAC 直连拓扑下,开启 `mtu 9000` 可将实测 RDMA 有效带宽从 154 Gb/s 提升至满速 197.4 Gb/s。
ip link show enp1s0f0np0 | grep "mtu 9000"修复方案:在 GRUB 开启 `iommu=pt` 透传,或在主板 ACS 拦截时设置 `NCCL_P2P_DISABLE=1`
sol-pcie-iommu-pt-and-acs-p2p在 AMD 锐龙 / Threadripper / EPYC 及部分消费级 PCIe 5.0 主板上,默认开启的严格 IOMMU 地址转换或 PCIe ACS(访问控制服务)会拦截跨槽显卡间的 BAR1 P2P 直接内存读写,导致 `vLLM` 启动张量并行时死锁在 `ncclAllReduce`。
- 免重启快速恢复:导出 `export NCCL_P2P_DISABLE=1`(强制 NCCL 改走宿主机共享内存 `SHM` 通道,在 PCIe 5.0 下仅损失约 8%–12% 吞吐,立即可跑通 `TP=2`)。
- 永久解锁原生 P2P 满速:在 `/etc/default/grub` 的内核参数中加入 `amd_iommu=on iommu=pt`(Intel 平台为 `intel_iommu=on iommu=pt`),在 BIOS 中关闭 PCIe ACS Control,执行 `sudo update-grub && sudo reboot`。
# Option A — Immediate workaround without reboot (uses PCIe SHM instead of BAR1 P2P): export NCCL_P2P_DISABLE=1 export NCCL_SHM_DISABLE=0 # Option B — Permanent kernel fix for direct GPU-to-GPU PCIe P2P DMA: sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="iommu=pt /' /etc/default/grub sudo update-grub # Reboot and verify P2P matrix: nvidia-smi topo -p2p r
[边界说明]重启后运行 `nvidia-smi topo -p2p r` 核验:若显示 `OK`,即可移除 `NCCL_P2P_DISABLE=1`,吃满 PCIe 5.0 原生 64 GB/s P2P 带宽。
cat /proc/cmdline | grep "iommu=pt"修复方案:在多卡 Radeon AI PRO R9700 上设置 `HSA_ENABLE_SDMA=0` 与 `NCCL_P2P_LEVEL=PHB`(或改用 Vulkan 分层)
sol-multi-r9700-rccl-sdma-tuning在双卡或三卡 AMD Radeon AI PRO R9700 (32GB RDNA 4 `gfx1201`) 上运行 ROCm 版 vLLM (`TP=2`) 时,跨 PCIe Root Complex 的异步 SDMA 引擎容易触发 `MEMORY_APERTURE_VIOLATION` 或 RCCL 环网死锁。
- 在多卡 ROCm 容器中运行 vLLM 时,导出 `HSA_ENABLE_SDMA=0`、`NCCL_IB_DISABLE=1` 与 `NCCL_P2P_LEVEL=PHB`,并确保宿主机内核开启了 `iommu=pt` 及主板 Above 4G Decoding / Re-Size BAR。
- 若为单用户跑 70B–120B GGUF 模型,在双卡 R9700 (64GB) 上优先使用 `llama-server -ngl 99 --split-mode layer` 配合 Vulkan (`RADV`) 后端按层切分,彻底避开跨卡 All-Reduce 同步开销。
# Multi-card AMD Radeon AI PRO R9700 (gfx1201) RCCL stability env vars for vLLM: export HSA_ENABLE_SDMA=0 export NCCL_IB_DISABLE=1 export NCCL_P2P_LEVEL=PHB export NCCL_ALGO=Ring # Or run dual-R9700 (64GB) GGUF inference via Vulkan RADV with zero RCCL overhead: GGML_VK_VISIBLE_DEVICES=0,1 ./build/bin/llama-server \ -m ./models/Llama-3.3-70B-Instruct-Q4_K_M.gguf -ngl 99 --split-mode layer -c 32768 -fa
[边界说明]在双卡 R9700(共 64GB 显存)上,使用 `llama.cpp` Vulkan 的 `--split-mode layer` 按层切分跑 Llama-3.3-70B Q4_K_M 实测可达 21.8 tok/s,且对主板 PCIe P2P 拓扑零依赖。
rocm-smi --showtopo || vulkaninfo --summary | grep -i "deviceName"多卡 PCIe P2P 与 200GbE RoCEv2 互联排障指南:解决 NCCL 死锁卡死 (iommu=pt / ACS)、DGX Spark ConnectX-7 退化 TCP 慢速与多卡 R9700 假死
针对多卡与双机分布式本地 AI 部署的深度排障手册:彻底解决双卡/四卡 vLLM (`TP=2/4`) 卡死在 NCCL 初始化 (`iommu=pt` / PCIe ACS 拦截)、双机 DGX Spark 200GbE 静默退化回千兆 TCP (`NET/Socket`)、RoCEv2 建链失败 (`ibv_modify_qp`) 与多卡 AMD R9700 RCCL 死锁。
双机 NVIDIA DGX Spark (ConnectX-7 200GbE 直连) | AMD Threadripper / X870E 双卡 RTX 5090 / PRO 6000 | 双卡 AMD Radeon AI PRO R9700 (64GB)
NCCL 2.25.1 + Mellanox OFED RoCEv2 (`mlx5_0`) · vLLM 0.8.2 (`--tensor-parallel-size 2` & Ray) · ROCm 6.4 RCCL + `llama.cpp` Vulkan RADV
100% 本地内核、PCIe 总线与无交换机 RDMA 诊断 — 所有 PCIe 拓扑探测、GRUB 内核参数修复与 RoCEv2 GID/MTU 校准均在本地完成,无需外网。