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)。
下载安装资源
安装资源及下载链接如下:
安装资源
链接
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并未启用。
安装ACCL库
ACCL库目前提供RHEL、CentOS环境的RPM包,安装命令示例如下:
rpm -Uhv accl-cuda11.1-1.3.?-1.x86_64.rpm
安装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
使用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的基本功能,仅与性能调优相关。
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
RDMA管控服务
宿主侧的rdma-service提供了集群信息,ACCL可利用该信息进行拓扑感知的通信优化。 进行容器化训练时建议把管控服务提供的信息文件(/etc/sysconfig/rdma/cluster)挂载至容器内相同位置。
- 本页导读 (1)