RDMA:使用高性能网络进行分布式训练
更新时间:2026-10-21
概述
本文档介绍在百舸环境下使用 RDMA 网络进行分布式训练的方法。
RDMA(Remote Direct Memory Access)是新一代网络通信技术,允许计算机之间直接进行内存到内存的数据传输,而不需要经过操作系统或中央处理器处理。在大规模分布式训练中,使用 RDMA 可以有效降低网络传输中服务器端数据处理的延迟,实现高吞吐、低延迟的网络通信,提升训练效率。
NCCL 是 NVIDIA 的集合通信库,能实现 Collective 通信和点对点通信。NCCL 内部已经实现 RDMA 通信,同时 NCCL 可以根据环境中的网卡类型和拓扑关系,自行选择最优的通信路径,目前主流分布式训练框架都已支持 NCCL。
前提条件
- 已创建百舸集群,且集群中至少有 2 台具有 RDMA 网络的 GPU 实例。
- GPU 实例镜像中包含 OFED 和 NVIDIA 驱动。推荐使用百度智能云提供的 GPU 镜像,该镜像已包含 OFED 驱动,无需手动安装。
- 业务镜像中需要使用 NCCL 依赖库。推荐使用 NVIDIA GPU Cloud(NGC)提供的基础镜像。NGC 提供的基础镜像通常包含 NCCL 依赖库,并且已经预先配置和优化常用的深度学习框架和工具。使用 NGC 基础镜像可以简化设置和配置过程,并确保能够顺利使用 NCCL 进行 GPU 加速计算和深度学习任务。
提交任务开启RDMA
- 登录 百舸AI计算平台AIHC控制台
- 进入 分布式训练 列表页面,点击 创建任务, 进入创建任务的流程
- 在 创建任务 > 资源配置 模块,选择 开启RDMA 即可,开启后系统将训练实例自动调度任务到支持RDMA网络的节点上,启用RDMA加速
平台预置 NCCL 环境变量
开启 RDMA 后,百舸平台基于百度智能云内部大规模分布式训练经验,在任务运行时会自动注入推荐的 NCCL 环境变量,无需手动填写。您也可以根据业务场景自定义调整。
强烈建议您使用平台预置系统内的 NCCL 默认变量,可以获得较优性能和较高的稳定性。
A800/A100 NCCL 预置环境变量
| 环境变量 | 网络类型 |
|---|---|
NCCL_IB_HCA=动态值 |
RoCE/IB |
NCCL_SOCKET_IFNAME=动态值 |
RoCE/IB |
NCCL_IB_GID_INDEX=动态值 |
RoCE/IB |
NCCL_TOPO_FILE=动态值 |
RoCE/IB(仅 BCC 形态自动注入) |
NCCL_IB_TIMEOUT=22 |
RoCE/IB |
NCCL_IB_QPS_PER_CONNECTION=8 |
RoCE/IB |
NCCL_DEBUG=INFO |
RoCE/IB |
NCCL_IB_ADAPTIVE_ROUTING=1 |
IB |
NCCL_DEBUG_SUBSYS=INIT,ENV,GRAPH |
RoCE/IB |
H800 NCCL 预置环境变量
| 环境变量 | 网络类型 |
|---|---|
NCCL_IB_HCA=动态值 |
RoCE/IB |
NCCL_SOCKET_IFNAME=动态值 |
RoCE/IB |
NCCL_IB_GID_INDEX=动态值 |
RoCE/IB |
NCCL_TOPO_FILE=动态值 |
RoCE/IB(仅 BCC 形态自动注入) |
NCCL_IB_TIMEOUT=22 |
RoCE/IB |
NCCL_IB_QPS_PER_CONNECTION=1 |
RoCE/IB |
NCCL_DEBUG=INFO |
RoCE/IB |
NCCL_IB_ADAPTIVE_ROUTING=1 |
RoCE/IB |
NCCL_DEBUG_SUBSYS=INIT,ENV,GRAPH |
RoCE/IB |
NCCL 环境变量说明
NCCL 关键环境变量说明如下表所示,更多 NCCL 环境变量说明,请参见 NCCL。
| 环境变量 | 说明 |
|---|---|
NCCL_IB_HCA |
环境中的 RDMA 网卡。 |
NCCL_SOCKET_IFNAME |
指定用于通信的 IP 接口。 |
NCCL_IB_GID_INDEX |
设置 RDMA 通信优先级。 |
NCCL_IB_DISABLE |
是否关闭 RDMA 通信:0 代表 NCCL 使用 IB/RoCE 传输;1 代表禁止 NCCL 使用 IB/RoCE 传输,此时 NCCL 将退回到使用 IP 套接字。 |
NCCL_DEBUG |
NCCL 日志级别,此变量通常用于调试。 |
NCCL_IB_TIMEOUT |
网络断点重连超时时间,计算公式:4.096 µs * 2 ^ timeout。 |
NCCL_IB_RETRY_CNT |
网络断点重连重试次数。 |
NCCL_DEBUG_FILE |
日志输出文件。 |
NCCL_IB_QPS_PER_CONNECTION |
每个 IB queue pair 的并发连接数。 |
NCCL_IB_ADAPTIVE_ROUTING |
NVIDIA NCCL 是否使用 InfiniBand 自适应路由功能的环境变量,默认是 0 或 false,配置为 1 或 true 表示开启自适应路由。 |
NCCL_TOPO_FILE |
网络拓扑文件,NCCL 通信库会依据网络拓扑文件构建拓扑关系。 |
评价此篇文章
