NCCL(NVIDIA Collective Communications Library)是 NVIDIA 开发的一个用于在多个 GPU 之间进行高效通信的库,它可以在实例内或实例间实现多个 GPU 的快速通信。

本文旨在介绍如何在智算平台上进行 NCCL 测试。

操作步骤

  1. 参考前文内容,创建分布式训练任务,在弹出的创建训练任务页面,按如下要求配置各项参数。

    • 任务信息要求如下:

      • 任务类型:选择 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

  2. 等待分布式训练任务状态为已完成,点击任务名称/ID,进入其详情页面。

  3. 在任务详情页面,选择日志页签,即可查看到 2 个节点间进行的 NCCL all reduce 通信测试结果。

    如下图所示,测试结果为:算法带宽为 439.182。

    faq nccl 1

附录

创建分布式任务时,设定的启动命令,主要是使用 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 相关内容.