---
title: HCCL——昇腾高性能集合通信库-官方技术文章-昇腾社区
description: 本文介绍HCCL——昇腾高性能集合通信库
keywords: HCCL,昇腾高性能集合通信库,官方技术文章,昇腾社区,前言,什么是,的主要特点,的安装
url: https://www.hiascend.com/developer/techArticles/20240809-1?envFlag=1
section: (其他)
---

# HCCL——昇腾高性能集合通信库-官方技术文章-昇腾社区

URL: https://www.hiascend.com/developer/techArticles/20240809-1?envFlag=1
描述: 本文介绍HCCL——昇腾高性能集合通信库
关键词: HCCL,昇腾高性能集合通信库,官方技术文章,昇腾社区,前言,什么是,的主要特点,的安装

官方技术文章 [了解详情](https://www.hiascend.com/zh/developer/techArticles)

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

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

昇腾CANN

发表于: 2024/08/09

## 01 前言

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

## 02 什么是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 [了解详情](https://www.hiascend.com/software/cann)

## 03 HCCL的主要特点

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

1.高性能集合通信算法，提升大规模并行计算通信效率

HCCL会根据服务器内、服务器间的基础拓扑，自动选择合适的通信算法，包括常见的标准算法以及多种自研算法，也支持接入用户开发实现的通信算法。

2.计算通信统一硬化调度，降低调度开销，优化硬件资源利用率

专用硬件调度引擎和硬件通信原语，实现计算任务与通信任务全硬化调度，降低调度开销，精准控制系统抖动。

3.计算通信高性能并发，计算与通信并发流水执行，系统性能进一步提升

“归约”类集合通信操作（ AllReduce 、ReduceScatter 、Reduce）通过随路方式实现，不占用计算资源。计算通信任务并发执行，总执行时长大幅降低。

## 04 HCCL的安装

1.   下载HCCL

HCCL集合通信库集成在昇腾CANN开发套件包Ascend-cann-toolkit_{version}_linux-{arch}.run中，下载地址：LINK [了解详情](https://www.hiascend.com/zh/developer/download/community/result?module=cann)

2.   安装HCCL

HCCL的使用依赖昇腾软硬件环境的搭建，包括驱动、固件、CANN开发套件包以及AI框架等，开发者可参考上述链接中的配套文档安装和使用。

## 05 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, malloc_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, (HcclReduceOp)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());
```

## 06 HCCL算法简介

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

HCCL提供了Mesh、Ring、Recursive Halving-Doubling（RHD）、NHR（Nonuniform Hierarchical Ring）、NB（Nonuniform Bruck）、Pipeline和Pairwise几种拓扑算法用于Server内和Server间的集合通信。

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

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

HCCL会根据服务器内、服务器间的基础拓扑，自动选择合适的通信算法，各类算法的详细介绍可参考《集合通信用户指南 [了解详情](https://hiascend.com/document/redirect/CannCommunityHcclUg)》。

目前，昇腾已开放部分HCCL通信算法代码样例，并支持定制开发，开发者可以访问Gitee-cann-hccl [了解详情](https://gitee.com/ascend/cann-hccl)获取。

## 07 更多介绍

关于HCCL集合通信库的相关介绍就到这里，欢迎大家关注后续技术分享。如需获取更多学习资源请登录昇腾社区 [了解详情](https://www.hiascend.com/software/cann)。

更多CANN开放能力介绍：

《一文了解AOL算子加速库》 [了解详情](https://www.hiascend.com/zh/developer/techArticles/20240729-1)

《Ascend C 2.0全新升级，支撑大模型融合算子高效开发》 [了解详情](https://www.hiascend.com/zh/developer/techArticles/20240613-1)

《深度解读昇腾CANN小shape算子计算优化技术，进一步减少调度开销》 [了解详情](https://www.hiascend.com/zh/developer/techArticles/20240726-1)

《深度解读昇腾CANN模型下沉技术，提升模型调度性能》 [了解详情](https://www.hiascend.com/zh/developer/techArticles/20240715-1)

《深度解读昇腾CANN计算图优化技术，提升整网执行效率》 [了解详情](https://www.hiascend.com/zh/developer/techArticles/20240621-1)

《深度解读昇腾CANN多流并行技术，提高硬件资源利用率》 [了解详情](https://www.hiascend.com/zh/developer/techArticles/20240701-1)

《深度解读昇腾CANN内存复用技术，降低网络内存占用》 [了解详情](https://www.hiascend.com/zh/developer/techArticles/202407005-1)

本页内容
