创建算子工程
简介
本节介绍如何通过MindStudio工具创建算子工程,创建完之后工具会自动生成算子工程目录及相应的文件模板,开发者可以基于这些模板进行算子开发。
操作步骤
- 进入算子工程创建界面。
- 首次登录MindStudio:在MindStudio欢迎界面中单击“New Project”,进入创建工程界面。
- 非首次登录MindStudio:在顶部菜单栏中选择 ,进入创建工程界面。
图1 创建工程界面
- 创建算子工程。
- 在左侧导航栏选择“Ascend Operator”,在右侧配置算子工程信息,配置示例如表1所示。
- 单击“Next”,在弹出的页面中配置算子相关信息,请参考表2进行配置。
表2 算子信息配置 参数
参数说明
示例
New Operator(算子创建方式)
Sample Template
表示基于样例创建算子工程。
选择此选项,下方显示AICPU、DSL、TIK三种算子实现方式。每种实现方式按照AI框架分类提供了算子样例,供用户选择。用户可以选择一个实现方式下的一个AI框架中的一个或多个算子创建算子工程。
- AICPU:AI CPU算子样例
- DSL:基于DSL方式实现的TBE算子样例
- TIK:基于TIK方式实现的TBE算子样例
四选一,当前默认选择“Sample Template”。
Empty Template
表示创建空的算子工程。
选择此选项,下方会显示“Operator Type”配置项,请在此处输入需要创建的算子的类型,请根据算子分析进行配置。
IR Template
表示基于IR定义模板创建算子工程。IR定义模板文件有json和Excel两种格式。
选择此选项,下方会显示“Template File”配置项,用户需要选择IR原型定义文件。
须知:- Ascend_IR_Template.json
请从Ascend-cann-toolkit安装目录/ascend-toolkit/latest/toolkit/python/site-packages/op_gen/json_template目录下获取IR定义的json模板。
- Ascend_IR_Template.xlsx
请从Ascend-cann-toolkit安装目录/ascend-toolkit/latest/toolkit/tools/msopgen/template目录下获取IR定义Excel模板。
请在模板文件中的“Op”页签修改自定义算子的IR定义。
IR定义的配置请参见IR定义配置说明。
Tensorflow Template
表示基于Tensorflow原型定义创建算子工程。
选择此方式创建算子工程,请先在安装MindStudio的服务器中下载Tensorflow源码。选择此选项后,下方会出现详细配置栏。
- Operator Path:请选择Tensorflow源码所在目录,为提升搜索效率,建议选择到tensorflow/core/ops目录。
- Operator Type:请配置为需要创建算子的Op Type。
Plugin Framework
算子所在模型文件的框架类型。选择“Sample Template”创建算子工程时不显示此配置项。
- MindSpore
- PyTorch
- TensorFlow
- Caffe
- ONNX
Caffe不支持Tensorflow Template创建算子工程。
MindSpore
Compute Unit
有以下两种选项,选择“Sample Template”创建算子工程时不显示此配置项。- AI Core/Vector Core:算子运行在AI Core或者Vector Core上,代表TBE算子
- AI CPU:算子运行在AI CPU上,代表AI CPU算子
“Plugin Framework”选择“MindSpore”, 仅支持选择“AI Core/Vector Core”。
AI Core/Vector Core
Unit Type
- 当“Compute Unit”选择“AI Core/Vector Core”时显示此配置项。
- 当选择“Sample Template”创建算子工程时不显示此配置项。
- “Plugin Framework”选择“MindSpore”时不显示此配置项。
请根据实际昇腾AI处理器BS9SX1A AI处理器版本下拉选择算子计算单元。
- 单击“Finish”,完成算子工程的创建。
若工作窗口已打开其他工程,会出现如图2所示提示。
- 选择“This Window”,则直接在当前工作窗口打开新创建的工程。
- 选择“New Window”,则新建一个工作窗口打开新创建的工程。
- 新建工程的默认存储路径为安装用户家目录的“AscendProjects”文件夹下。
- 若开发者需要自定义多个算子,需要在同一算子工程中进行实现和编译。可选中算子工程根目录,右键选择New > Operator 增加算子。
- 同一算子工程中,暂时不支持AI CPU算子和TBE算子同名。
- 目前Windows版本中,新建算子工程的代码中可能会出现无法识别的语义被红色波浪线标出,但不影响正常开发流程,用户可忽略该提示。
- 目前Windows版本中,支持实现算子原型文件和AI CPU算子代码实现的C++代码跳转功能。需要用户手动配置系统环境变量。
变量名为ASCEND_OPP_PATH,变量值为C:\Users\用户名\.mindstudio\huawei\adk\remote\CANN包版本号\opp
请以实际用户名和CANN包版本号修改变量值。
- 若使用远程进行算子开发,支持自动同步文件功能。
- 查看算子工程目录结构和主要文件。框架为TensorFlow、PyTorch、ONNX、Caffe时的工程目录结构和主要文件。
├── .idea ├── build //编译生成的中间文件 ├── cmake //编译相关公共文件存放目录 ├── cpukernel //AI CPU算子文件目录,TensorFlow TBE算子和PyTorch算子工程不会创建此目录 │ ├── impl //算子实现文件目录 │ │ ├── reshape_cust_kernel.cc //算子源文件 │ │ ├── reshape_cust_kernel.h //算子头文件 │ ├── op_info_cfg //算子信息库文件目录 │ │ ├── aicpu_kernel │ │ │ ├── reshape_cust.ini //算子信息定义文件 │ ├── CMakeLists.txt //编译规则文件,会被算子工程根目录中的CMakeLists.txt文件调用 │ ├── toolchain.cmake ├── framework //算子插件实现文件目录 │ ├── tf_plugin //存放tensorflow框架的算子插件文件及编译规则文件,若“Plugin Framework”为“PyTorch”,不会创建此目录 │ │ ├── tensorflow_add_plugin.cc //add为算子类型,TBE算子示例为add,AI CPU算子为reshape_cust │ │ ├── CMakeLists.txt //编译规则文件,会被上级目录中的CMakeLists.txt文件调用 │ ├── caffe_plugin //存放caffe框架的算子插件文件及编译规则文件,若“Plugin Framework”为“PyTorch”,不会创建此目录 │ │ ├── caffe_add_plugin.cc //add为算子类型,TBE算子示例为add,AI CPU算子为reshape_cust │ │ ├── CMakeLists.txt //编译规则文件,会被上级目录中的CMakeLists.txt文件调用 │ └── onnx_plugin //原始框架类型为ONNX时生成的算子适配插件代码所在目录 │ ├── CMakeLists.txt │ └── xxx_plugin.cc/ /算子适配插件实现文件 │ ├── CMakeLists.txt //编译规则文件,会被算子工程根目录中的CMakeLists.txt文件调 ├── op_proto //算子IR定义文件目录 │ ├── add.cc //add为算子类型,TBE算子示例为add,AI CPU算子为reshape_cust │ ├── add.h //add为算子类型,TBE算子示例为add,AI CPU算子为reshape_cust │ ├── CMakeLists.txt //编译规则文件,会被算子工程根目录的CMakeLists.txt文件调用 ├── scripts //工程相关脚本 ├── tbe //TBE算子文件目录,TensorFolw AI CPU算子工程不会创建此目录 │ ├── impl //算子实现文件目录 │ │ ├── add.py │ ├── op_info_cfg //算子信息库文件目录 │ │ ├── ai_core │ │ │ ├── {soc_version} │ │ │ │ ├── add.ini ├── .project //工程信息文件,包含工程类型、工程描述、运行目标设备类型以及CANN版本 ├── Add_READEME.md //介绍算子基本功能、基本信息和主要的算子工程 ├── CMakeLists.txt ├── MyOperator.iml
框架为MindSpore时的工程目录结构和主要文件。
├── .idea ├── mindspore │ ├── impl //算子实现文件目录 │ │ ├── cus_square_impl.py //实现算子和注册算子信息 py文件 ├── op_proto │ ├── cus_square.py //算子原语py文件 ├── .project //工程信息文件,包含工程类型、工程描述、运行目标设备类型以及CANN版本 ├── MyOperator.iml