HCCL——昇腾高性能集合通信库

集合通信定义了一系列标准信息交换接口,解决并行计算时不同进程之间的通信问题。集合通信广泛用于AI、HPC等大规模计算通信场景。以深度学习数据并行训练场景为例,训练任务将不同训练样本分配给多个加速节点并行训练,在每一个训练迭代(或若干迭代)之后,模型梯度数据需要在所有节点间进行同步(如求和操作)。在大规模集群中进行数据同步是非常耗时的,集合通信技术有效解决了这个问题,比如采用Allreduce操作,让所有计算节点并行、高效、有序地执行信息交换,可大幅提升数据同步效率,减少时间开销。

1 什么是HCCL

HCCL(Huawei Collective Communication Library)是基于昇腾AI处理器的高性能集合通信库,提供单机多卡以及多机多卡间的集合通信能力,支持大模型的数据并行、模型并行、专家并行、pipeline并行、序列并行等多种加速方案。

HCCL支持AllReduce、Broadcast、Allgather、ReduceScatter、AlltoAll等通信原语,支持Ring、Mesh、Halving-Doubling(HD)等通信算法,支持基于HCCS、RoCE和PCIe等链路/协议实现集合通信,未来还将支持更多链路/协议。

HCCL集合通信库作为昇腾AI异构计算架构CANN的重要组成部分,为昇腾超大集群训练/推理提供了基础通信能力。

来源:https://www.hiascend.com/software/cann

2 HCCL的主要特点

HCCL主要用于需要多个NPU协同工作的高性能计算任务,例如深度学习训练、大规模数据分析和科学计算等。通过使用HCCL,这些应用可以更有效地利用NPU资源,缩短计算时间,提高工作效率。

  1. 高性能集合通信算法,提升大规模并行计算通信效率
    HCCL会根据服务器内、服务器间的基础拓扑,自动选择合适的通信算法,包括常见的标准算法以及多种自研算法,也支持接入用户开发实现的通信算法。
  2. 计算通信统一硬化调度,降低调度开销,优化硬件资源利用率
    专用硬件调度引擎和硬件通信原语,实现计算任务与通信任务全硬化调度,降低调度开销,精准控制系统抖动。
  3. 计算通信高性能并发,计算与通信并发流水执行,系统性能进一步提升
    “归约”类集合通信操作( AllReduce 、ReduceScatter 、Reduce)通过随路方式实现,不占用计算资源。计算通信任务并发执行,总执行时长大幅降低。

3 HCCL的安装

  1. 下载HCCL
    HCCL集合通信库集成在昇腾CANN开发套件包Ascend-cann-toolkit_{version}_linux-{arch}.run中,下载地址:LINK
  2. 安装HCCL
    HCCL的使用依赖昇腾软硬件环境的搭建,包括驱动、固件、CANN开发套件包以及AI框架等,开发者可参考上述链接中的配套文档安装和使用。

4 HCCL通信原语及API调用

在分布式系统中,各个节点间往往存在大量的集合通信需求,比如Allreduce、Broadcast、Allgather、ReduceScatter等则是分布式系统中比较底层的消息通信行为。

AllReduce是将所有节点的input相加(或其他操作)后,再把结果发送到所有节点的output。

Broadcast用于实现一对多的传输,将root节点的数据广播到其他节点。

AllGather将group内所有节点的输入按照rank id重新排序,然后拼接起来,再将结果发送到所有节点的输出。

ReduceScatter操作是将所有节点的input相加(或其他操作),再把结果按照rank编号均匀分散到各个rank的输出buffer,每个进程拿到其他进程1/ranksize份的数据进行归约操作。

HCCL支持AllReduce、Broadcast、AllGather、Scatter、ReduceScatter、Reduce、AlltoAll和AlltoAllV等通信原语,并通过C++或Python形式为上述消息通信行为提供了操作接口,用于快速实现分布式能力。

  • C++语言接口用于实现单算子模式下的框架适配,实现分布式计算能力。对于PyTorch框架,HCCL单算子API已嵌入到Ascend Extension for PyTorch后端代码中,PyTorch用户直接使用PyTorch原生集合通信API,即可实现分布式能力。
  • Python语言接口用于实现TensorFlow网络基于NPU实现执行分布式优化。

以HCCL C++接口为例,开发者实现集合通信功能的典型开发流程为:

  1. 首先进行集群信息配置,创建并初始化集合通信域,通信域是包含一组参与通信的NPU设备以及设备对应的通信进程。
  2. 然后调用集合通信算子实现集合通信操作(比如AllReduce、Broadcast、Allgather等)。
  3. 最后释放相关资源、销毁集合通信域。

//设备资源初始化
ACLCHECK(aclInit(NULL));
//指定集合通信操作使用的设备
ACLCHECK(aclrtSetDevice(dev_id));
//创建任务stream
aclrtStream stream;
ACLCHECK(aclrtCreateStream(&stream));
//获取集群配置文件
char* rank_table_file = getenv("RANK_TABLE_FILE");
//根据集群配置文件初始化集合通信域
HcclComm hccl_comm;
HCCLCHECK(HcclCommInitClusterInfo(rank_table_file, rank_id, &hccl_comm));
//申请请集合通信操作的内存
ACLCHECK(aclrtMalloc((void**)&sendbuff, mal1oc_kSize, ACL_MEM_MALLOC_HUGE_FIRST));
ACLCHECK(aclrtMalloc((void**)&recvbuff, malloc_kSize, ACL_MEM_MALLOC_HUGE_FIRST));
//执行集合通信操作
HCCLCHECK(HcclAllReduce((void *)sendbuff, (void*)recvbuff, count, (HcclDataType)dtype, (HcclReduce0p)op_type,hccl_comm, stream));
//等待stream中集合通信任务执行完成
ACLCHECK(aclrtSynchronizeStream(stream));
//销毁集合通信内存资源
ACLCHECK(aclrtFree(sendbuff));
ACLCHECK(aclrtFree(recvbuff));
//销毁集合通信域
HCCLCHECK(HcclCommDestroy(hccl_comm));
//销毁任务流
ACLCHECK(aclrtDestroyStream(stream));
//重置设备
ACLCHECK(aclrtResetDevice(dev_id));
//设备去初始化
ACLCHECK(aclFinalize());

HCCL算法简介

从上面的介绍,我们知道,HCCL提供了各类集合通信原语/接口,比如AllReduce、Broadcast、Allgather等。每个集合通信原语,都有多套算法实现。例如Broadcast,由于应用场景的不同,参与通信的通信实体数量、每次发送的数据量各不相同等,导致难以有一种集合通信算法在各种条件下都是最优的,因此通常一个集合通信原语会有多套集合通信算法实现。

HCCL提供了Mesh、Ring、Recursive Halving-Doubling(RHD)、NHR(Nonuniform Hierarchical Ring)、NB(Nonuniform Bruck)、Pipeline和Pairwise几种拓扑算法用于Server内和Server间的集合通信。HCCL会根据服务器内、服务器间的基础拓扑,自动选择合适的通信算法。

Mesh算法是Server内通信算法,为FullMesh互联拓扑内的基础算法,任意两个NPU之间可以直接进行数据收发。每个NPU并发的使用多路HCCS链路从对端读取或者写入数据,使双工互联链路的双向带宽同时得到利用。

Ring算法是Server内和Server间通信算法,为基于环结构的并行调度算法。所有的NPU以环形相连,每张卡都有左手卡与右手卡,一个负责数据接收,一个负责数据发送,循环完成梯度累加,再循环做参数同步。Ring算法适用于“星型”或“胖树”拓扑互联,其特点是通过Ring环将所有NPU设备的单端口双工链路串联起来。

目前,昇腾已开放部分HCCL通信算法代码样例,并支持定制开发,开发者可以访问Gitee-cann-hccl获取。

6 更多介绍

关于HCCL集合通信库的相关介绍就到这里,欢迎大家关注后续技术分享。如需获取更多学习资源请登录昇腾社区

更多CANN开放能力介绍:

一文了解AOL算子加速库

Ascend C 2.0新特性详解,支撑大模型融合算子高效开发

深度解读昇腾CANN小shape算子计算优化技术,进一步减少调度开销

深度解读昇腾CANN模型下沉技术,提升模型调度性能

深度解读昇腾CANN计算图优化技术,提升算法计算效率

深度解读昇腾CANN多流并行技术,提高硬件资源利用率

深度解读昇腾CANN内存复用技术,降低网络内存占用

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值