用途:检测 CoreWeave 多节点 GPU 作业是否因 NCCL 从 InfiniBand(NET/IB)静默回退到 TCP(NET/Socket)而变慢。该回退不会报错,但多节点集合通信会明显变慢,GPU 仍按全价计费。
主要能力:内置确定性脚本 scripts/fabric-check.py 解析 NCCL_DEBUG=INFO 日志中的 Using network 行、NET/IB 与 NET/Socket 区别、pod spec 的 resources 块中 rdma/ib 请求、ibstat 端口状态以及 all_reduce_perf 的 bus 带宽,输出 VERDICT,标明 rdma_engaged(yes/no/partial/unknown)、实际使用的传输方式、缺失条件与修复建议。LLM 不直接判断传输方式,由脚本决定,减少误读。
使用方式:先以 NCCL_DEBUG=INFO 重跑作业(或单个 rank)并捕获 stderr,这是必要条件。可选补充 kubectl get pod "$POD" -o yaml 的 pod spec、节点 ibstat 输出、all_reduce_perf 结果。将证据合并后运行:cat nccl-debug.log pod.yaml ibstat.txt allreduce.txt 2>/dev/null | python3 scripts/fabric-check.py。需要读取实时 pod spec 时,kubectl 仅执行只读 get,使用现有 $KUBECONFIG,不会 cordon、drain 或 apply。
三个必要条件(缺一即回退):rdma/ib: 1 同时出现在 resources.requests 和 resources.limits 中;设置 NCCL_IB_HCA=ibp 与 NCCL_SOCKET_IFNAME=eth0(除非通过 MPI Operator 启动);NCCL_DEBUG=INFO 确认出现 NET/IB(最好有 GPU Direct RDMA Enabled)。若日志显示 NCCL_IB_DISABLE=1,需设为 0。
修复顺序:补齐 rdma/ib 到 requests 与 limits;设置上述环境变量;重跑并确认日志为 NET/IB 而非 NET/Socket。若 RDMA 已启用但仍慢,检查 ibstat 每个端口是否为 State: Active / Physical state: LinkUp,并用 all_reduce_perf busbw 对照 CoreWeave 按 GPU 数量与 NCCL 版本发布的 nccl-tests 基线,不要使用固定数字。NVSwitch 系统出现卡死时,安全重置顺序为停止 Fabric Manager → nvidia-smi -r 重置 GPU → 启动 Fabric Manager。
限制:需要 NCCL_DEBUG=INFO 日志,否则无法判断传输方式;rdma/ib 资源键可能因设备插件配置不同,需用 kubectl describe node / get node -o yaml 确认;基线随 GPU 类型、节点数、NCCL 版本与 SHARP 变化;NVSwitch 重置命令的支持情况依镜像与驱动而异,托管节点上建议先提工单或 cordon。为社区贡献,与 CoreWeave 无隶属或背书关系。