ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

HcclReduce 集合通信接口指南:快速上手与踩坑提示

2026/9/12 16:02:48 拓冰建站 浏览量
HcclReduce 集合通信接口指南:快速上手与踩坑提示 HcclReduce 集合通信接口指南快速上手与踩坑提示【免费下载链接】runner-imagesGitHub Actions runner images项目地址: https://gitcode.com/GitHub_Trending/ru/runner-images该接口是 HCCL 提供的集合通信算子把各 rank 的数据按指定操作归约后把结果写回 root 节点的指定 buffer适合分布式训练中的梯度聚合、结果汇总等场景。使用它最关键的前提所有 rank 传入的 count、dataType 与 op 必须完全相同。快速上手从申请内存到释放资源的最小流程示例覆盖一次完整的调用生命周期关键步骤各配一句注释// 申请 Device 侧内存sendBuf 存源数据recvBuf 接收归约结果 void *sendBuf nullptr; void *recvBuf nullptr; uint64_t count 8; size_t mallocSize count * sizeof(float); aclrtMalloc((void **)sendBuf, mallocSize, ACL_MEM_MALLOC_HUGE_ONLY); aclrtMalloc((void **)recvBuf, mallocSize, ACL_MEM_MALLOC_HUGE_ONLY); // 初始化通信域rankSize 为参与通信的 rank 总数 uint32_t rankSize 8; HcclComm hcclComm; HcclCommInitRootInfo(rankSize, rootInfo, deviceId, hcclComm); // 创建任务流 aclrtStream stream; aclrtCreateStream(stream); // 发起集合通信各 rank 对应位置相加结果落到 root 节点的 recvBuf HcclReduce(sendBuf, recvBuf, count, HCCL_DATA_TYPE_FP32, HCCL_REDUCE_SUM, rootRank, hcclComm, stream); // 阻塞等待任务流中的集合通信任务执行完成 aclrtSynchronizeStream(stream); // 释放资源Device 内存、任务流、通信域依次销毁 aclrtFree(sendBuf); // 释放 Device 侧内存 aclrtFree(recvBuf); // 释放 Device 侧内存 aclrtDestroyStream(stream); // 销毁任务流 HcclCommDestroy(hcclComm); // 销毁通信域接口参考签名与逐项参数含义HcclResult HcclReduce(void *sendBuf, void *recvBuf, uint64_t count, HcclDataType dataType, HcclReduceOp op, uint32_t root, HcclComm comm, aclrtStream stream)参数方向描述sendBuf输入源数据 buffer 的地址。recvBuf输出目的 buffer 的地址集合通信结果写回这里。count输入参与归约的数据个数例如只有一个 int32 数据参与时 count1。dataType输入归约的数据类型取值范围因设备而异见设备兼容速览。op输入归约操作类型整体支持 sum、prod、max、min个别设备有差异。root输入作为 reduce root 的 rank id。comm输入集合通信操作所在的通信域。stream输入本 rank 使用的任务流。返回值为 HcclResult 类型成功返回 HCCL_SUCCESS其他取值表示失败。使用约束地址对齐要求与参数一致性sendBuf 与 recvBuf 的地址必须满足对应数据类型的对齐要求数据类型对齐要求int81 Byteint16、float16、bfp162 Byteint32、float324 Byteint64、uint64、float648 Byte分布式侧的硬约束只有一条所有 rank 传入的 count、dataType、op 必须完全一致。设备兼容速览各设备支持情况一览设备系列是否支持备注Ascend 950PR / Ascend 950DT支持类型最全含 uint64、float6464 位类型仅限节点内通信[1]Atlas A3 训练/推理系列产品支持支持类型见脚注[2]Atlas A2 训练/推理系列产品支持仅限三种硬件形态int64 有性能劣化[3]Atlas 训练系列产品支持仅支持 int8、int32、int64、float16、float32Atlas 推理系列产品不支持无[1] 950PR/950DT 支持 int8、int16、int32、int64、uint64、float16、float32、float64、bfp16其中 int64、uint64、float64 当前仅支持节点内通信。 [2] A3 系列支持 int8、int16、int32、int64、float16、float32、bfp16。 [3] A2 系列支持类型与 A3 相同但仅适用于 Atlas 800T A2 训练服务器、Atlas 900 A2 PoD 集群基础单元、Atlas 200T A2 Box16 异构子框。 踩坑提示这几类限制最容易忽略950PR/950DT 没有 prod 操作只能用 sum、max、min。A3 与 A2 系列当前版本的 prod 不支持 int16、bfp16。A2 系列上 int64 归约的性能有劣化性能敏感的任务要留意。950PR/950DT 的 int64、uint64、float64 只支持节点内通信跨节点任务要换类型。延伸阅读相关接口与概念通信域生命周期HcclCommInitRootInfo、HcclCommDestroy。内存与流管理aclrtMalloc、aclrtFree、aclrtCreateStream、aclrtSynchronizeStream。类型定义HcclDataType、HcclReduceOp、HcclResult。核心概念集合通信、通信域、root rank。【免费下载链接】runner-imagesGitHub Actions runner images项目地址: https://gitcode.com/GitHub_Trending/ru/runner-images创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考