news 2026/5/9 21:41:11

CANN/HCCL集合通信库快速入门指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/HCCL集合通信库快速入门指南

快速入门

【免费下载链接】hccl集合通信库(Huawei Collective Communication Library,简称HCCL)是基于昇腾AI处理器的高性能集合通信库,为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl

本节以AllReduce算子为例,介绍其在单算子执行模式下的使用方式,帮助用户快速体验集合通信功能。

AllReduce算子介绍

AllReduce操作是将通信域内所有节点的输入数据进行归约操作后(支持sum、prod、max、min),再把结果发送到所有节点的输出buffer。

注意:每个rank只能有一个输入。

样例介绍

用户可以点击样例链接获取完整样例代码,该样例基于root节点信息创建通信域,在一个进程中管理一个AI Server,其中每个NPU设备由一个线程进行管理,主要包含以下功能点:

  • 设备检测,通过aclrtGetDeviceCount( )接口查询可用设备数量。

  • 将rank0作为root节点,通过HcclGetRootInfo( )接口生成root节点的rootInfo标识信息。

  • 基于rootInfo,在每个线程中通过HcclCommInitRootInfo( )接口初始化通信域。

  • 调用HcclAllReduce( ) 接口,将通信域内所有rank的输入数据进行相加后,再把结果发送到所有节点,并打印结果。

编译运行

在本样例代码目录下执行如下命令:

make make test

结果解析

每个rank的数据初始化为0~7,经过AllReduce操作后,每个rank的结果是所有rank对应位置数据的和(8个rank的数据相加)。

Found 8 NPU device(s) available rankId: 0, output: [ 0 8 16 24 32 40 48 56 ] rankId: 1, output: [ 0 8 16 24 32 40 48 56 ] rankId: 2, output: [ 0 8 16 24 32 40 48 56 ] rankId: 3, output: [ 0 8 16 24 32 40 48 56 ] rankId: 4, output: [ 0 8 16 24 32 40 48 56 ] rankId: 5, output: [ 0 8 16 24 32 40 48 56 ] rankId: 6, output: [ 0 8 16 24 32 40 48 56 ] rankId: 7, output: [ 0 8 16 24 32 40 48 56 ]

关键代码解析

  1. 将rank0作为root节点,生成rootInfo标识信息,主要包含:Device IP、Device ID等信息。此信息需广播至集群内所有rank用来初始化通信域。

    int rootRank = 0; ACLCHECK(aclrtSetDevice(rootRank)); // 生成root节点信息,各线程使用同一份rootInfo void *rootInfoBuf = nullptr; ACLCHECK(aclrtMallocHost(&rootInfoBuf, sizeof(HcclRootInfo))); HcclRootInfo *rootInfo = (HcclRootInfo *)rootInfoBuf; HCCLCHECK(HcclGetRootInfo(rootInfo));
  2. 申请内存,构造输入数据。

    // 设置当前线程操作的设备 ACLCHECK(aclrtSetDevice(ctx->device)); // 申请集合通信操作的Device内存 size_t count = ctx->devCount; size_t mallocSize = count * sizeof(float); ACLCHECK(aclrtMalloc(&sendBuf, mallocSize, ACL_MEM_MALLOC_HUGE_ONLY)); ACLCHECK(aclrtMalloc(&recvBuf, mallocSize, ACL_MEM_MALLOC_HUGE_ONLY)); // 申请 Host 内存用于存放输入数据,并将内容初始化为:0~7 void *hostBuf = nullptr; ACLCHECK(aclrtMallocHost(&hostBuf, mallocSize)); float *tmpHostBuff = static_cast<float *>(hostBuf); for (uint32_t i = 0; i < count; ++i) { tmpHostBuff[i] = static_cast<float>(i); } // 将Host侧输入数据拷贝到Device侧 ACLCHECK(aclrtMemcpy(sendBuf, mallocSize, hostBuf, mallocSize, ACL_MEMCPY_HOST_TO_DEVICE));
  3. 初始化通信域。

    HcclComm hcclComm; HCCLCHECK(HcclCommInitRootInfo(ctx->devCount, ctx->rootInfo, ctx->device, &hcclComm));
  4. 执行AllReduce集合通信算子。

    // 创建任务流 aclrtStream stream; ACLCHECK(aclrtCreateStream(&stream)); // 执行 AllReduce,将通信域内所有节点的 sendBuf 进行相加后,再把结果发送到所有节点的 recvBuf HCCLCHECK(HcclAllReduce(sendBuf, recvBuf, count, HCCL_DATA_TYPE_FP32, HCCL_REDUCE_SUM, hcclComm, stream)); // 阻塞等待任务流中的集合通信任务执行完成 ACLCHECK(aclrtSynchronizeStream(stream));
  5. 释放资源。

    ACLCHECK(aclrtFree(sendBuf)); // 释放 Device 侧内存 ACLCHECK(aclrtFree(recvBuf)); // 释放 Device 侧内存 ACLCHECK(aclrtFreeHost(hostBuf)); // 释放 Host 侧内存 ACLCHECK(aclrtDestroyStream(stream)); // 销毁任务流 HCCLCHECK(HcclCommDestroy(hcclComm)); // 销毁通信域 ACLCHECK(aclFinalize()); // 设备去初始化

【免费下载链接】hccl集合通信库(Huawei Collective Communication Library,简称HCCL)是基于昇腾AI处理器的高性能集合通信库,为计算集群提供高性能、高可靠的通信方案项目地址: https://gitcode.com/cann/hccl

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 21:40:20

HCCL集合通信库用户指南

HCCL集合通信库用户指南 【免费下载链接】hccl 集合通信库&#xff08;Huawei Collective Communication Library&#xff0c;简称HCCL&#xff09;是基于昇腾AI处理器的高性能集合通信库&#xff0c;为计算集群提供高性能、高可靠的通信方案 项目地址: https://gitcode.com/…

作者头像 李华
网站建设 2026/5/9 21:37:59

移动边缘计算中MoE框架如何破解元宇宙视频生成的质量与效率难题

1. 项目概述&#xff1a;当移动边缘计算遇上元宇宙视频生成最近和几个做移动应用和边缘计算的朋友聊天&#xff0c;大家不约而同地提到了一个共同的痛点&#xff1a;在移动设备或者靠近用户的边缘节点上&#xff0c;想要实时生成高质量的、风格一致的元宇宙视频内容&#xff0c…

作者头像 李华
网站建设 2026/5/9 21:35:33

梯度下降的困境与破局:指数加权平均到底在做什么?

&#x1f4c9; 梯度下降的困境与破局&#xff1a;指数加权平均到底在做什么&#xff1f;一、原生梯度下降&#xff1a;看似完美&#xff0c;实则脆弱1.1 平缓区域&#xff1a;梯度太小&#xff0c;更新慢到 “龟速”1.2 鞍点&#xff1a;梯度直接归零&#xff0c;彻底 “卡死”…

作者头像 李华
网站建设 2026/5/9 21:32:55

Arm Cortex-A725核心测试架构与低功耗技术解析

1. Arm Cortex-A725核心测试架构深度解析 在当今高性能计算与移动设备领域&#xff0c;处理器核心的可靠性和能效比已成为决定产品成败的关键因素。作为Armv9.2-A架构的最新力作&#xff0c;Cortex-A725核心通过创新的可测试性设计(DFT)和电源管理架构&#xff0c;为现代SoC设计…

作者头像 李华