算子信息库定义
简介
需要通过配置算子信息文件,将算子的相关信息注册到算子信息库中,算子信息库主要体现算子在昇腾AI处理器上的具体实现规格。
针对TBE算子,算子信息库包括算子支持的输入输出dtype、format以及输入shape等信息;针对AI CPU算子,算子信息库包括算子输入输出的name,支持的dtype、format等信息。
网络运行时,图编译器会根据算子信息库中的算子信息做基本校验,并进行算子匹配。
TBE算子信息库
进入“tbe/op_info_cfg/ai_core/soc_version”目录,配置算子信息库文件“add.ini”。
soc_version为当前昇腾AI处理器的版本。
开发者需要基于MindStudio自动生成的add.ini文件进行修改,修改后的Add算子的算子信息定义如下所示。
[Add] input0.name=x1 input0.dtype=float16,float16,float16,float16,float,float,float,float,int32,int32,int32,int32 input0.format=NCHW,NC1HWC0,NHWC,ND,NCHW,NC1HWC0,NHWC,ND,NCHW,NC1HWC0,NHWC,ND input0.shape=all input0.paramType=required input1.name=x2 input1.dtype=float16,float16,float16,float16,float,float,float,float,int32,int32,int32,int32 input1.format=NCHW,NC1HWC0,NHWC,ND,NCHW,NC1HWC0,NHWC,ND,NCHW,NC1HWC0,NHWC,ND input1.shape=all input1.paramType=required output0.name=y output0.dtype=float16,float16,float16,float16,float,float,float,float,int32,int32,int32,int32 output0.format=NCHW,NC1HWC0,NHWC,ND,NCHW,NC1HWC0,NHWC,ND,NCHW,NC1HWC0,NHWC,ND output0.shape=all output0.paramType=required opFile.value=add opInterface.value=add
参数说明请参见表1。下表仅列出常用的算子信息库配置项,其他配置项请参见《TBE&AI CPU算子开发指南》的“算子开发过程 > 算子信息库定义 > TBE算子信息库”章节。
| 信息 | Add算子配置 | 说明 | 
|---|---|---|
| [OpType] | [Add] | 算子类型,以英文半角方括号,标识一个算子信息开始,根据算子分析,算子类型为Add。 | 
| input0.name | x1 | Add算子的第一个输入tensor的名称,根据算子分析,第一个输入名称为x1,所以此处配置为x1,且需要跟算子原型定义中的名称保持一致。 | 
| input0.dtype | input0.dtype=float16,float16,float16,float16,float,float,float,float,int32,int32,int32,int32 input0.format=NCHW,NC1HWC0,NHWC,ND,NCHW,NC1HWC0,NHWC,ND,NCHW,NC1HWC0,NHWC,ND | 定义输入tensor支持的数据类型与数据排布格式。 根据算子分析,Add算子的输入数据类型支持float16、float32与int32三种;支持的数据排布格式有NCHW、NC1HWC0、NHWC、ND。  说明:  若算子输入支持多种规格,算子输入的dtype与format需要一一对应、按对应顺序进行配置,列出算子支持的所有dtype与format的组合,中间以“,”分隔。 | 
| input0.format | ||
| input0.shape | all | 定义输入tensor支持的形状。 | 
| input0.paramType | required | 定义输入tensor的类型。 
 Add算子的input0为固定输入1个,此处配置为required。 | 
| input1.name | x2 | 因为Add算子有两个输入,生成的配置模板中只有一个输入,所以此处需要添加input1的相关配置。 此配置项代表Add算子的第二个输入tensor的名称,根据算子分析,第二个输入名称为x2,所以此处配置为x2,且需要跟算子原型定义中的名称保持一致。 | 
| input1.dtype | input1.dtype=float16,float16,float16,float16,float,float,float,float,int32,int32,int32,int32 input1.format=NCHW,NC1HWC0,NHWC,ND,NCHW,NC1HWC0,NHWC,ND | 定义输入tensor支持的数据类型与数据排布格式。 根据算子分析,Add算子的输入数据类型支持float16、float32与int32三种;支持的数据排布格式有NCHW,NC1HWC0,NHWC,ND。  说明:  若算子输入支持多种规格,算子输入的dtype与format需要一一对应、按对应顺序进行配置,列出算子支持的所有dtype与format的组合,中间以“,”分隔。 | 
| input1.format | ||
| input1.shape | all | 定义输入tensor支持的形状。 | 
| input1.paramType | required | 定义输入tensor的类型。 
 Add算子的input1为固定输入1个,此处配置为required。 | 
| output0.name | y | Add算子的输出tensor的名称,根据算子分析,算子的输出名称为y,所以此处配置为y,且需要跟算子原型定义中的名称保持一致。 | 
| output0.dtype | output0.dtype=float16,float16,float16,float16,float,float,float,float,int32,int32,int32,int32 output0.format=NCHW,NC1HWC0,NHWC,ND,NCHW,NC1HWC0,NHWC,ND | 定义输出tensor支持的数据类型与数据排布格式。 根据算子分析,Add算子的输出数据类型支持float16、float32与int32三种;支持的数据排布格式有NCHW,NC1HWC0,NHWC,ND。  说明:  若算子输入支持多种规格,算子输入的dtype与format需要一一对应、按对应顺序进行配置,列出算子支持的所有dtype与format的组合,中间以“,”分隔。 | 
| output0.format | ||
| output0.shape | all | 定义输出tensor支持的形状。 | 
| output0.paramType | required | 定义输出tensor的类型。 
 Add算子的output0为固定输出1个,此处配置为required。 | 
| opFile.value | add | 算子代码实现文件的名称。 因为算子实现代码的名称符合算子OpType到代码实现名称的转换规则,参见步骤4,所以此字段可不配置。 | 
| opInterface.value | add | 算子实现文件中定义函数的名称。 因为算子定义函数的名称符合算子OpType到算子定义函数名称的转换规则,参见步骤4,所以此字段可不配置。 | 
AI CPU算子信息库
进入“cpukernel/op_info_cfg/aicpu_kernel”目录,配置算子信息库文件“reshape_cust.ini”。
开发者需要基于MindStudio自动生成的reshape_cust.ini文件进行修改,修改后的ReshapeCust算子的算子信息定义如下所示。
[ReshapeCust] opInfo.engine=DNN_VM_AICPU opInfo.flagPartial=False opInfo.computeCost=100 opInfo.flagAsync=False opInfo.opKernelLib=CUSTAICPUKernel opInfo.kernelSo=libcust_aicpu_kernels.so opInfo.functionName=RunCpuKernel opInfo.workspaceSize=1024
参数说明请参见表2。下表仅列出常用的算子信息库配置项,其他配置项请参见《TBE&AI CPU算子开发指南》的“算子开发过程 > 算子信息库定义 > AI CPU算子信息库”章节。
| 信息 | ReshapeCust算子配置 | 说明 | 
|---|---|---|
| [OpType] | [ReshapeCust] | 算子类型,以英文半角范括号,标识一个算子信息开始,根据算子分析,算子类型为ReshapeCust。 | 
| opInfo.engine | DNN_VM_AICPU | 配置算子调用的引擎。 AI CPU自定义算子的引擎固定为“DNN_VM_AICPU”。 | 
| opInfo.flagPartial | False | 此字段为预留字段,请保持固定值“False”。 | 
| opInfo.computeCost | 100 | 此字段为预留字段,请保持固定值“100”。 | 
| opInfo.flagAsync | False | 此字段为预留字段,请保持固定值“False”。 | 
| opInfo.opKernelLib | CUSTAICPUKernel | 配置算子调用的kernelLib。 AI CPU自定义算子调用的kernelLib固定为“CUSTAICPUKernel”。 | 
| opInfo.kernelSo | libcust_aicpu_kernels.so | 配置AI CPU算子编译生成的so的名称。 | 
| opInfo.functionName | RunCpuKernel | 配置自定义算子调用的kernel函数接口名称。 自定义算子的kernel函数接口固定为“RunCpuKernel”。 | 
| opInfo.workspaceSize | 1024 | 此字段为预留字段。 配置为内存空间,用于分配算子临时计算的内存。 单位为KB,取值范围为:0~1048576(1G)。 建议配置为:1024 |