在NVIDIA DGX Spark平台上对NVIDIA ConnectX-7 200G网卡配置教程

博主:卓悦达人卓悦达人 2025-11-23 3499

在NVIDIA DGX Spark平台上对NVIDIAConnectX-7 200G网卡进行配置时,会遇到“4 个逻辑端口”现象。理解背后的真相是后续所有配置的基础。本文将从此现象入手,逐步解析其原理,并提供从基础配置到深度性能验证的完整流程。

1理解“4 个逻辑端口”的真相

目前,在 DGX Spark 系统上配置 ConnectX-7(CX7)网卡时,会遇到一个常见问题:DGX Spark 只有两个物理端口,但在使用ip-br a或ibdev2netdev命令查看时, ConnectX-7 网卡显示为四个端口:

rocep1s0f0port1==> enp1s0f0np0 (Up)   物理端口1/路径A
rocep1s0f1port1==> enp1s0f1np1 (Up)   物理端口2/路径A
roceP2p1s0f0port1==> enP2p1s0f0np0 (Up) 物理端口1/路径B
roceP2p1s0f1port1==> enP2p1s0f1np1 (Up) 物理端口2/路径B

答案在于 GB10 芯片的 PCIe 限制与 Socket Direct 模式。

简单理解为:其无法为单个设备提供超过 x4 宽度的 PCIe 通道。因此为了实现 200 Gbps 的传输速率,将启用 ConnectX-7 的 socket 直通,把两条独立的 x4 PCIe 链路聚合起来,从而共同达到 200 Gbps 的带宽。

而 ConnectX-7 网卡在 Socket Direct 模式下,分别由 GB10 SoC 的两条独立 PCle x4 链路(我们称之为路径 A 和路径 B)驱动,所以会把每一个物理接口识别成两个 PCle 设备,进而对应两个逻辑接口。经由每个 PCle x4 的连接,只有100 Gbps,无法满足 200 Gbps 的传输需求,所以对应下图中,在配置网络和构建流量时,要实现完整的 200 Gbps 带宽必须同时使用这两条链路(路径 A 和路径 B)——即使只用一个物理接口,也需确保两路流量都被激活。

143c91a0-c38b-11f0-8c8f-92fbcf53809c.png

▲ 逻辑端口示意图

2025 丽台(上海)信息科技有限公司

本图片由丽台科技制作,如果您有任何疑问或需要使用此图片,请联系丽台科技(下同)

具体表现为:

路径 A-> 访问物理端口 1 (enp1s0f0np0)

路径 A-> 访问物理端口 2 (enp1s0f1np1)

路径 B-> 访问物理端口 1 (enP2p1s0f0np0)

路径 B-> 访问物理端口 2 (enP2p1s0f1np1)

这不是四个独立的物理网口,而是两个物理网口在操作系统层面被“镜像”为四条 PCIe 路径。为了充分利用硬件性能,必须正确配置并测试这四条路径。

2网络配置:连接两台 DGX Spark

下面将重点介绍连接两台 DGX Spark 时的手动静态 IP 分配。

2.1 确保两个系统上的用户名相同

此步骤旨在确保两台 DGX Spark 设备使用相同的用户名,以便后续操作(尤其是 SSH 免密登录和分布式任务调度)能够无缝进行。

注:用户可根据实际情况自行配置,无需严格遵循以下步骤。

2.1.1 检查当前用户名

在两台机器上分别运行:

whoami

如果两台都已经是leadtek_dgx1,则无需操作,直接继续后续步骤。

如果任一系统用户名不同,请按以下步骤创建统一用户。

2.1.2 在两台系统上创建 leadtek_dgx1 用户(如不存在)

# 创建用户并设置主目录
sudouseradd -m leadtek_dgx1


# 将用户加入 sudo 组
sudousermod -aGsudoleadtek_dgx1


# 设置密码
sudopasswd leadtek_dgx1


#切换到该用户
su - leadtek_dgx1

完成后,两台系统均以相同用户名leadtek_dgx1登录,便于后续 SSH 免密操作。

2.2 确认接口状态

确定所有网络端口均已连接(Up 状态):

leadtek_dgx1@spark-a83f:~$ ibdev2netdev
rocep1s0f0port1==> enp1s0f0np0 (Up)
rocep1s0f1port1==> enp1s0f1np1 (Up)
roceP2p1s0f0port1==> enP2p1s0f0np0 (Up)
roceP2p1s0f1port1==> enP2p1s0f1np1 (Up)

2.3 IP 地址规划

我们为 node1 和 node2 上的四个逻辑接口分别规划独立的子网,用于后续网络性能测试。

▲ IP 地址规划

2.4 执行配置命令

在 node1 上执行:

# 物理端口1 / 路径A (192.168.10.0/24)/enp1s0f0np0
sudoip addr add192.168.10.10/24dev enp1s0f0np0
sudoip link set enp1s0f0np0 up


# 物理端口2 / 路径A (192.168.11.0/24)/enp1s0f1np1
sudoip addr add192.168.11.10/24dev enp1s0f1np1
sudoip link set enp1s0f1np1 up


# 物理端口1 / 路径B (192.168.12.0/24)/enP2p1s0f0np0
sudoip addr add192.168.12.10/24dev enP2p1s0f0np0
sudoip link set enP2p1s0f0np0 up


# 物理端口2 / 路径B (192.168.13.0/24)/enP2p1s0f1np1
sudoip addr add192.168.13.10/24dev enP2p1s0f1np1
sudoip link set enP2p1s0f1np1 up


#ip -br a
enp1s0f0np0   UP      192.168.10.10/24
enp1s0f1np1   UP      192.168.11.10/24
enP2p1s0f0np0  UP      192.168.12.10/24
enP2p1s0f1np1  UP      192.168.13.10/24

在 node2 上执行:

# 物理端口1 / 路径A (192.168.10.0/24)/enp1s0f0np0
sudoip addr add192.168.10.11/24dev enp1s0f0np0
sudoip link set enp1s0f0np0 up


# 物理端口1 / 路径A (192.168.11.0/24)/enp1s0f1np1
sudoip addr add192.168.11.11/24dev enp1s0f1np1
sudoip link set enp1s0f1np1 up


# 物理端口2 / 路径B (192.168.12.0/24)/enP2p1s0f0np0
sudoip addr add192.168.12.11/24dev enP2p1s0f0np0
sudoip link set enP2p1s0f0np0 up


# 物理端口2 / 路径B (192.168.13.0/24)/enP2p1s0f1np1
sudoip addr add192.168.13.11/24dev enP2p1s0f1np1
sudoip link set enP2p1s0f1np1 up


#ip -br a
enp1s0f0np0   UP      192.168.10.11/24
enp1s0f1np1   UP      192.168.11.11/24
enP2p1s0f0np0  UP      192.168.12.11/24
enP2p1s0f1np1  UP      192.168.13.11/24

2.5 设置无密码 SSH 身份验证

需要找到已启动的 ConnectX-7 接口的 IP 地址。在两个节点上,分别运行ip addr show enp1s0f0np0:

#ip addr show enp1s0f0np0
3: enp1s0f0np0: 
 
   mtu1500qdisc mq state UP group default qlen1000
 link/ether4c47:7d40brd ffffff:ff
 inet192.168.10.10/24scope global enp1s0f0np0
   valid_lf
  tforever preferred_lft forever


#ip addr show enp1s0f0np0
3: enp1s0f0np0: 
  
    mtu1500qdisc mq state UP group default qlen1000 link/ether4c47:7d8f brd ffffff:ff inet192.168.10.11/24scope global enp1s0f0np0 valid_lftforever preferred_lft forever
  
 

确定 node1 和 node2 IP:

node1:192.168.10.10
node2:192.168.10.11

在两个节点上分别运行以下命令以启用无密码 SSH:

ssh-copy-id -i ~/.ssh/id_rsa.pub leadtek_dgx1@192.168.10.10
ssh-copy-id -i ~/.ssh/id_rsa.pub leadtek_dgx1@192.168.10.11


ssh192.168.10.10hostname
ssh192.168.10.11hostname

3RDMA 带宽性能测试

配置完成后,我们使用ib_write_bw工具(来自 perftest-tools 包)来验证聚合带宽是否能达到 200 Gbps 的物理极限。

3.1 测试一:单物理端口聚合带宽(物理端口 1)

此测试的目标是验证单个物理端口(使用其对应的两条 PCIe 路径)是否能跑满 200 Gbps。

测试步骤:我们需要在两个节点上同时启动两个ib_write_bw实例,一个跑在物理端口 1/ 路径 A(192.168.10.x),一个跑在物理端口 1/ 路径 B(192.168.12.x)。

3.1.1 启动物理端口 1/ 路径 A (192.168.10.x)测试

在node2(服务端))终端 1 中运行:

ib_write_bw-d rocep1s0f0 -p18511--bind_source_ip=192.168.10.11--report_gbits --run_infinitely -D5

在node1(客户端) 终端 1 中运行:

ib_write_bw-d rocep1s0f0 -p18511--report_gbits --run_infinitely -D5192.168.10.11

观察到带宽结果:约 97 Gbit/s。

14f415d2-c38b-11f0-8c8f-92fbcf53809c.png

▲ 测试结果截图

2025 丽台(上海)信息科技有限公司

本文所有测试结果均由丽台科技实测得出,如果您有任何疑问或需要使用此测试结果,请联系丽台科技(下同)

3.1.2 保持物理端口 1/ 路径 A 通信,启动物理端口 1/ 路径 B (192.168.12.x)测试

在node2(服务端) 终端 2 中运行:

ib_write_bw-d roceP2p1s0f0 -p18512--bind_source_ip=192.168.12.11--report_gbits --run_infinitely -D5

在node1(客户端) 终端 2 中运行:

ib_write_bw-d roceP2p1s0f0 -p18512--report_gbits --run_infinitely -D5192.168.12.11

观察到带宽结果:约 92 Gbit/s。

▲ 测试结果截图

测试结果(物理端口 1):

15bca272-c38b-11f0-8c8f-92fbcf53809c.png

▲ 测试结果截图

总带宽= 路径 A 平均带宽 + 路径 B 平均带宽

总带宽≈ 92.5 + 92.5 =185 Gbit/s

结论:测试结果验证了单个物理端口可以通过聚合其背后的两条 PCIe 路径,提供接近 200 Gbit/s 的理论带宽。

3.2 测试二:双物理端口带宽

此测试的目标是验证当两个物理端口(即所有四条 PCIe 路径)同时工作时,网卡的总吞吐能力。

测试步骤:保持 3.1 中的两个测试(物理端口 1 的 A、B 两条路径)持续运行,在两个节点上额外再启动两个ib_write_bw实例,分别对应物理端口 2 的两条路径。

3.2.1 启动物理端口 2/ 路径 A(192.168.11.x)

node2(服务端)终端 3 中运行:

ib_write_bw-d rocep1s0f1 -p18513--bind_source_ip=192.168.11.11--report_gbits --run_infinitely -D5

node1(客户端)终端 3 中运行:

ib_write_bw-d rocep1s0f1 -p18513--report_gbits --run_infinitely -D5192.168.11.11

3.2.2 启动物理端口 2/ 路径 B(192.168.13.x)

node2(服务端)终端 4 中运行:

ib_write_bw-d roceP2p1s0f1 -p18514--bind_source_ip=192.168.13.11--report_gbits --run_infinitely -D5

node1(客户端)终端 4 中运行:

ib_write_bw-d roceP2p1s0f1 -p18514--report_gbits --run_infinitely -D5192.168.13.11

161f7ed8-c38b-11f0-8c8f-92fbcf53809c.png

▲ 测试结果截图

测试结果:当所有四条链路并发运行时,观察到每条链路的带宽被平均分配。

每条路径带宽 ≈ 49 Gbit/s

总带宽= ~49 + ~49 + ~49 + ~49 =196 Gbit/s

结论:表明 ConnectX-7 网卡的总带宽约为 196 Gbit/s(接近 200G 目标)。无论流量是集中在单个物理端口(如测试 3.1),还是分散到两个物理端口(如测试 3.2),总吞吐量保持一致。

4NCCL 通信性能测试

深度学习场景中,NCCL 是多机通信的关键。我们按照官方文档编译 nccl-tests 并进行all_gather和 all_reduce测试。

4.1 安装依赖项并构建 NCCL

#安装依赖项并构建NCCL
sudoapt-get update &&sudoapt-get install -y libopenmpi-dev
gitclone-b v2.28.3-1 https://github.com/NVIDIA/nccl.git ~/nccl/
cd~/nccl/
make -j src.build NVCC_GENCODE="-gencode=arch=compute_121,code=sm_121"
#设置环境变量
exportCUDA_HOME="/usr/local/cuda"
exportMPI_HOME="/usr/lib/aarch64-linux-gnu/openmpi"
exportNCCL_HOME="$HOME/nccl/build/"
exportLD_LIBRARY_PATH="$NCCL_HOME/lib:$CUDA_HOME/lib64/:$MPI_HOME/lib:$LD_LIBRARY_PATH"

4.2 构建 NCCL 测试套件

gitclonehttps://github.com/NVIDIA/nccl-tests.git ~/nccl-tests/
cd~/nccl-tests/
make MPI=1

4.3 All-Gather 带宽测试(单路径)

注意:此步骤仅选择物理端口 1 的一条路径(路径Aenp1s0f0np0)作为通信接口,以建立一个单路径基准。

# 仅指定物理端口1/路径A enp1s0f0np0 作为通信接口
exportUCX_NET_DEVICES=enp1s0f0np0
exportNCCL_SOCKET_IFNAME=enp1s0f0np0
exportOMPI_MCA_btl_tcp_if_include=enp1s0f0np0
#指定物理端口1/路径A的设备标识
exportNCCL_IB_HCA=rocep1s0f0

运行all_gather测试(单路径):

mpirun-np2-H192.168.10.10:1,192.168.10.11:1
 --mca plm_rsh_agent"ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
 -x LD_LIBRARY_PATH
 -x NCCL_IB_HCA
 $HOME/nccl-tests/build/all_gather_perf -b16G -e16G -f2

-x NCCL_DEBUG=INFO可以加上此命令以查看详细日志。

测试结果:单路径下,All-Gather操作的平均总线带宽达到12.04 GB/s

168c0dd2-c38b-11f0-8c8f-92fbcf53809c.png

▲ 测试结果截图

4.4 All-Gather 带宽测试(双路径)

注意:此步骤选择物理端口 1 的两条路径作为通信接口,以建立双链路。

#指定物理端口1/路径A和路径B enp1s0f0np0,enP2p1s0f0np0 作为通信接口
exportUCX_NET_DEVICES=enp1s0f0np0,enP2p1s0f0np0
exportNCCL_SOCKET_IFNAME=enp1s0f0np0,enP2p1s0f0np0
exportOMPI_MCA_btl_tcp_if_include=enp1s0f0np0,enP2p1s0f0np0


#指定两个路径的设备标识
exportNCCL_IB_HCA=rocep1s0f0,roceP2p1s0f0


mpirun-np2-H192.168.10.10:1,192.168.10.11:1
 --mca plm_rsh_agent"ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
 -x LD_LIBRARY_PATH
 -x NCCL_IB_HCA
 $HOME/nccl-tests/build/all_gather_perf -b16G -e16G -f2

测试结果:双路径下,All-Gather 操作的平均总线带宽达到22.68 GB/s

16e81924-c38b-11f0-8c8f-92fbcf53809c.jpg

▲ 测试结果截图

4.5 All-reduce 带宽测试(单路径)

注意:切换终端时,请勿忘记重新导入 4.1 节中设置的环境变量。

# 仅指定物理端口1/路径A enp1s0f0np0 作为通信接口
exportUCX_NET_DEVICES=enp1s0f0np0
exportNCCL_SOCKET_IFNAME=enp1s0f0np0
exportOMPI_MCA_btl_tcp_if_include=enp1s0f0np0
#指定物理端口1/路径A的设备标识
exportNCCL_IB_HCA=rocep1s0f0
mpirun-np2
 -host192.168.10.10:1,192.168.10.11:1
 -x LD_LIBRARY_PATH
 -x NCCL_IB_HCA
 $HOME/nccl-tests/build/all_reduce_perf -b1M -e512M -f2-g1

测试结果:在单路径 All-Reduce 测试中,512MB 大消息量下达到的12.08 GB/s总线带宽。

1744d088-c38b-11f0-8c8f-92fbcf53809c.jpg

▲ 测试结果截图

4.6 All-reduce 带宽测试(双路径)

# 指定物理端口1/路径A和路径B enp1s0f0np0,enP2p1s0f0np0 作为通信接口
exportUCX_NET_DEVICES=enp1s0f0np0,enP2p1s0f0np0
exportNCCL_SOCKET_IFNAME=enp1s0f0np0,enP2p1s0f0np0
exportOMPI_MCA_btl_tcp_if_include=enp1s0f0np0,enP2p1s0f0np0
#指定两个路径的设备标识


exportNCCL_IB_HCA=rocep1s0f0,roceP2p1s0f0
mpirun-np2
 -host192.168.10.10:1,192.168.10.11:1
 -x LD_LIBRARY_PATH
 -x NCCL_IB_HCA
 $HOME/nccl-tests/build/all_reduce_perf -b1M -e512M -f2-g1

测试结果:在双路径 All-Reduce 测试中,512MB 大消息量下达到的18.02 GB/s总线带宽。

179fc9b6-c38b-11f0-8c8f-92fbcf53809c.jpg

▲ 测试结果截图

5测试总结与分析

根据以上测试,可以得出以下关键结论:

配置确认:DGX Spark 上的 ConnectX-7 网卡确实因 socket 直通呈现为 4 个逻辑接口。

硬件能力验证(ib_write_bw):原始带宽测试(ib_write_bw)结果(185-196 Gbit/s)表明,无论是通过单物理端口还是双物理端口,该网卡均能提供接近 200 Gbps 的聚合吞吐能力,符合硬件设计预期。

NCCL 性能分析:在单物理端口(双路径)上运行时,All-Gather 操作针对超大消息量实现了22.68 GB/s的平均总线带宽,展现了其在高并行通信场景下出色的数据聚合与分发吞吐能力。All-Reduce 测试中,512MB 大消息量下达到的18.02 GB/s总线带宽,是当前系统通信性能的真实峰值,反映了 NCCL 算法与硬件互联在高负载下的真实吞吐能力。

更多关于 DGX Spark 的使用指南、测试报告等,将在丽台科技公众号持续发布,敬请保持关注!