ARTIFACT // DIAGNOSE-P2P-AND-ROCEV2.SH (SH)
多卡 PCIe P2P (`iommu=pt` / ACS) 与 200GbE RoCEv2 互联一键体检脚本 (diagnose-p2p-and-rocev2.sh)
一键检查内核参数是否开启 iommu=pt、扫描导致多卡 vLLM 死锁的的主板 PCIe ACS 重定向位,并核验 ConnectX-7 200GbE 网卡 MTU 9000 与 RoCEv2 GID 索引。
[核心实测结论 / TL;DR]本配置包「多卡 PCIe P2P (`iommu=pt` / ACS) 与 200GbE RoCEv2 互联一键体检脚本」(文件名:diagnose-p2p-and-rocev2.sh,格式:SH)是 Tinker AI 实测工坊配套指南《multi-gpu-pcie-p2p-iommu-deadlock-and-connectx7-rocev2-tcp-fallback-troubleshooting》的参数化生产模板。支持在本地浏览器实时定制 高速 RoCE 网卡接口名称 (RDMA_NET_IFACE=enp1s0f0np0)、目标巨型帧 MTU 值 (EXPECTED_MTU=9000) 等 2 项核心变量,默认遵循 127.0.0.1 回环绑定与最小权限规范。
04 // DIAGNOSISAPI 与部署排障· 验证日期:2026-11-02
查看全部 42 套配置附件 →diagnose-p2p-and-rocev2.sh
查看配套实测指南 →多卡 PCIe P2P (`iommu=pt` / ACS) 与 200GbE RoCEv2 互联一键体检脚本
一键检查内核参数是否开启 iommu=pt、扫描导致多卡 vLLM 死锁的的主板 PCIe ACS 重定向位,并核验 ConnectX-7 200GbE 网卡 MTU 9000 与 RoCEv2 GID 索引。
参数化定制变量 (Variables — 自动保存在本地浏览器)
UTF-8 编码 · 零延迟实时编译
#!/usr/bin/env bash # Tinker AI — Multi-GPU PCIe P2P & ConnectX-7 200GbE RoCEv2 Doctor (Guide #32) set -euo pipefail IFACE="enp1s0f0np0" TARGET_MTU="9000" echo "=== [1/4] Auditing Kernel IOMMU Passthrough (iommu=pt) ===" CMDLINE=$(cat /proc/cmdline) echo "Kernel cmdline: $CMDLINE" if echo "$CMDLINE" | grep -q "iommu=pt"; then echo "[OK] iommu=pt is active (direct PCIe BAR1 P2P DMA enabled)." else echo "[WARN] iommu=pt is MISSING! Multi-GPU vLLM (TP>=2) on AMD/Intel boards may deadlock. Add iommu=pt to GRUB or set export NCCL_P2P_DISABLE=1." fi echo "=== [2/4] Checking PCIe ACS Redirection & GPU P2P Matrix ===" if command -v nvidia-smi >/dev/null 2>&1; then nvidia-smi topo -p2p r || true elif command -v rocm-smi >/dev/null 2>&1; then rocm-smi --showtopo || true fi sudo lspci -vvv 2>/dev/null | grep -E "ACSCtl:.*SrcValid\+" | head -n 5 && echo "[INFO] PCIe ACS is enabled on bridge ports; if NCCL hangs, export NCCL_P2P_DISABLE=1 or disable ACS in BIOS." || true echo "=== [3/4] Checking ConnectX-7 / RDMA Devices & Interface MTU ($IFACE -> $TARGET_MTU) ===" if ip link show "$IFACE" >/dev/null 2>&1; then ip -br link show "$IFACE" ip link show "$IFACE" | grep -q "mtu $TARGET_MTU" && echo "[OK] $IFACE MTU is $TARGET_MTU" || echo "[WARN] $IFACE MTU is not $TARGET_MTU! Run: sudo ip link set dev $IFACE mtu $TARGET_MTU" fi echo "=== [4/4] Inspecting RoCEv2 GID Index Table ===" if command -v show_gids >/dev/null 2>&1; then show_gids | grep -i "v2" | head -n 8 || true echo "Recommended NCCL env: export NCCL_IB_HCA=mlx5_0:1 NCCL_IB_GID_INDEX=3 NCCL_SOCKET_IFNAME=$IFACE" fi
PARAMETER SPECIFICATION // 参数化变量规范说明表
「diagnose-p2p-and-rocev2.sh」可定制环境变量与默认值说明
本配置模板(SH 格式)支持 2 项运行时参数注入,所有替换均在本地浏览器内完成。
| 模板占位符 | 参数用途说明 | 安全默认值 | 填写示例 |
|---|---|---|---|
{{RDMA_NET_IFACE}} | 高速 RoCE 网卡接口名称 | enp1s0f0np0 | enp1s0f0np0 |
{{EXPECTED_MTU}} | 目标巨型帧 MTU 值 | 9000 | 9000 |
PAIRED HARDWARE MANIFEST // 配套实测环境与边界记录
配套指南《多卡 PCIe P2P 与 200GbE RoCEv2 互联排障指南:解决 NCCL 死锁卡死 (iommu=pt / ACS)、DGX Spark ConnectX-7 退化 TCP 慢速与多卡 R9700 假死》验证基线
实测硬件与操作系统 (Hardware & OS)
双机 NVIDIA DGX Spark (ConnectX-7 200GbE 直连) | AMD Threadripper / X870E 双卡 RTX 5090 / PRO 6000 | 双卡 AMD Radeon AI PRO R9700 (64GB)
锁定软件栈与模型版本 (Pinned Versions)
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 校准均在本地完成,无需外网。
已知限制与失败边界 (Known Limits)
- 若消费级主板(如部分 X870E / B850 / Z890)的第二根 PCIe 插槽走的是南桥芯片组(PCH)而非 CPU 直连通道,则物理上不支持跨卡 BAR1 P2P 直通,必须设置 `NCCL_P2P_DISABLE=1` 走主机共享内存 (`SHM`)。
- 双机 DGX Spark 通过 200GbE QSFP112 无交换机直连时,双端必须同时对齐 `mtu 9000` 与 `NCCL_IB_GID_INDEX=3`;若一端遗漏巨型帧配置,大于 1024 字节的张量通信包会直接触发 `ibv_modify_qp` 或超时重传死锁。
DEPLOYMENT CHECKLIST // 配置落地核验步骤
部署 diagnose-p2p-and-rocev2.sh 后的 3 步验收清单
- 已核验 `/proc/cmdline` 包含 `iommu=pt`(若主板无法关闭 PCIe ACS 则已导出 `NCCL_P2P_DISABLE=1`)。
- 已确认双机 ConnectX-7 200GbE 端口均已设置 `mtu 9000` 且统一指定了 `NCCL_IB_GID_INDEX=3` (IPv4 RoCEv2)。
- 在多卡 AMD Radeon AI PRO R9700 ROCm 主机上已导出 `HSA_ENABLE_SDMA=0` 与 `NCCL_P2P_LEVEL=PHB`。