创建算子工程
简介
本节介绍如何通过MindStudio工具创建算子工程,创建完之后工具会自动生成算子工程目录及相应的文件模板,开发者可以基于这些模板进行算子开发。
配置Python SDK
算子开发之前,开发者需要参考Python SDK设置章节设置算子工程依赖Python库。
操作步骤
- 进入算子工程创建界面。
- 创建算子工程。
- 在左侧导航栏选择“Ascend Operator”,在右侧配置算子信息,配置示例如表1所示。
表1 算子信息配置 参数
参数说明
示例
CANN Version
当前激活的CANN版本,可通过单击右侧“Change”进行变更,具体功能使用请参见切换/激活CANN包。
选择当前CANN的版本号
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/python/site-packages/op_gen/json_template目录下获取IR定义的json模板。
- Ascend_IR_Template.xlsx
请从Ascend-cann-toolkit安装目录/ascend-toolkit/latest/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算子。
AI Core/Vector Core
Unit Type
请根据实际昇腾AI处理器版本下拉选择算子计算单元。
- 当“Compute Unit”选择“AI Core/Vector Core”时显示此配置项。
- 当选择“Sample Template”创建算子工程时不显示此配置项。
- “Plugin Framework”选择“MindSpore”时不显示此配置项。
选择当前昇腾AI处理器的版本
- 单击“Next”,在弹出的页面中配置算子工程信息,如表2所示。
表2 工程信息配置 参数
参数说明
示例
Project name
工程名称,用户自行配置。
名称开头和结尾必须是数字或字母,只能包含字母、数字、中划线和下划线,且长度不超过64个字符。
untitled
Project location
工程默认保存路径,用户可自定义。(对于首次使用MindStudio的用户,该项默认为“$HOME/MindstudioProjects”。)
保持默认
More Settings
“Module name”:模块名,默认与“Project name”一致。
保持默认
“Content root”:根目录下路径。
“Module file location”:模块文件路径。
单击“Project format”右侧选框,出现下拉菜单。- .idea(directory-based):创建项目的时候创建一个.idea项来保存项目的信息,默认选项。
- .ipr(file-based):项目配置文件来保存项目的配置信息。
- 单击“Create”,完成算子工程的创建。
若工作窗口已打开其他工程,会出现确认提示。
- 选择“This Window”,则直接在当前工作窗口打开新创建的工程。
- 选择“New Window”,则新建一个工作窗口打开新创建的工程。
- 若开发者需要自定义多个算子,需要在同一算子工程中进行实现和编译。可选中算子工程根目录,右键选择“New > Operator”增加算子。
- 同一算子工程中,暂时不支持AI CPU算子和TBE算子同名。
- 参考步骤1在已有的MindSpore AI CPU算子工程中快捷新建算子工程时,仅支持新建MindSpore框架的AI CPU算子工程。
- 目前Windows版本中,新建算子工程的代码中可能会出现无法识别的语义被红色波浪线标出,但不影响正常开发流程,用户可忽略该提示。
- 目前Windows版本中,支持实现算子原型文件和AI CPU算子代码实现的C++代码跳转功能。需要用户手动配置系统环境变量。
变量名为ASCEND_OPP_PATH,变量值为C:\Users\用户名\.mindstudio\huawei\adk\remote\CANN包版本号\opp,请以实际用户名和CANN包版本号修改变量值。
- 若使用远程进行算子开发,支持自动同步文件功能。
- 基于“Sample Template”中非MindSpore框架的样例创建算子工程时,若算子计算单元为Atlas 推理系列产品或Atlas A2 训练系列产品系列的算子计算单元,在op_info_cfg算子信息库文件目录下仅生成“ascendxxx”目录。
- 基于“Empty Template”、“IR Template”和“Tensorflow Template”方式创建算子工程时,将根据已选择“Unit Type”的算子计算单元在op_info_cfg算子信息库文件目录下生成对应目录。
- 在左侧导航栏选择“Ascend Operator”,在右侧配置算子信息,配置示例如表1所示。
- 查看算子工程目录结构和主要文件。框架为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文件调用 ├── op_tiling //算子tiling实现文件目录,不涉及tiling实现的算子无需关注 │ ├── CMakeLists.txt ├── scripts //工程相关脚本 ├── tbe //TBE算子文件目录,TensorFolw AI CPU算子工程不会创建此目录 │ ├── impl //算子实现文件目录 │ │ ├── add.py │ ├── op_info_cfg //算子信息库文件目录 │ │ ├── ai_core │ │ │ ├── {soc_version} │ │ │ │ ├── add.ini │ │ ├── vector_core │ │ │ ├── {soc_version} │ │ │ │ ├── add.ini ├── .project //工程信息文件,包含工程类型、工程描述、运行目标设备类型以及CANN版本 ├── Add_READEME.md //介绍算子基本功能、基本信息和主要的算子工程 ├── CMakeLists.txt ├── MyOperator.iml
框架为MindSpore时的工程目录结构和主要文件。
├── .idea ├── build //编译生成的中间文件 ├── cmake //编译相关公共文件存放目录 ├── cpukernel //AI CPU算子文件目录 TBE算子工程不会创建此目录 │ ├── impl //算子实现文件目录 │ │ ├── cus_square_kernel.cc //算子源文件 │ │ ├── cus_square_kernel.h //算子头文件 │ ├── op_info_cfg //算子信息库文件目录 │ │ ├── aicpu_kernel │ │ │ ├── cus_square.ini //算子信息定义文件 │ ├── CMakeLists.txt //编译规则文件,会被算子工程根目录中的CMakeLists.txt文件调用 │ ├── toolchain.cmake ├── framework //算子插件实现文件目录 │ ├── mindspore │ │ ├── impl //算子实现文件目录 │ │ │ ├── cus_square_impl.py //实现算子和注册算子信息 py文件 │ ├── op_proto │ │ ├── cus_square.py //算子原语py文件 ├── .project //工程信息文件,包含工程类型、工程描述、运行目标设备类型以及CANN版本 ├── cus_square_READEME.md //介绍算子基本功能、基本信息和主要的算子工程 ├── MyOperator.iml