当前位置: 首页 > news >正文

CANN/hccl:自定义通信算子 - 点对点通信

自定义通信算子 - 点对点通信

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

样例介绍

本样例展示如何基于 HCCL 通信编程接口开发 Send/Recv 点对点通信算子,包含以下功能点:

  1. 基于 AICPU 通信引擎实现点对点通信算子
  2. 支持自定义算子包的独立构建、独立部署

目录结构

├── CMakeLists.txt # 编译/构建配置文件 ├── op_host/ │ ├── send.cc # HcclSendCustom 算子实现源文件 │ ├── recv.cc # HcclRecvCustom 算子实现源文件 │ ├── load_kernel.cc # AICPU Kernel 在 Host 侧的加载逻辑 │ ├── launch_kernel.cc # AICPU Kernel 在 Host 侧的下发逻辑 │ └── utils.cc # 工具模块 ├── op_kernel_aicpu/ │ ├── libp2p_aicpu_kernel.json # AICPU Kernel 算子描述文件 │ ├── aicpu_kernel.cc # AICPU Kernel 实现逻辑 │ └── exec_op.cc # AICPU 算子编排逻辑 ├── inc/ │ ├── hccl_custom_p2p.h # 自定义 send/recv 算子接口头文件 │ ├── common.h # 公共类型头文件 │ └── log.h # 日志宏定义 ├── scripts/ │ └── hccl_custom_p2p_check_cfg.xml # 签名配置文件 └── testcase/ ├── main.cc # 样例实现源文件 └── Makefile # 编译/构建配置文件

自定义算子编译工程依赖 HCCL 代码仓中的 cmake 配置和编译脚本 build.sh,其中:

  • cmake 包含 CMake 配置、MakeSelf 打包配置等内容
  • build.sh 是工程编译入口

一、环境准备

1. 环境要求

本样例支持以下昇腾产品:

  • Atlas A3 训练系列产品 / Atlas A3 推理系列产品
  • Atlas A2 训练系列产品

2. 安装 CANN Toolkit 开发套件包

参考 昇腾文档中心-CANN软件安装指南,安装最新版本 CANN Toolkit 开发套件包。

3. 配置环境变量

设置CANN环境变量:

# 默认路径安装,以root用户为例 source /usr/local/Ascend/cann/set_env.sh # 默认路径安装,以非root用户为例 source $HOME/Ascend/cann/set_env.sh # 指定路径安装 source ${install_path}/cann/set_env.sh

二、编译自定义算子包

hccl代码仓提供了自定义算子编译打包工程,该工程依赖代码仓中的如下文件:

├── build.sh # hccl代码仓根目录编译工程入口 ├── CMakeLists.txt # hccl代码仓根目录编译/构建配置文件 ├── cmake/ │ ├── config.cmake # CMake变量定义 │ ├── func.cmake # CMake函数定义 │ ├── package.cmake # 签名、打包函数定义 │ └── makeself_custom.cmake # MakeSelf打包逻辑 └── scripts/ ├── custom/install.sh # 自定义算子包安装脚本 └── sign/add_header_sign.py # AICPU 算子包签名脚本

因此,开发者首先需要下载hccl代码仓,然后在代码仓根目录下,执行build.sh进行编译,通过custom_ops_path指定自定义算子工程路径:

# 下载hccl代码仓 git clone https://gitcode.com/cann/hccl.git # 编译自定义算子包 bash build.sh --vendor=cust --ops=p2p --custom_ops_path=./examples/04_custom_ops_p2p

其中:

  • --vendor参数表示自定义算子标识
  • --ops参数表示自定义算子名称
  • --custom_ops_path参数表示自定义算子工程路径

三、安装自定义算子包

自定义算子安装包在./build_out目录下,通过--install参数进行安装:

./build_out/cann-hccl_custom_p2p_linux-<arch>.run --install --install-path=<ascend_cann_path>

其中:

  • <arch>是当前编译环境的系统架构
  • <ascend_cann_path>是可选参数,表示 CANN 软件包安装目录。默认为ASCEND_CUSTOM_OPP_PATHASCEND_OPP_PATH环境变量设置的路径

自定义算子包安装信息如下:

  • 头文件:${ASCEND_HOME_PATH}/opp/vendors/cust/include/hccl_custom_p2p.h
  • 动态库:${ASCEND_HOME_PATH}/opp/vendors/cust/lib64/libhccl_custom_p2p.so
  • AICPU 算子描述文件:${ASCEND_HOME_PATH}/opp/vendors/cust/aicpu/config/libp2p_aicpu_kernel.json
  • AICPU 算子包:${ASCEND_HOME_PATH}/opp/vendors/cust/aicpu/kernel/aicpu_hccl_custom_p2p.tar.gz
  • 安装脚本:${ASCEND_HOME_PATH}/opp/vendors/cust/scripts/install.sh

四、执行自定义算子

1. 关闭 AICPU 算子验签功能

# 查询AI CPU算子用户自定义验签能力使能状态 # False:关闭用户自定义验签能力 # True:开启用户自定义验签能力 for i in {0..7}; do npu-smi info -t custom-op-secverify-enable -i $i; done # 设置AI CPU算子用户自定义验签能力使能状态,使能开关 for i in {0..7}; do npu-smi set -t custom-op-secverify-enable -i $i -d 1; done # 查询AI CPU算子验签模式 # 0:关闭验证,不验签 # 1:华为证书,使用华为证书验签(默认) # 2:客户自定义证书 # 3:华为证书、客户自定义证书 # 4:开源社区证书 # 5:华为证书、开源社区证书 # 6:客户自定义证书、开源社区证书 # 7:华为证书、客户自定义证书、开源社区证书 for i in {0..7}; do npu-smi info -t custom-op-secverify-mode -i $i; done # 设置AI CPU算子验签模式,关闭验签 for i in {0..7}; do npu-smi set -t custom-op-secverify-mode -i $i -d 0; done

2. 修改 AICPU 白名单

AICPU 默认只加载白名单中配置的包,用户自行开发的 AICPU 算子包需配置到白名单中:

# 编译文件,以 root 用户默认安装路径为例 vim /usr/local/Ascend/cann/conf/ascend_package_load.ini

将下列内容追加到ascend_package_load.ini中:

name:aicpu_hccl_custom_p2p.tar.gz install_path:2 optional:true package_path:opp/vendors/cust/aicpu/kernel load_as_per_soc:false

各字段含义如下:

  • name: tar 包文件名
  • install_path: 安装到 Device 侧的路径
  • optional: 默认为 true
  • package_path: tar 包在Host侧CANN Toolkit包下的相对路径
  • load_as_per_soc: 是否每种芯片类型都加载

3. 编译样例

examples/04_custom_ops_p2p/testcase代码目录下执行如下命令:

# 编译样例 make

4. 执行样例

# 运行样例 make test # 或直接执行样例二进制 export LD_LIBRARY_PATH=${ASCEND_HOME_PATH}/opp/vendors/cust/lib64:${LD_LIBRARY_PATH} ./send_recv

5. 样例结果示例

偶数节点的sendBuf内容初始化为该节点的 DeviceId,然后将数据发送至下一奇数节点,因此各个奇数节点接收到的是上一节点的 DeviceId。

Found 8 NPU device(s) available rankId: 1, output: [ 0 0 0 0 0 0 0 0 ] rankId: 3, output: [ 2 2 2 2 2 2 2 2 ] rankId: 5, output: [ 4 4 4 4 4 4 4 4 ] rankId: 7, output: [ 6 6 6 6 6 6 6 6 ]

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

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

http://www.jsqmd.com/news/782954/

相关文章:

  • CANN/GE添加控制输入API
  • 如何通过数据分析功能解锁数据深度洞察?
  • 如何高效使用Mermaid Live Editor:5个提升技术文档质量的专业技巧
  • 从三星泄密事件看企业AI安全:LLM数据风险与社会中心AI框架
  • XHS-Downloader:小红书内容采集与批量处理的专业级解决方案
  • 购买域名多少钱一个?大家一般都在哪个平台购买?
  • CANN/atvoss加法运算符API文档
  • Oracle数据库开发最佳实践:构建高效、可维护的应用程序
  • CANN/pyasc Gatherb数据收集API
  • IEDM 2013深度解析:相变存储器的可靠性挑战与产业转向
  • 别把 SFT 里的 `packing` 当成白捡吞吐的开关:TRL 里 `bfd`、`bfd_split`、`wrapped` 真正卖掉的不是同一种东西
  • 62.RTOS调度原理
  • CANN/AMCT大模型Cast量化
  • CANN/sip信号处理加速库CalOperation
  • CANN/hixl LLM-DataDist数据结构
  • 6G时代零接触式普适AI即服务架构:融合区块链与DRL的自动化AI交付
  • cann/runtime其他接口API文档
  • 顶会论文模块复现与二次创新:二次创新:将 DETR 的查询式检测头蒸馏进 YOLOv11,打造混合式 Anchor-free 头
  • 模型诊断:从冲突集到命中集,构建高效故障定位系统
  • CANN/catlass Gemm/Block类模板概述
  • DeepEP V2 为什么值得做 MoE 的团队现在就关注?真正先拖慢吞吐的,不是专家数,而是 EP 通信还在抢 SM
  • 如何高效实现魔兽争霸3现代化兼容?WarcraftHelper实战指南
  • CANN/driver容器共享配置查询
  • CANN/cannbot-skills 模型审查专家代理
  • GD32中的DMA使用教程
  • HCOMM通信算子NPU环境测试
  • Kemptide (Phosphate Acceptor Peptide);LRRASLG
  • 【算法】小白也能懂 · 第 2 节:数组双指针技巧(快慢指针、左右指针)
  • CANN/atvoss向量算子库概述
  • 别再盲目自学 CTF!零基础专属入门完整路线,看完直接上手实战