You need to enable JavaScript to run this app.
导航

通过 RDMA 网络加速训练

最近更新时间2023.09.06 16:02:05

首次发布时间2022.01.12 17:46:40

RDMA(Remote Direct Memory Access)是新一代的网络传输技术,其诞生主要是为了解决网络传输中服务器端数据处理的延迟。在大规模的分布式训练任务中通过使用 RDMA 技术可以获得高吞吐、低延迟的网络通信,提升训练效率。本文将介绍如何在机器学习平台上基于 RDMA 的高性能 GPU 实例进行分布式训练。

相关概念
使用前提
  • 拥有 >= 1 个专有资源组的使用权限。
  • 队列中包含至少 2 台支持 RDMA 的高性能 GPU 实例
  • 参考验证镜像是否支持 RDMA验证镜像中 RDMA 的相关配置是否完备。
操作步骤
  1. 创建训练任务的基本步骤详见发起单机 / 分布式训练任务
  2. 根据用户自身选择的训练框架及其底层通信框架完成少量的代码修改,开启 RDMA 特性。
    • 使用 NCCL 作为通信框架
      • 适用的分布式训练框架:

      • 平台将预置如下环境变量,详见 NCCL 的环境变量说明

        # 如下 3 个变量的默认值不满足需求时可在训练脚本启动之前覆盖对应的值
        NCCL_DEBUG=${NCCL_DEBUG:-INFO}
        NCCL_IB_TIMEOUT=${NCCL_IB_TIMEOUT:-23}
        NCCL_IB_RETRY_CNT=${NCCL_IB_RETRY_CNT:-7}
        
        # 如下变量建议用户直接使用默认值,不要自行修改
        NCCL_IB_HCA=<平台根据实例规格自动注入>
        NCCL_IB_DISABLE=0 
        NCCL_IB_GID_INDEX=<平台根据实例规格自动注入>
        NCCL_SOCKET_IFNAME=<平台注入默认的VPC网卡>
        NCCL_IB_PCI_RELAXED_ORDERING=1 
        NCCL_TOPO_FILE=<平台根据实例规格自动注入>
        
    • 使用火山自研的通信优化框架
  3. 配置所属资源组时选择一个包含高性能 GPU(如 ml.hpcg1v.21xlarge、ml.hpcg1ve.21xlarge、ml.hpcpni2.28xlarge)的专有资源组,并且将相应的实例规格配置为高性能 GPU 的实例。
    alt
  4. 提交任务配置后等待任务状态到达运行中,此时训练任务使用 RDMA 进行分布式训练。
  5. 训练过程中支持查看 RDMA 相关的监控指标。