---
title: 全新开发
description: "全新开发，指CANN算子库中不包含相应的算子，需要先完成自定义算子的开发，再进行第三方框架的适配。可以查看《算子库(https://www.hiascend.com/document/detail/zh/canncommercial/900/API/aolapi/operatorlist_00001.html)》，判断算子库是否包含对应算子。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/others/tbeaicpudevg/atlasopdev_10_0015.html
sourcePath: /source/zh/canncommercial/900/others/tbeaicpudevg/atlasopdev_10_0015.html
indexId: 3c8fcc898c94c66c5fd94f5c516f0c94f1582dcb16a4ce668c5c53c412c25c7373
---
# 全新开发

#### 场景描述

全新开发，指CANN算子库中不包含相应的算子，需要先完成自定义算子的开发，再进行第三方框架的适配。可以查看《算子库(https://www.hiascend.com/document/detail/zh/canncommercial/900/API/aolapi/operatorlist_00001.html)》，判断算子库是否包含对应算子。

若用户开发的自定义算子仅用于构造Ascend Graph或者通过AscendCL进行单算子调用，则无需进行第三方框架的适配（即如下开发流程中的“算子适配插件开发”）。


#### 开发流程

全新开发场景下，开发的流程如下所示：

图1 命令行方式全新开发算子流程


**表1 算子开发步骤详解**

| 序号 | 步骤 | 描述 | 参考 |
| --- | --- | --- | --- |
| 1 | 选择算子开发方式 | 进行算子分析，选择通过什么方式进行算子开发，例如TBE DSL、TBE TIK还是AI CPU。 | 选择算子开发方式 |
| 2 | 环境准备 | 准备算子开发及运行验证所依赖的开发环境与运行环境。 | 环境准备 |
| 3 | 工程创建 | 创建算子开发工程，有以下几种实现方式： 基于msopgen工具进行开发，会自动生成算子工程及代码模板。 基于自定义算子样例工程进行开发，开发者需要自己创建算子相关实现文件，或者基于已有样例进行修改。 | 工程创建 |
| 4 | 算子原型定义 | 算子原型定义规定了在AI处理器上可运行算子的约束，主要体现算子的数学含义，包含定义算子输入、输出、属性和取值范围，基本参数的校验和shape的推导，原型定义的信息会被注册到Graph Engine的算子原型库中。离线模型转换时，GE会调用算子原型库的校验接口进行基本参数的校验，校验通过后，会根据原型库中的推导函数推导每个节点的输出shape与dtype，进行输出tensor的静态内存的分配。 | 算子原型定义 |
| 5 | 算子代码实现 | 针对TBE算子，需要实现算子的计算逻辑及调度。 TBE算子的实现文件为Python文件，包含TBE DSL与TBE TIK两种实现方式。 针对AI CPU算子，需要进行算子类的定义以及算子的计算实现。 AI CPU算子的实现文件为C++文件。 | 算子代码实现（TBE DSL） 算子代码实现（TBE TIK） 算子代码实现（AI CPU） |
| 6 | 算子信息库定义 | 算子信息库文件用于将算子的相关信息注册到算子信息库中，包括算子的输入输出dtype、format以及输入shape信息。离线模型转换时，FE会根据算子信息库中的算子信息做基本校验，判断是否需要为算子插入合适的转换节点，并根据算子信息库中信息找到对应的算子实现文件进行编译，生成算子二进制文件进行执行。 | TBE算子信息库 |
| 7 | 算子适配插件开发 | 基于第三方框架（TensorFlow/Caffe）进行自定义算子开发的场景，开发人员需要进行插件的开发，将基于第三方框架的算子映射成适配AI处理器的算子。 | 算子适配 |
| 8 | 算子编译部署 | 编译自定义算子工程，生成自定义算子安装包并进行自定义算子包的安装，将自定义算子部署到算子库。 | 算子编译部署 |
| 9 | 算子ST测试 | 系统测试（System Test），在真实的硬件环境中，验证算子的正确性。 | 算子ST测试 |
| 10 | 算子网络测试 | 将自定义算子加载到网络模型中进行运行验证。 | 算子网络测试 |
