集合通信库(Huawei Collective Communication Library,简称HCCL)是基于昇腾AI处理器的高性能集合通信库,提供单机多卡以及多机多卡间的数据并行、模型并行集合通信方案。
HCCL的软件架构如下图所示,分为“通信框架”、“通信算法”与“通信平台”三个模块,本源码仓中包含了其中紫色底纹所示的“通信框架”与“通信算法”两个模块的源码。
本源码仓提供了Mesh、Ring、Recursive Halving-Doubling(RHD)、PairWise四种拓扑算法的实现源码。
算法 | 描述 | 原理与耗时 |
---|---|---|
Mesh | Server内通信算法,是Mesh互联拓扑的基础算法。 | Mesh |
Ring | Server内和Server间通信算法,是基于环结构的并行调度算法。 Server间通信场景下,适用于小规模节点数(<32机,且非2幂)和中大规模通信数据量(>=256M)的场景。 |
Ring |
RHD | Server间通信算法,递归二分和倍增算法,当通信域内Server个数为2的整数次幂时,此算法具有较好的亲和性。 | RHD |
Pairwise | Server间通信算法,比较算法,仅用于AllToAll与AlltoAllV算子,适用于数据量较小(<=1M * RankSize)的场景。 | PairWise |
HCCL采用α–β模型(Hockney)进行性能评估,算法耗时计算用到的变量定义如下:
α:节点间的固定时延。
β:每byte数据传输耗时。
n:节点间通信的数据大小,单位为byte。
γ:每byte数据规约计算耗时。
p:通信域节点个数,影响通信步数。
其中单步传输并规约计算n byte数据的耗时为: D = α + nβ + nγ。
开发者可以基于本源码仓中的源码进行通信算法与通信算子的定制开发,详细的定制开发指引文档及相关API说明文档可参见HCCL源码定制开发指南。
HCCL仓关键目录如下所示:
├── src # HCCL相关源代码
| ├── domain
| | ├── collective_communication
| | | ├── algorithm # 通信算法相关源代码
| | | ├── framework # 通信框架相关源代码
├── test # 预留测试代码目录
├── docs # 集合通信描述文档
├── inc # 集合通信对外头文件
├── build.sh # HCCL源码编译入口脚本
HCCL支持源码编译,在源码编译前,请根据如下步骤完成相关环境准备。
获取CANN开发套件包。
请从Link获取配套版本的CANN开发套件包Ascend-cann-toolkit_<cann_version>_linux-<arch>.run
。
安装依赖
以下所列仅为cann-hccl源码编译用到的依赖,其中python、gcc、cmake的安装方法请参见配套版本用户手册的“安装依赖”章节。
python >= 3.7.0
gcc >= 7.3.0
cmake >= 3.16.0
nlohmann json头文件
HCCL源码编译过程中涉及Json文件的解析,编译前需要参见如下步骤下载依赖的nlohmann json头文件。
a. 单击Link,下载nlohmann json的头文件压缩包include.zip
。
b. 解压缩include.zip
。
将include.zip
解压缩到任意CANN开套件包安装用户具有读写权限的目录,并记录该目录位置,后续编译时会用到。
例如:
mkdir /home/nlohmann_json
cp include.zip /home/nlohmann_json
cd /home/nlohmann_json
unzip include.zip
安装CANN开发套件包。
执行安装命令时,请确保安装用户对软件包具有可执行权限。
使用默认路径安装
./Ascend-cann-toolkit_<soc_version>_linux_<arch>.run --install
若使用root用户安装,安装完成后相关软件存储在/usr/local/Ascend/ascend-toolkit/latest
路径下。
若使用非root用户安装,安装完成后相关软件存储在$HOME/Ascend/ascend-toolkit/latest
路径下。
指定路径安装
./Ascend-cann-toolkit_<soc_version>_linux_<arch>.run --install --install-path=${install_path}
安装完成后,相关软件存储在${install_path}指定路径下。
设置环境变量。
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source $HOME/Ascend/ascend-toolkit/set_env.sh
source ${install_path}/ascend-toolkit/set_env.sh
开发者可通过如下命令下载本仓源码:
git clone https://gitee.com/ascend/cann-hccl.git
HCCL提供一键式编译安装能力,进入本仓代码根目录,执行如下命令:
bash build.sh --nlohmann_path ${JSON头文件所在目录的绝对路径}
例如,环境准备时假设将nlohmann json头文件压缩包include.zip
解压在了/home/nlohmann_json
目录,则此处编译命令为:
bash build.sh --nlohmann_path /home/nlohmann_json/include
编译完成后会在output目录下生成CANN-hccl_alg-linux.x86_64.run
软件包或者CANN-hccl_alg-linux.aarch64.run
软件包。
安装编译生成的HCCL软件包,例如:
./output/CANN-hccl_alg-linux.x86_64.run
请注意:编译时需要将上述命令示例中的软件包名称替换为实际编译生成的软件包名称。
安装完成后,用户编译生成的HCCL软件包会替换已安装CANN开发套件包中的HCCL相关软件。
HCCL软件包安装完成后,开发者可通过HCCL Test工具进行集合通信功能与性能的测试,HCCL Test工具的使用流程如下:
工具编译。
使用HCCL Test工具前需要安装MPI依赖,配置相关环境变量,并编译HCCL Test工具,详细操作方法可参见配套版本的昇腾文档中心-HCCL性能测试工具使用指南中的“工具编译”章节。
执行HCCL Test测试命令,测试集合通信的功能及性能。
以1个计算节点,8个NPU设备,测试AllReduce算子的性能为例,命令示例如下:
# “/usr/local/Ascend”是root用户以默认路径安装的CANN软件安装路径,请根据实际情况替换
cd /usr/local/Ascend/ascend-toolkit/latest/tools/hccl_test
# 数据量(-b)从8KB到64MB,增量系数(-f)为2倍,参与训练的NPU个数为8
mpirun -n 8 ./bin/all_reduce_test -b 8K -e 64M -f 2 -d fp32 -o sum -p 8
工具的详细使用说明可参见昇腾文档中心-HCCL性能测试工具使用指南中的“工具使用”章节。
查看结果。
执行完HCCL Test工具后,回显示例如下:
若您想回退安装的自定义HCCL软件包,可执行如下命令。
./output/CANN-hccl_alg-linux.x86_64.run --rollback
说明:
回退命令仅支持回退到上一次安装HCCL软件包的状态,例如:
安装CANN开发套件包
-> 安装HCCL自定义软件包1
-> 安装HCCL自定义软件包2
,然后执行回退命令,则仅支持回退到安装HCCL自定义软件包1
的状态。
HCCL仓欢迎广大开发者体验并参与贡献,在参与社区贡献前,请参见cann-community了解行为准则,进行CLA协议签署,了解贡献的详细流程。
针对HCCL仓,开发者准备本地代码与提交PR时需要重点关注如下几点:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. Open source ecosystem
2. Collaboration, People, Software
3. Evaluation model