ACCL(Alibaba Collective Communication Library)是一款高性能通信库,提供了AllReduce、 AllToAllV、Broadcast等常用集合操作接口以及点到点Send/Recv接口,为多机多卡训练提供高效的通信支持。本文为您介绍如何安装ACCL库。

背景信息

ACCL面向阿里云灵骏架构设计,通过算法与拓扑的深入协同来收获更好的通信性能,充分挖掘高性能RoCE网络的带宽效率、最大化分布式训练系统的可扩展性。

ACCL提供了简单易用的C++ API,语义与MPI等主流集合操作接口相近。ACCL提供了对PyTorch、Horovod 等深度学习框架以及数据并行、模型并行等主流并行训练模式的支持,便于深度学习用户快速使用。

ACCL的关键特性包括:
  • 异构拓扑感知,例如节点内PCIE与NVLink/NVSwitch、节点间多轨RDMA网络,分层混合算法设计,充分利用不同互连的带宽。
  • 端网协同选路,算法与拓扑协同设计实现无拥塞通信,支撑训练性能上规模可扩展。
  • 端侧RoCE LAG感知、在网多流负载均衡,多任务并发、资源争抢时保障整体吞吐。

安装ACCL库

说明 灵骏的计算节点默认已内置安装了ACCL库,通常场景下您无需手动安装ACCL库。

ACCL目前仅支持Linux环境,基本的运行依赖CUDA运行时。在PyTorch中使用ACCL时,需要安装ACCL库Torch ACCL插件两部分。若需使用高速RoCE网络,还要求环境中部署相关的RDMA库(如libibverbs)。

  1. 下载安装资源
    安装资源及下载链接如下:
    安装资源 链接
    ACCL库 http://eflops.oss-cn-beijing.aliyuncs.com/accl/centos7/accl-cuda11.1-1.3.1-1.x86_64.rpm
    Torch ACCL插件 http://eflops.oss-cn-beijing.aliyuncs.com/accl/torch/torch_accl-0.2.0-cp38-cp38-linux_x86_64.whl
    RDMA库 http://eflops.oss-cn-beijing.aliyuncs.com/accl/rdma/nic-libs-mellanox-rdma-5.2-2.x86_64.rpm
    说明 使用g++ 7.3.1编译,USE_CXX11_ABI并未启用。
  2. 安装ACCL库
    ACCL库目前提供RHEL、CentOS环境的RPM包,安装命令示例如下:
    rpm -Uhv accl-cuda11.1-1.3.?-1.x86_64.rpm
  3. 安装PyTorch ACCL插件
    ACCL通过插件的方式来对接PyTorch分布式训练,即作为torch.distributed的第三方后端。插件以Python Wheels包的形式提供,安装命令示例如下:
    pip install torch_accl-0.?.?-cp3?-cp3?-linux_x86_64.whl
    其中,不同的PyTorch 版本对应的ACCL插件版本不同,具体对应如下:
    PyTorch版本 Torch-ACCL插件版本
    1.8.x 0.1.0
    1.9.x 0.2.0
    1.10.x 0.3.0
  4. 使用PyTorch ACCL插件
    在PyTorch中使用ACCL需要对代码稍作修改,您需要引入Torch ACCL包并在分布式PyTorch初始化时指定后端为“accl”即可,示例代码如下:
    import torch.distributed as dist
    try:
      import torch_accl
    except ImportError:
      raise RuntimeError("Unable to import ACCL")
    ... ...
    dist.init_process_group(backend="accl")

性能调优

为充分发挥最佳性能,建议使能如下配置。
说明 以下依赖并不影响ACCL的基本功能,仅与性能调优相关。
  1. GPUDirect RDMA
    RDMA网络下使用GPUDirect RDMA可收获更好的通信效率,要求安装peer-memory内核驱动并关闭PCIe ACS(Access Control Service)于宿主环境中,前者可以通过如下命令快速验证是否加载:
    lsmod | grep nv_peer_mem
    禁用ACS可使用如下命令,其中$BDF为相应PCI桥的总线地址:
    setpci -s $BDF 0xf28.l=0x207f
  2. RDMA管控服务
    宿主侧的rdma-service提供了集群信息,ACCL可利用该信息进行拓扑感知的通信优化。 进行容器化训练时建议把管控服务提供的信息文件(/etc/sysconfig/rdma/cluster)挂载至容器内相同位置。