文档

安装ACCL库

更新时间:

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.4-1.3.2-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)挂载至容器内相同位置。

  • 本页导读 (1)
文档反馈