RDMA(Remote Direct Memory Access)是新一代的网络传输技术,其诞生主要是为了解决网络传输中服务器端数据处理的延迟。在大规模的分布式训练任务中通过使用 RDMA 技术可以获得高吞吐、低延迟的网络通信,提升训练效率。本文将介绍如何在机器学习平台上基于 RDMA 的高性能 GPU 实例进行分布式训练。
适用的分布式训练框架:
平台将预置如下环境变量,详见 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=<平台根据实例规格自动注入>
export DMLC_ENABLE_RDMA=1 export DMLC_INTERFACE=eth0
运行中
,此时训练任务使用 RDMA 进行分布式训练。