1 系统环境
硬件环境(Ascend/GPU/CPU): Ascend/GPU/CPU
MindSpore版本: 2.2.0
执行模式(PyNative/ Graph): 不限
2 报错信息
2.1 问题描述
在将Torch的代码转换为MindSpore时,遇到如下代码:
input_data = self.embedding(input_data)
其中input_data为int64类型,Torch的embedding能够处理。
使用MindSpore替换时出现报错,代码如下。
net = nn.Embedding(vocab_size=self.hidden_size, embedding_size=self.embedding_size,dtype=ms.int64)
input_data = net(input_data)
使用AutoDL进行debug的时候,发现定义出来的net的dtype仍为float32,导致了类型错误。
2.2 报错信息
(embedding) : Embedding<vocab_size=110, embedding_size=8, use_one_hot=False, embedding table=Parameter (name=embedding. embedding table, shape=(110, 8), dtype=Float32, requires_grad=True), dtype=Float32, padding_idx=None>
3 根因分析
使用MindSpore版本2.2.0中会默认更改格式
4 解决方案
使用2.3版本下的mindspore测试,设置了int64后,算子里不会默认更改。
import mindspore as ms
from mindspore import Tensor, nn, context
import numpy as np
context.set_context(device_target='CPU')
net = nn.Embedding(110, 8, dtype=ms.int64)
x = Tensor(np.array([[107]*50]),ms.int64)
print(x)
output = net(x)
print(net)
print(output.shape)