Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

附录 D – 如何使用自动配置的 IPv6 地址运行 NCCL 测试

要使用静态或通过 SLAAC 自动分配的全局 IPv6 地址运行模型或 NCCL 测试,必须调整 NCCL_IB_GID_INDEX 变量的值。

注意:

从 NCCL 2.21 开始,不再需要手动指定 GID 索引。它会根据NCCL_SOCKET_FAMILY设置自动处理。如果NCCL_SOCKET_FAMILY设置为AF_INET6,并且主机之间已建立 IPv6 连接,则通过 IPv6 的 RoCEv2 流量应按预期运行。

NCCL_IB_GID_INDEX 变量定义 RoCE (RDMA) 通信使用的全局 ID 索引。默认值为 -1,这意味着 NCCL 将根据 InfiniBand 设备的活动链路层自动选择正确的 GID 索引。如果链路层是以太网 (RoCE),NCCL 将使用返回支持 RoCE v2 的 GID(通常为 GID 索引 3,具体取决于驱动程序/固件)的 GID 索引。

有关更多详细信息,您可以查看 Nvidia 的环境变量文档

要查找所需地址的 GID,请使用以下命令:

要查找 mellanox 接口名称,您可以使用以下脚本:

示例:

注意:确保所有节点中的 GID 匹配。

可以使用脚本 find_pxb_gpu_nic_pairs.py 轻松找到 Mellanox 接口名称、用户分配的接口名称(例如 gpu0_eth)、NIC 和 GPU 之间的映射信息,这些信息可在以下位置 找到: https://github.com/Juniper/jvd/tree/main/Data%20Center/AIDC/backend/AI_ML_Multitenancy

示例:

确定 GID 后,您可以使用以下方法运行 NCCL 测试:

TENANT=<TENANT#> GID=<GID> ./run-tenant.sh

您也可以 在以下位置找到: https://github.com/Juniper/jvd/tree/main/Data%20Center/AIDC/backend/AI_ML_Multitenancy

注意:该脚本是为租户 = 1-8 创建的。

示例:

要检查在运行 NCCL 测试时是否使用了正确的 GPU,请使用以下命令:

示例:

GPU–NIC 映射和拓扑感知

确保将正确的 GPU 和 NIC 映射到每个租户。在分配的 GPU 和 NIC 之间保持 紧密的 NUMA 和 PCIe 对齐 可确保最佳性能。每个租户的 GPU 和 NIC 应尽可能战略性地位于 同一 NUMA 区域和 PCIe 层次结构中

nvidia-smi topo -m 命令显示系统中 GPU、NIC 和 CPU 之间的 互连拓扑 。输出显示为 矩阵 ,其中行和列代表设备,每个单元格表示它们之间的 连接类型 (或“距离”)。这些连接类型揭示了流量如何流经 PCIe 交换机、主机桥接器和 CPU 插槽,帮助确定哪些 GPU-NIC 配对提供最佳性能。

X 同一设备(矩阵的对角线)
像素 Single PCIe 交换机或桥接器。最短路径、最快通信
PXB 同一根复合体(NUMA 节点)中的 多个 PCIe 网桥 ,但不遍历 PCIe 主机网桥。路径和延迟稍长。
PHB 穿过 PCIe 主机桥 (连接到 CPU)。可能跨越 CPU 边界。性能较低。
系统 越同一 NUMA 节点内的多个 PCIe 主机桥。延迟增加。
节点 NUMA 节点,遍历 CPU 套接字之间的 QPI/UPI 互连 。最慢路径 — 避免用于 RDMA 或延迟敏感型流量。

对于 RDMA 流量,请为 GPU↔NIC 对选择 PXB 或 PIX 路径,以在同一 NUMA 域和 PCIe 主机桥接器内保持通信。尽可能避免使用 SYS 或 NODE 路径,因为它们会增加不必要的延迟并降低带宽效率。

例如,考虑将 GPU2 和 NIC0 分配给租户 A,将 GPU5 和 NIC9 分配给租户 B 的情况,如下图所示。图 ## 中的 nvidia-smi topo -m 输出表示,来自 GPU2→NIC0 的流量必须遍历多个 PCIe 主机桥接并跨越 NUMA 域,这会导致租户 A 的性能下降。相比之下,GPU5→NIC9 通过同一根复合体内的多个 PCIe 网桥进行通信,避免了 CPU 遍历并为租户 B 保持了更好的性能。

图 61.租户 GPU 和 NIC 分配示例