【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验

一、自定义算子工程介绍与创建

自定义算子工程是一个包含用户编写的host侧和kerne|侧算子实现文件的,用于编译和安装自定义算子run包的工程框架。

CANN软件包中提供了工程创建工具msopgen,开发者可以输入算子原型定义文件生成Ascend C算子开发工程。
需要编写AddCustom算子的原型定义json文件以及运行以下代码

${INSTALL_DIR}/python/site-packages/bin/msopgen gen -i $HOME/sample/add_custom.json -c ai_core-<soc_version> -lan cpp -out $HOME/sample/AddCustom

其中对这些命令进行解释:
${INSTALL_DIR}为CANN软件安装后文件存储路径,根据实际环境进行替换。
-i:指定算子原型定义文件add_custom.json所在路径,请根据实际情况修改。
-c:ai_core-<soc_version>代表算子在AI Core上执行,<soc_version>为昇腾AI处理器的型号。比如我的AI处理器型号为910B,那么我这里写Ascend910B。
-lan: 参数cpp代表算子基于Ascend C编程框架,使用C++编程语言开发。
-out:生成文件所在路径,可配置为绝对路径或者相对路径,并且工具执行用户对路径具有可读写权限。若不配置,则默认生成在执行命令的当前路径。

使用msopgen工具生成AddCustom算子的开发命令之后,会在$HOME/sample目录下生成算子工程目录AddCustom,工程中包含算子实现的模板文件,编译脚本等,如下所示:

AddCustom
├── build.sh         // 编译入口脚本
├── cmake 
│   ├── config.cmake
│   ├── util        // 算子工程编译所需脚本及公共编译文件存放目录
├── CMakeLists.txt   // 算子工程的CMakeLists.txt
├── CMakePresets.json // 编译配置项
├── framework        // 算子插件实现文件目录,单算子模型文件的生成不依赖算子适配插件,无需关注
├── op_host                      // host侧实现文件
│   ├── add_custom_tiling.h    // 算子tiling定义文件
│   ├── add_custom.cpp         // 算子原型注册、shape推导、信息库、tiling实现等内容文件
│   ├── CMakeLists.txt
├── op_kernel                   // kernel侧实现文件
│   ├── CMakeLists.txt   
│   ├── add_custom.cpp        // 算子核函数实现文件 
├── scripts                     // 自定义算子工程打包相关脚本所在目录

二、自定义算子工程样例演示

我是在ModelArts环境下创建了一个notebook,镜像为:

4d729b0eae05fa0aa7b24724f92ad10.png

创建好之后,进入终端,下载samples代码仓库:
进入到op_dev目录,这个目录就是一个自定义算子交付目录

cd samples/cplusplus/level1_single_api/4_op_dev/6_ascendc_custom_op/acl_invocation/op_dev

然后通过msopgen这个工具生成,生成之前可以运行以下命令,看看自己的AI处理器型号:
npu-smi info
我的结果如下,Ascend910B:
image.png

然后接着,你要找到${INSTALL_DIR}这个位置,也就是CANN软件安装后文件存储路径,我的为:/usr/local/Ascend/ascend-toolkit/7.0.RC1,默认是路径可能都是这个,

接着就可以运行msopgen命令:

/usr/local/Ascend/ascend-toolkit/7.0.RC1/python/site-packages/bin/msopgen gen -i add_custom.json -c ai_core-Ascend910B2 -lan cpp -out ./custom_opp

显示生成完成:

image.png

可以看到新生成的custom_opp文件夹里生成了以下文件:
image.png

我们主要关注CMakePresets.json里面“ASCEND_CANN_PACKAGE_PATH”是否和你安装的CANN路径对应,一般默认都是对应的。

下面进行自定义算子工程编译:

./build.sh

报错:
image.png

显示没有这个头文件:register/tilingdata_base.h

设置环境变量 ASCEND_TENSOR_COMPILER_INCLUDE:

export ASCEND_TENSOR_COMPILER_INCLUDE=/usr/local/Ascend/ascend-toolkit/7.0.RC1/aarch64-linux/include

然后执行./build.sh

编译部署成功:
image.png

在build_out文件夹下可以看到已经生成了run包
image.png

接下来部署自定义算子包:

./custom_opp_euleros_aarch64.run

image.png

看到SUCCESS说明部署成功!

以上就是Ascend C自定义算子工程的演示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/229060.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSP forEach 标签遍历map集合

之前我们说了 普通list 单纯按数量循环 bean类型list的遍历方式 那么 我们forEach标签 也能循环map语法非常简单&#xff0c;和循环list基本是一样的 我们直接上jsp代码 <% page import"java.util.Map" %> <% page import"java.util.HashMap" %…

Java 基础学习(二)运算符与分支流程控制

1 运算符 1.1 运算符概述 1.1.1 运算符概述 运算符是一种告诉计算机执行特定的数学或逻辑等操作的符号。Java运算符号包括&#xff1a;数学运算符、关系运算符、逻辑运算符、赋值运算符号、字符串连接运算符。计算机本质上只能处理数字&#xff0c;处理数字的最常见的方式就…

Zabbix 6 详细安装部署教程

目录 一、安装 MySQL 数据库 二、安装 zabbix 监控平台 三、编辑配置文件 四、启动服务 五、zabbix-web 安装 zabbix web 出图展示乱码问题解决方案 zabbix 的安装部署非常简单&#xff0c;官方提供了四种安装途径&#xff0c;分别是二进制 rpm 包安装方式、源码安装方…

Linux后台运行jar包

Linux后台运行jar包 方式一 命令如下&#xff1a; java -jar /data/tools/jar/demo.jar注&#xff1a;/data/tools/jar&#xff1a;指定jar包所在位置&#xff0c;否则要在jar包所在位置运行改命令&#xff1b;当前ssh窗口被锁定&#xff0c;可按CTRL C打断程序运行&#xf…

idea下载与安装,以及创建一个项目写HelloWorld

1.idea下载 Download IntelliJ IDEA – The Leading Java and Kotlin IDE (jetbrains.com) Ultimate为旗舰版&#xff0c;功能全面&#xff0c;插件丰富&#xff0c;按年收费。 Community为社区版&#xff0c;免费试用&#xff0c;功能相对而言不是很丰富&#xff0c;但是不影…

全网日志智能聚合及问题根因分析

1 日志关联分析的挑战 随着各行各业数字化转型的不断深入&#xff0c;网络承载了人们日常生活所需的政务、金融、娱乐等多方面的业务系统&#xff0c;已经成为影响社会稳定运行、关系国计民生的重要基础设施资源。哪怕网络发生及其微小的故障&#xff0c;也可能带来难以估量的…

embeddings

“embeddings”的中文翻译是“嵌入”或“嵌入向量”。在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;通常被称为“词向量”或“词嵌入”&#xff0c;它是表示词汇或令牌的一种方式&#xff0c;通过将这些词汇或令牌映射到一个向量空间中的点&#xff0c;以捕捉它们…

Spring之AOP理解与应用(更新中)

1. AOP的认识 面向切面编程&#xff1a;基于OOP基础之上新的编程思想&#xff0c;OOP面向的主要对象是类&#xff0c;而AOP面向的主要对象是切面&#xff0c;在处理日志、安全管理、事务管理等方面有非常重要的作用。AOP是Spring中重要的核心点&#xff0c;AOP提供了非常强…

中小型工厂如何进行数字化转型

随着科技的快速发展和市场竞争的日益激烈&#xff0c;中小型工厂面临着诸多挑战。为了提高生产效率、降低成本、优化资源配置&#xff0c;数字化转型已成为中小型工厂发展的必经之路。中小型工厂如何进行数字化转型呢&#xff1f; 一、明确数字化转型目标 在进行数字化转型之前…

Java第二十章

一.创建线程 1.继承Thread类 Thread类是java.lang 包中的一个类&#xff0c;从这个类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建立Thread实例。Thread类中常用的两个构造方法如下: public Thread()://创建一个新的线程对象。 public Thread(String threa…

面试题:MySQL自增主键为什么不是连续的?

文章目录 前言一、自增值存储说明二、自增值修改机制三、 自增值修改时机四、 导致自增值不连续的原因4.1 唯一键冲突4.2 事务回滚4.3 批量写库操作 前言 提出这个问题&#xff0c;是因为在工作中发现 mysql 中的 user 表的 id 默认是自增的&#xff0c;但是数据库存储的结果却…

LINUX入门篇【11】---进程篇【3】---进程优先级,进程切换,进程调度

前言&#xff1a; 有了前面知识点的铺垫&#xff0c;本篇我们将围绕进程的三个方面来展开&#xff0c;即进程优先级&#xff0c;进程切换以及进程调度的问题&#xff0c;这里的进程调度其实本质就是CPU是如何去调度进程的。 进程优先级&#xff1a; 优先级的概念&#xff1a…