下载
中文
注册

AI CPU算子信息库

配置说明

算子开发者需要通过配置算子信息库文件,将算子在昇腾AI处理器上相关实现信息注册到算子信息库中。

算子信息库文件路径:自定义算子工程目录下的”cpukernel/op_info_cfg/aicpu_kernel/xx.ini“。

表1 算子信息库配置说明

信息

可选/必选

说明

[OpType]

必选

算子OpType,以英文半角方括号包裹,标识一个算子信息开始,与算子原型定义中REG_OP(OpType)的OpType保持一致。

opInfo.engine

必选

配置算子调用的引擎。

AI CPU自定义算子的引擎固定为“DNN_VM_AICPU”。

opInfo.flagPartial

必选

此参数为预留参数,请保持固定值“False”。

opInfo.computeCost

必选

此参数为预留参数,请保持固定值“100”。

opInfo.flagAsync

必选

此参数为预留参数,请保持固定值“False”。

opInfo.opKernelLib

必选

配置算子调用的kernelLib。

AI CPU自定义算子调用的kernelLib固定为“CUSTAICPUKernel”。

opInfo.kernelSo

必选

配置AI CPU算子实现文件编译生成的动态库文件的名称。

生成的动态库文件的名称来源于算子工程编译的“build.sh”脚本中配置的“AICPU_KERNEL_TARGET”,例如“AICPU_KERNEL_TARGET”配置的为“cust_aicpu_kernels_3.3.0”,则生成的so名称为:“libcust_aicpu_kernels_3.3.0.so”。

opInfo.functionName

必选

配置自定义算子调用的kernel函数接口名称。

  • 若“opInfo.flagSupportBlockDim”配置为“False”,即AI CPU算子不需要分块并行执行,则functionName固定为“RunCpuKernel”。
  • 若“opInfo.flagSupportBlockDim”配置为“True”,即AI CPU算子需要分块并行执行,则opInfo.functionName固定配置为“RunCpuKernelWithBlock”。

opInfo.workspaceSize

可选

配置用于记录AICPU算子日志信息的内存大小。

单位为KB,取值范围为:0~500,默认值为2。

请根据需要记录的日志内容大小,配置合适的数值。

当需要记录的日志大小超出配置的数值,超出部分的日志不会被记录。

opInfo.subTypeOfInferShape

可选

此配置项针对动态shape的场景,配置AI CPU的infershape方式,有以下几种取值:

  • 1:根据inputshape可直接推导outputshape。
  • 2:部分计算的infershape,根据tensorData的值做简单的计算。
  • 3:全部计算的infershape,但最大shape可预估,按照算子最大的shape申请内存。
  • 4:无法由inputshape推导出算子的输出shape,也无法推导出输出range,此种情况需要在算子实现时进行内存的申请,计算完成后,返回output和输出shape。

默认值为1。

opInfo.flagSupportBlockDim

可选

AI CPU算子是否设置BlockDim的标识。

此参数有如下两种取值:

  • True:设置BlockDim的标识,代表支持分块并行计算。
  • False:不设置BlockDim的标识,代表不支持分块并行计算。

默认值为False。

opInfo.blockDimByIndex

可选

BlockDim的切分原则,有以下几种取值:

  • -1:表示按照算子第一个输入参数的元素个数进行BlockDim的切分。
  • 0~N-1,N为第一个输入参数的shape的维度数。例如若配置为0,表示按照第一个输入参数的轴0进行BlockDim的切分;若配置为1,表示按照第一个输入参数的轴1进行BlockDim的切分。

默认值为“-1”。

此参数仅在“opInfo.flagSupportBlockDim”配置为“True”时才生效。

input0.name

可选

配置第一个输入的名称,与算子原型定义中REG_OP(OpType)的下对应的第一个输入的名称保持一致。

说明:

input与output中的name、type与format字段的作用是在算子编译阶段进行这些参数的校验,否则,将在算子运行阶段才会校验。

建议用户进行配置。

input0.type

可选

配置第一个输入支持的数据类型,

若支持多种数据类型,请以“,”分隔。

有如下取值范围:

DT_UINT8,DT_UINT16,DT_INT8,DT_INT16,DT_INT32,DT_INT64,DT_FLOAT16,DT_FLOAT,DT_DOUBLE,DT_BOOL等,支持的数据类型列表请与算子原型定义中对应的TensorType列表保持一致。

注意:数据类型之间请不要输入多余空格。

input0.format

可选

支持的数据排布格式。

取值范围:ND、NHWC、NCHW

默认值是:ND,代表对数据排布格式无要求。

......

可选

input1的其他输入参数配置,参考input0;若算子有其他输入例如input2、input3……,配置也同理参考input0。

dynamic_inputX.name

可选

若输入为动态输入,则通过此参数配置。

其中配置项“dynamic_inputX.name”中的“X”为序号,代表此输入为算子的第几个输入,例如算子的第一个输入为静态输入,配置为input0,第二个输入为动态输入,则配置为dynamic_input1.name。

此参数的值配置为动态输入的名称,与算子原型定义中对应的动态输入的名称保持一致。例如,输入名称为x ,在图运行时,会根据实际输入的个数自动生成x0、x1、x2……,序号依次递增。

dynamic_inputX.type

可选

配置为动态输入支持的数据类型,若支持多种数据类型,请以“,”分隔。

有如下取值范围:

DT_UINT8,DT_UINT16,DT_INT8,DT_INT16,DT_INT32,DT_INT64,DT_FLOAT16,DT_FLOAT,DT_DOUBLE,DT_BOOL等。

说明:其中配置项“dynamic_inputX.type”中的“X”为序号,含义同dynamic_inputX.name中的“X”。

output0.name

可选

配置第一个输出的名称,与算子原型定义中REG_OP(OpType)的下对应的第一个输出的名称保持一致。如果算子有output0输出,则必须配置output0的name参数。

output0.type

可选

配置第一个输出支持的数据类型,

若支持多种数据类型,请以“,”分隔。

有如下取值范围:

DT_UINT8,DT_UINT16,DT_INT8,DT_INT16,DT_INT32,DT_INT64,DT_FLOAT16,DT_FLOAT,DT_DOUBLE,DT_BOOL等

output0.format

可选

支持的数据排布格式。

取值范围:ND、NHWC、NCHW

默认值是:ND,代表对数据排布格式无要求。

......

可选

output1的其他输出参数配置,参考output0;若算子有其他输出例如output2、output3……,配置也同理参考output0。

dynamic_outputX.name

可选

若输出为动态输出,则通过此参数配置。

其中配置项“dynamic_outputX.name”中的“X”为序号,代表此输出为算子的第几个输出,例如算子的第一个输出为静态输出,配置为output0,第二个输出为动态输出,则配置为dynamic_output1.name。

此参数的值配置动态输出的名称,与算子原型定义中对应的动态输出的名称保持一致。例如,输出名称为y,在图运行时,会根据实际输出的个数自动生成y0、y1、y2……,序号依次递增。

dynamic_outputX.type

可选

配置为动态输出支持的数据类型,若支持多种数据类型,请以“,”分隔。

有如下取值范围:

DT_UINT8,DT_UINT16,DT_INT8,DT_INT16,DT_INT32,DT_INT64,DT_FLOAT16,DT_FLOAT,DT_DOUBLE,DT_BOOL等,支持的数据类型列表请与算子原型定义中对应的TensorType列表保持一致。

说明:其中配置项“dynamic_outputX.type”中的“X”为序号,含义同dynamic_outputX.name中的“X”。

配置示例如下:

[Less]
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=2
input0.name=x1
input0.type=DT_DOUBLE,DT_FLOAT,DT_FLOAT16,DT_INT16,DT_INT32,DT_INT64,DT_INT8,DT_UINT16,DT_UINT32,DT_UINT64,DT_UINT8
input1.name=x2
input1.type=DT_DOUBLE,DT_FLOAT,DT_FLOAT16,DT_INT16,DT_INT32,DT_INT64,DT_INT8,DT_UINT16,DT_UINT32,DT_UINT64,DT_UINT8
output0.name=y
output0.type=DT_BOOL

自定义算子信息库文件编译部署完成后,会将算子相关定义信息存入<path>/<vendor_name>/op_impl/cpu/config/cust_aicpu_kernel.json,其中<path>为算子包的安装目录,详细可参见算子包部署<vendor_name>为提供自定义算子的厂商名字,关于此名字的定义,详细可参见算子工程编译