---
title: 【CANN文档速递04期】揭秘昇腾CANN算子开发-官方技术文章-昇腾社区
description: 本期我们主要带您了解CANN自定义算子的类型，编译、运行逻辑架构，以及算子的开发流程等，让您对CANN算子有宏观的了解。
keywords: CANN,文档速递,揭秘昇腾,算子开发,官方技术文章,昇腾社区,自定义算子类,算子编译
url: https://www.hiascend.com/developer/techArticles/20220513-1?envFlag=1
section: (其他)
---

# 【CANN文档速递04期】揭秘昇腾CANN算子开发-官方技术文章-昇腾社区

URL: https://www.hiascend.com/developer/techArticles/20220513-1?envFlag=1
描述: 本期我们主要带您了解CANN自定义算子的类型，编译、运行逻辑架构，以及算子的开发流程等，让您对CANN算子有宏观的了解。
关键词: CANN,文档速递,揭秘昇腾,算子开发,官方技术文章,昇腾社区,自定义算子类,算子编译

官方技术文章 [了解详情](https://www.hiascend.com/zh/developer/techArticles)

【CANN文档速递04期】揭秘昇腾CANN算子开发

【CANN文档速递04期】揭秘昇腾CANN算子开发

实战经验

发表于: 2022/05/13

昇腾开发者在进行神经网络模型训练或者推理的过程中，往往会遇到以下场景：

·将第三方开源框架网络模型转换为适配昇腾AI处理器的模型时，遇到了CANN尚未支持的算子。

·已有算子的性能无法满足开发者的要求。

·开发者想修改已有算子的计算逻辑。

此时我们就需要考虑进行自定义算子的开发，本期我们主要带您了解CANN自定义算子的类型，编译、运行逻辑架构，以及算子的开发流程等，让您对CANN算子有宏观的了解。

## CANN自定义算子类型

CANN自定义算子有两种类型：TBE算子与AI CPU算子，两种算子的区别如下所示。

其中AI CPU算子的实现相对简单，TBE算子的实现较复杂，但性能更优。若用户为了快速打通模型执行流程，可选择自定义AI CPU算子，从而提升调测效率。功能调通后，后续在性能调测过程中再将AI CPU算子切换到TBE算子实现。

## 算子编译

下面我们了解下CANN算子的编译流程，如下图所示：

1.   第三方框架网络模型经过Parser解析后，转换为中间态的IR (Intermediate Representation) Graph。

2.   GE接收IR Graph后对图进行准备、拆分、子图优化等操作。

3.   子图优化过程中，会进行算子的匹配选择，优先由FE基于TBE算子信息库判断算子支持度，若TBE不支持，则由AI CPU Engine基于AI CPU算子信息库判断是否支持。

4.   GE将拆分后的子图合并、优化，并进行编译，编译过程中会生成算子的Task信息，最终生成可执行的om模型。

## 算子运行

首先GE下发算子执行请求给Runtime，然后Runtime会判断算子的Task类型，若是TBE算子，则将算子执行请求下发到AI Core上执行；若是AI CPU算子，则将算子执行请求下发到AI CPU上执行。

## 算子开发流程

浅紫色底纹的为算子开发交付件，交付件介绍如下：

·算子原型：算子对外API，定义算子输入、输出、属性以及算子的shape推导逻辑。

·算子实现代码：描述算子的运算逻辑。针对TBE算子，为python文件；针对AI CPU算子，为C++文件。

·算子信息库：描述算子在昇腾AI处理器上的实现限制，包含算子输入输出的data type、format以及shape信息。

·算子适配插件：将第三方框架的算子映射为适配昇腾AI处理器的算子。

## 算子工程创建方式

开发者可自行选择算子开发方式，并基于如上规则在对应目录下进行交付件的开发。

## 更多介绍

了解更详细的内容，可以登录昇腾社区https://www.hiascend.com/ [了解详情](https://www.hiascend.com/)，阅读相关文档：

昇腾CANN文档中心致力于为开发者提供更优质的内容和更便捷的开发体验，助力CANN开发者共建AI生态。任何意见和建议都可以在昇腾社区反馈，您的每一份关注都是我们前进的动力。

本页内容
