昇腾社区首页
中文
注册

算子编译运行流程

算子编译运行逻辑架构

一个完整的AI CPU算子包含四部分:算子原型定义、对应开源框架的算子适配插件、算子信息库定义和算子实现。

算子开发完成后在昇腾AI处理器BS9SX1A AI处理器硬件平台上的编译运行逻辑架构如图1图2所示。

图1 算子编译逻辑架构
图2 算子运行逻辑架构

其中,TFAdapter只有在基于Tensorflow框架进行训练时使用。

上图中代表开发人员在自定义AI CPU算子时需要实现的交付件。

开发交付件

说明

算子实现

包含算子类的定义及算子的计算实现。

算子适配插件

基于第三方框架(Tensorflow/Caffe)进行自定义算子开发的场景,开发人员完成自定义算子的实现代码后,需要进行适配插件的开发,将基于第三方框架的算子映射成适昇腾AI处理器BS9SX1A AI处理器的算子,将算子信息注册到GE中。基于第三方框架的网络运行时,首先会加载并调用算子适配插件信息,将第三方框架网络中的算子进行解析并映射成昇腾AI处理器BS9SX1A AI处理器中的算子。

算子原型库

算子原型定义规定了在昇腾AI处理器BS9SX1A AI处理器上可运行算子的约束,主要体现算子的数学含义,包含定义算子输入、输出、属性和取值范围,基本参数的校验和shape的推导。网络运行时,GE会调用算子原型库的校验接口进行基本参数的校验,校验通过后,会根据原型库中的推导函数推导每个节点的输出shape与dtype,进行输出tensor的内存的分配。

算子信息库

算子信息库主要体现算子在昇腾AI处理器BS9SX1A AI处理器上物理实现的限制,包括算子的输入输出name以及dtype等信息。网络运行时,AI CPU Engine会根据算子信息库中的算子信息做基本校验,并进行算子匹配。

若存在相同OpType的TBE算子与AI CPU算子,GE会优先匹配TBE算子进行执行。

算子编译流程

AI CPU算子的编译详细流程如图3所示。

图3 AI CPU算子编译流程
  1. 将开源框架网络模型下发给GE。

    若基于Tensorflow框架进行在线训练,首先会调用TF Adapter适配接口生成TF原始网络模型,并下发给GE;若使用AscendCL应用进行模型推理,则直接将原始网络模型下发给GE。

    注:网络模型的拓扑图后续简称为图。

  2. GE调用算子插件,将原始网络模型中的算子映射为适配昇腾AI处理器BS9SX1A AI处理器的算子,从而将原始开源框架图解析为适配昇腾AI处理器BS9SX1A AI处理器的图。
  3. 调用算子原型库校验接口进行基本参数的校验,校验通过后,会根据原型库中的推导函数推导每个节点的输出shape与dtype,进行输出tensor的内存的分配。
  4. GE向整图下发给AI CPU Engine,AI CPU Engine读取算子信息库,匹配算子支持的format,并将format返回给GE。
  5. GE根据图中数据将图拆分为子图并下发给AI CPU Engine,AI CPU Engine进行子图优化,并将优化后子图返回给GE。
  6. GE将子图进行合并,并对合并后的整图进一步优化。
  7. GE进行图编译,包含内存分配、流资源分配等,并向AI CPU Engine发送genTask请求,AI CPU Engine返回算子的taskinfo信息给GE,图编译完成之后生成适配昇腾AI处理器BS9SX1A AI处理器的模型。

算子运行流程

AI CPU的算子运行流程如图4所示。

图4 AI CPU算子运行流程
  1. GE下发算子执行请求。
  2. Runtime将对应的task请求下发给AI CPU Schedule。
  3. AI CPU Schedule进行task调度,调用算子计算接口。
  4. AI CPU算子库解析并实例化算子实现,并执行Compute函数完成算子执行。