---
title: 开启AI CPU Cast算子自动插入特性-昇腾社区
description: MatrixInverse算子的输入x不支持float16的数据类型。  此种场景下，即可开启Cast算子自动插入特性。
keywords: MatrixInverse算子;Cast算子;自动插入
url: https://www.hiascend.com/document/caselibrary/detail/topic_0000001439727965
section: (其他)
---

# 开启AI CPU Cast算子自动插入特性-昇腾社区

URL: https://www.hiascend.com/document/caselibrary/detail/topic_0000001439727965
描述: MatrixInverse算子的输入x不支持float16的数据类型。  此种场景下，即可开启Cast算子自动插入特性。
关键词: MatrixInverse算子;Cast算子;自动插入

昇腾文档 [了解详情](https://www.hiascend.com/document)

故障案例 [了解详情](https://www.hiascend.com/document/caselibrary)

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

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

2023/05/08

1.1k

问题信息

| 问题来源 | 产品大类 | 关键字 |
| --- | --- | ---|
| 官方 | 算子开发 | 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算子，精度会有一定程度的损失，具体损失大小与转换的数据类型有关。

本页内容

- 问题信息
- 问题现象描述
- 原因分析
- 解决措施
