AI CPU算子信息库
配置说明
算子开发者需要通过配置算子信息库文件,将算子在昇腾AI处理器上相关实现信息注册到算子信息库中。
算子信息库文件路径:自定义算子工程目录下的”cpukernel/op_info_cfg/aicpu_kernel/xx.ini“。
信息 |
可选/必选 |
说明 |
---|---|---|
[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.workspaceSize |
可选 |
配置用于记录AICPU算子日志信息的内存大小。 单位为KB,取值范围为:0~500,默认值为2。 请根据需要记录的日志内容大小,配置合适的数值。 当需要记录的日志大小超出配置的数值,超出部分的日志不会被记录。 |
opInfo.subTypeOfInferShape |
可选 |
此配置项针对动态shape的场景,配置AI CPU的infershape方式,有以下几种取值:
默认值为1。 |
opInfo.flagSupportBlockDim |
可选 |
AI CPU算子是否设置BlockDim的标识。 此参数有如下两种取值:
默认值为False。 |
opInfo.blockDimByIndex |
可选 |
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>为提供自定义算子的厂商名字,关于此名字的定义,详细可参见算子工程编译。