通信算子编译部署
开发者完成通信算子开发之后,需部署到运行环境上进行功能验证。
了解自定义算子编译打包工程
HCCL代码仓提供了自定义算子编译打包工程,开发者可参考自定义Send/Receive通信算子样例(Link)进行开发,其目录结构如下:
├── build.sh # HCCL代码仓根目录编译工程入口
├── CMakeLists.txt # HCCL代码仓根目录编译/构建配置文件
├── cmake/ # CMake函数
│ ├── config.cmake
│ ├── func.cmake
│ ├── package.cmake
│ └── makeself_custom.cmake
├── scripts/
│ ├── custom/
│ │ └── install.sh # 自定义算子包安装脚本
│ └── sign/
│ └── add_header_sign.py # AI CPU算子包签名脚本
└── examples/04_custom_ops_p2p # 自定义算子工程目录
├── CMakeLists.txt # 自定义算子编译/构建配置文件
├── op_host/
│ ├── send.cc # HcclSendCustom算子实现源文件
│ ├── recv.cc # HcclRecvCustom算子实现源文件
│ ├── load_kernel.cc # AI CPU Kernel在Host侧的加载逻辑
│ └── launch_kernel.cc # AI CPU Kernel在Host侧的下发逻辑
├── op_kernel_aicpu/
│ ├── libp2p_aicpu_kernel.json # AI CPU Kernel算子描述文件
│ ├── aicpu_kernel.cc # AI CPU Kernel实现逻辑
│ └── exec_op.cc # AI CPU 算子编排逻辑
├── inc/
│ ├── hccl_custom_p2p.h # 自定义Send/Receive算子接口头文件
│ ├── common.h # 公共类型头文件
│ └── log.h # 日志宏定义
├── scripts/
│ └── hccl_custom_p2p_check_cfg.xml # 签名配置文件
└── testcase/
├── main.cc # 测试样例源文件
└── Makefile # 编译/构建配置文件
建议开发者基于上述目录结构存放代码文件,需重点关注如下内容:
- 自定义算子头文件放在inc文件夹。
- Host侧实现代码放在op_host文件夹,AI CPU侧实现代码放在op_kernel_aicpu文件夹。
- CMakeLists.txt内容根据实际需要进行调整。
编译自定义算子包
- 设置CANN软件环境变量。
source /usr/local/Ascend/cann/set_env.sh“/usr/local/Ascend”为CANN软件root用户的默认安装路径,如果使用普通用户安装,或指定路径安装,请自行替换。
- 下载HCCL代码仓。
git clone https://gitcode.com/cann/hccl.git
- 编译自定义算子包。
bash build.sh --vendor=<vendor> --ops=<ops> --custom_ops_path=<ops_project_path>
其中:
- <vendor>:自定义算子包标识信息,用户自定义,保持唯一。
- <ops>:自定义算子名称,用户自定义,保持唯一。
- <ops_project_path>:自定义算子工程根目录,例如了解自定义算子编译打包工程中的./examples/04_custom_ops_p2p目录,可配置为绝对路径或相对路径。
编译完成后,会在当前目录的build_out目录下生成自定义算子安装包cann-hccl_custom_<ops>_linux-<arch>.run,其中:- <ops>:表示编译自定义算子包时通过--ops参数指定的算子名称。
- <arch>:表示当前编译环境的系统架构。
部署自定义算子包
执行下列命令进行安装:
./build_out/cann-hccl_custom_<ops>_linux-<arch>.run --install
自定义算子包安装信息如下:
- 头文件:${ASCEND_HOME_PATH}/opp/vendors/<vendor>/include
- 动态库:${ASCEND_HOME_PATH}/opp/vendors/<vendor>/lib64
- AI CPU算子信息库文件:${ASCEND_HOME_PATH}/opp/vendors/<vendor>/aicpu/config
- AI CPU算子包:${ASCEND_HOME_PATH}/opp/vendors/<vendor>/aicpu/kernel
- 安装脚本:${ASCEND_HOME_PATH}/opp/vendors/<vendor>/scripts/install.sh
其中<vendor>为编译自定义算子包时通过--vendor参数指定的算子标识。
父主题: 通信算子开发