# 使用MindSpore的ops中的矩阵相乘算子进行int8的相乘运算时报错

**1. 系统环境**

硬件环境\(Ascend/GPU/CPU\): Ascend

软件环境: MindSpore 版本: 2.2.10

执行模式（静态图/动态图）： 不限

Python 版本: 3.7.6

操作系统平台: linux

**2. 报错信息**

2.1 问题描述

使用mindspore2.2的ops中的矩阵相乘算子进行int8的相乘运算时，出现以下报错。

2.2 报错信息

```
TypeError: For primitive[MatMul], the input argument[x] must be a type of {Tensor[BFloat16], Tensor[Float16], Tensor[Float32], Tensor[Int32], Tensor[Int64], Tensor[UInt8]}, but got Tensor[Int8].
```

2.3 脚本信息

```
import mindspore as ms 
import mindspore.ops as ops 
import numpy as np 
x = ms.Tensor(np.ones([1,3]).astype(np.int8)) 
y = ms.Tensor(np.ones([3,1]).astype(np.int8)) 
op = ops.matmul 
z = op(x,y) 
print(z)
```

**3. 根因分析**

ascend上ops.matmul 不支持int8, 计算时会报错，目前2.2 版本ascend上只支持这些类型\{Tensor\[BFloat16\], Tensor\[Float16\], Tensor\[Float32\], Tensor\[Int32\], Tensor\[Int64\], Tensor\[UInt8\]\}。

**4. 解决方案**

修改输入dtype为支持的数据类型，Tensor\[BFloat16\], Tensor\[Float16\], Tensor\[Float32\], Tensor\[Int32\], Tensor\[Int64\], Tensor\[UInt8\]  这些都可以。

下面是以int32为例：

```
>>> >>> import mindspore as ms 
>>> import mindspore.ops as ops 
>>> import numpy as np 
>>> x = ms.Tensor(np.ones([1,3]).astype(np.int32)) 
>>> y = ms.Tensor(np.ones([3,1]).astype(np.int32)) 
>>> op = ops.matmul 
>>> z = op(x,y) 
>>> print(z) 
[[3]] 
```

