news 2026/9/12 5:40:39

HcclReduce

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HcclReduce

HcclReduce

【免费下载链接】runner-imagesGitHub Actions runner images项目地址: https://gitcode.com/GitHub_Trending/ru/runner-images

接口速览

CANN 集合通信算子 HcclReduce,用于多 rank 数据归约。它把各 rank 同一位置的数据做运算,结果写入 root 的 recvBuf。

适用环境

  • Ascend 950PR/Ascend 950DT:支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
  • Atlas 训练系列产品:支持
  • Atlas 推理系列产品:不支持

[!NOTE] 针对 Atlas A2 训练系列产品/Atlas A2 推理系列产品,当前仅支持 Atlas 800T A2 训练服务器、Atlas 900 A2 PoD 集群基础单元、Atlas 200T A2 Box16 异构子框。

数据流与原理

每个 rank 在 sendBuf 的同一位置各存一个待归约的数值。集合通信算子收集所有 rank 对应位置的数据,按 op 指定的操作做归约。root 节点像考试中的"收卷老师",负责汇总所有答案。最终结果写回它自己的 recvBuf。

函数签名

HcclResult HcclReduce(void *sendBuf, void *recvBuf, uint64_t count, HcclDataType dataType, HcclReduceOp op, uint32_t root, HcclComm comm, aclrtStream stream)

前两个指针分别是源和目的 buffer,中间依次是元素个数、数据类型、操作类型。最后三个是 root、通信域和任务流。

参数逐项说明

参数名方向说明
sendBuf输入源数据 buffer 地址,位于 Device 侧。对齐要求见"硬性限制"。
recvBuf输出目的数据 buffer 地址,位于 Device 侧,归约结果写入此处。
count输入参与归约的元素个数,按 dataType 的元素计。例如 1 个 int32 参与则 count 为 1。
dataType输入归约数据类型(HcclDataType)。
Ascend 950PR/Ascend 950DT:int8、int16、int32、int64、uint64、float16、float32、float64、bfp16,其中 int64、uint64、float64 当前仅支持节点内通信。
Atlas A3 训练/推理系列产品:int8、int16、int32、int64、float16、float32、bfp16。
Atlas A2 训练/推理系列产品:int8、int16、int32、int64、float16、float32、bfp16,其中 int64 性能有一定劣化。
Atlas 训练系列产品:int8、int32、int64、float16、float32。
op输入归约操作类型,支持 sum、prod、max、min。
Ascend 950PR/Ascend 950DT 当前支持 sum、max、min。
Atlas A3 与 Atlas A2 训练/推理系列产品,当前版本 prod 操作不支持 int16、bfp16 数据类型。
root输入作为归约 root 的 rank id,取值为本通信域内合法的 rank id(0 到 rank 总数减 1)。
comm输入集合通信操作所在的通信域(HcclComm),由通信域初始化接口创建。
stream输入本 rank 使用的任务流(aclrtStream)。

返回值

成功返回 HCCL_SUCCESS,其他取值均表示失败。返回码类型 HcclResult 的完整定义以官方文档为准。

硬性限制

  • 所有 rank 的 count、dataType、op 必须相同,否则归约结果未定义
  • sendBuf 与 recvBuf 需按数据类型满足地址对齐:
    • int8 按 1 Byte 对齐。
    • int16、float16、bfp16 按 2 Byte 对齐。
    • int32、float32 按 4 Byte 对齐。
    • int64、uint64、float64 按 8 Byte 对齐。
  • Ascend 950PR/Ascend 950DT 上,int64、uint64、float64 当前仅支持节点内通信

端到端示例

// ← 申请 Device 内存 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); // ← 初始化通信域 uint32_t rankSize = 8; HcclComm comm; HcclCommInitRootInfo(rankSize, &rootInfo, deviceId, &comm); // ← 创建任务流 aclrtStream stream; aclrtCreateStream(&stream); // ← 核心 API 调用:将各 rank 对应位置数据求和,结果写入 root 的 recvBuf HcclReduce(sendBuf, recvBuf, count, HCCL_DATA_TYPE_FP32, HCCL_REDUCE_SUM, root, comm, stream); // ← 同步等待 aclrtSynchronizeStream(stream); // ← 释放全部资源 aclrtFree(sendBuf); // 释放 Device 侧内存 aclrtFree(recvBuf); // 释放 Device 侧内存 aclrtDestroyStream(stream); // 销毁任务流 HcclCommDestroy(comm); // 销毁通信域

易错提醒

  • 错误写法:各 rank 的 count 不一致 → 后果:归约结果未定义 → 正确做法:所有 rank 保持相同 count。
  • 错误写法:使用 int64 却只按 4 Byte 对齐 buffer → 后果:地址未对齐导致报错或数据错乱 → 正确做法:按 int64 的 8 Byte 对齐要求分配内存。
  • 错误写法:默认 root 一定是 0 → 后果:结果写入错误 rank → 正确做法:按实际 root 的 rank id 传入 root。

【免费下载链接】runner-imagesGitHub Actions runner images项目地址: https://gitcode.com/GitHub_Trending/ru/runner-images

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

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

大模型幻觉治理:根因分析与全链路防控体系实践

这里写自定义目录标题欢迎使用Markdown编辑器一、幻觉问题为什么如此顽固二、幻觉的分类:不同类型,不同解法三、源头治理:把幻觉扼杀在训练和配置环节四、RAG 链路治理:让模型"有据可依"五、生成后校验:给答…

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

测头安装角度与方向如何决定三坐标测量精度

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

Jupyter Notebook Tab 缩进失效:3 档修复让 Tab 键一键缩进

Jupyter Notebook Tab 缩进失效:3 档修复让 Tab 键一键缩进 【免费下载链接】notebook Jupyter Interactive Notebook 项目地址: https://gitcode.com/GitHub_Trending/no/notebook 你在 Jupyter Notebook 7 的代码单元格中按 Tab 键缩进代码,预期…

作者头像 李华
网站建设 2026/9/12 5:29:25

Kraken2 2.17.1 k2下载数据库报错排查全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 5:29:14

高校社团管理系统课设:从需求分析到数据库SQL全链路实战

简介:面向高校计算机相关专业学生与开发者,这是一份完整的软件工程课程设计资料包,以高校社团管理系统为主题,覆盖需求分析、系统设计、数据库SQL及设计报告等全套内容,适合用于毕设、课设或项目演示。压缩包共305个文…

作者头像 李华