在智算平台上进行 NCCL 测试
NCCL(NVIDIA Collective Communications Library)是 NVIDIA 开发的一个用于在多个 GPU 之间进行高效通信的库,它可以在实例内或实例间实现多个 GPU 的快速通信。
本文旨在介绍如何在智算平台上进行 NCCL 测试。
操作步骤
-
参考前文内容,创建分布式训练任务,在弹出的创建训练任务页面,按如下要求配置各项参数。
-
任务信息要求如下:
-
任务类型
:选择 Pre-train。 -
框架
:选择MPI。 -
镜像
:选择镜像地址,并输入相应地址为dockerhub.aicp.local/aicp-common/aicp_common/nccl_test:1.3
。 -
启动命令
:如下,各参数含义可参考附录内容。mpirun \ --allow-run-as-root \ -report-bindings \ -x NCCL_SOCKET_IFNAME=eth0 \ -x NCCL_IB_HCA=mlx5 \ -x NCCL_DEBUG=INFO \ -x NCCL_IB_DISABLE=0 \ -x NCCL_NVLS_ENABLE=1 \ -N 1 \ -n 2 \ --bind-to none \ -mca btl_base_verbose 100 \ -mca orte_base_help_aggregate 0 \ -mca btl_openib_allow_ib 1 \ -mca btl_openib_warn_default_gid_prefix 0 \ /opt/nccl-tests/build/all_reduce_perf -b 1G -e 1G -f 2 -g 8
-
其他参数保持默认,无需进行配置即可。
-
-
计算资源要求如下:
-
资源组
:根据实际情况,选择公共资源池或专属资源组,选择 8 卡的 GPU 资源,节点数量设置为2
。
-
-
-
等待分布式训练任务状态为
已完成
,点击任务名称/ID,进入其详情页面。 -
在任务详情页面,选择日志页签,即可查看到 2 个节点间进行的 NCCL all reduce 通信测试结果。
如下图所示,测试结果为:算法带宽为 439.182。
附录
创建分布式任务时,设定的启动命令,主要是使用 mpirun 命令启动一个 MPI 的并行计算程序,运行 NCCL 提供的 all_reduce_perf 性能测试工具,各参数的含义如下:
-
mpirun
:MPI 的命令行工具,用于运行 MPI 应用程序。 -
--allow-run-as-root
:表示允许以 root 用户身份运行 MPI 程序。 -
-report-bindings
:表示报告每个进程绑定的 CPU 核心信息,便于调试和性能分析。 -
-x NCCL_SOCKET_IFNAME=eth0
:用于设置环境变量NCCL_SOCKET_IFNAME
,指定使用的网络接口,此处为eth0
,用于网络通信。 -
-x NCCL_IB_HCA=mlx5
:用于设置环境变量NCCL_IB_HCA
,指定使用的 InfiniBand HCA(主机通道适配器),此处为mlx5
。 -
-x NCCL_DEBUG=INFO
:用于设置环境变量NCCL_DEBUG
,启用 NCCL 的调试信息,级别为INFO
,用于输出调试日志。 -
-x NCCL_IB_DISABLE=0
:用于设置环境变量NCCL_IB_DISABLE
,将其设置为0
表示启用 InfiniBand
。 -
-x NCCL_NVLS_ENABLE=1
:设置环境变量NCCL_NVLS_ENABLE
,启用NCCL NVLink
支持。 -
-N 1
:表示每个节点启动 1 个进程。 -
-n 2
:表示启动总共 2 个进程,数量与节点数相同。 -
--bind-to none
:表示不对进程进行 CPU 绑定,允许操作系统自由调度进程到任何可用的 CPU 核心。 -
-mca btl_base_verbose 100
:用于设置 Open MPI 的 MCA 参数,启用更详细的 BTL(Byte Transfer Layer)调试信息,用于性能分析。 -
-mca orte_base_help_aggregate 0
:表示禁用错误信息的聚合,确保每个进程都能单独输出错误信息,便于调试。 -
-mca btl_openib_allow_ib 1
:表示允许使用 InfiniBand 进行通信。 -
-mca btl_openib_warn_default_gid_prefix 0
:表示禁用警告,指示 Open MPI 使用默认的 GID 前缀。 -
/opt/nccl-tests/build/all_reduce_perf
:指定要执行的程序,这里是 NCCL 提供的性能测试工具all_reduce_perf
。 -
-b 1G -e 1G -f 2 -g 8
:均为传递给all_reduce_perf
的参数:-
-b 1G
:设置最小数据大小为 1GB。 -
-e 1G
:设置最大数据大小为 1GB。 -
-f 2
:设置数据量每次翻一倍。 -
-g 8
:设置每个进程的 GPU 数量为 8。
-
-
更多介绍可参考 NCCL 相关内容.