昇腾故障案例详情页

开启AI CPU Cast算子自动插入特性

更新时间: 2023/05/08

暂无评分

问题信息

问题来源产品大类关键字
官方算子开发MatrixInverse算子、Cast算子、自动插入

问题现象描述

MatrixInverse算子的输入x不支持float16的数据类型。

此种场景下,即可开启Cast算子自动插入特性。

原因分析

模型编译时,若遇到AI CPU算子不支持某种数据类型导致编译失败的场景,可通过启用Cast算子自动插入特性快速将输入转换为算子支持的数据类型,从而实现网络的快速打通。

解决措施

  1. 打开AutoCast开关。

    修改“Ascend-cann-toolkit安装目录/ascend-toolkit/latest”目录中“lib64/plugin/opskernel/config/init.conf”文件,将“AutoCastMode”参数的值修改为1,如下所示:

    ...
    AutoCastMode = 1

  2. 修改对应的算子信息库(内置AI CPU算子信息库存储在opp安装目录下的“built-in/op_impl/aicpu/aicpu_kernel/config”目录下),在需要修改的算子中插入Cast转换规则。

    如下所示,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"
            }
        },
    为了让其支持float16,需要做如下修改:
    1. 对输入信息进行修改,增加支持的数据类型,并增加数据类型转换规则。

      例如,对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"
              },
      • 支持的“type”中增加“DT_FLOAT16”数据类型,支持的数据类型可参见对应的算子信息库中Cast算子的定义。
      • 增加配置“srcAutoCastType”,代表输入数据的类型。
      • 增加配置“dstAutoCastType” ,代表需要转换成的目标数据类型。
    2. 对输出信息进行修改,增加支持的数据类型,并增加数据类型转换规则。

      例如,对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"
              }
      • 支持的“type”中增加“DT_FLOAT16”数据类型,支持的数据类型可参见对应的算子信息库中Cast算子的定义。
      • 增加配置“srcAutoCastType”,代表输入数据的类型。
      • 增加配置“dstAutoCastType” ,代表需要转换成的目标数据类型。
    • 若算子的多个输入、多个输出要求具有相同的数据类型,则每个输入、输出都需要按照上述规则进行修改。
    • 由于插入Cast算子,精度会有一定程度的损失,具体损失大小与转换的数据类型有关。

本页内容

该页面对您有帮助吗?
我要评分