模型编译时,若遇到AI CPU算子不支持某种数据类型导致编译失败的场景,可通过启用Cast算子自动插入特性快速将输入转换为算子支持的数据类型,从而实现网络的快速打通。
如图1,表示MatrixInverse算子的输入x不支持float16的数据类型。
此种场景下,即可开启Cast算子自动插入特性,详细操作方法见操作步骤。
修改“Ascend-cann-toolkit安装目录/ascend-toolkit/latest”目录中“lib64/plugin/opskernel/config/init.conf”文件,将“AutoCastMode”参数的值修改为1,如下所示:
... AutoCastMode = 1
如下所示,MatrixInverse算子的输入x不支持float16,算子信息库配置如下:
"MatrixInverse":{
"input0":{
"name":"x",
"type":"DT_FLOAT,DT_DOUBLE,DT_COMPLEX128,DT_COMPLEX64"
},
"opInfo":{
"computeCost":"100",
"engine":"DNN_VM_AICPU",
"flagAsync":"False",
"flagPartial":"False",
"formatAgnostic":"False",
"opKernelLib":"TFKernel",
"opsFlag":"OPS_FLAG_OPEN",
"subTypeOfInferShape":"1"
},
"output0":{
"name":"y",
"type":"DT_FLOAT,DT_DOUBLE,DT_COMPLEX128,DT_COMPLEX64"
}
},
例如,对MatrixInverse算子,输入增加对float16类型的支持,并增加cast规则,将float16转换为float32,代表在此输入前会插入一个float16到float32的cast算子。
"input0":{
"name":"x",
"type":"DT_FLOAT,DT_DOUBLE,DT_COMPLEX128,DT_COMPLEX64,DT_FLOAT16",
"srcAutoCastType":"DT_FLOAT16",
"dstAutoCastType":"DT_FLOAT"
},
例如,对MatrixInverse算子,输出增加对float16类型的支持,并增加cast规则,将float32转换为float16,代表在此输出后插入一个float32到float16的cast算子。
"output0":{
"name":"y",
"type":"DT_FLOAT,DT_DOUBLE,DT_COMPLEX128,DT_COMPLEX64,DT_FLOAT16"
"srcAutoCastType":"DT_FLOAT",
"dstAutoCastType":"DT_FLOAT16"
}