Pytorch直接在GPU上创建张量报错:legacy constructor expects device type: cpubut device type: cuda was passed

一般的创建张量方法:

torch.Tensor(x)	# x可以是list或者np.array类型

但是这种创建方式默认是在把张量放在CPU(内存)中的。如果我们要使用GPU来训练模型,那么就还必须进行一步将张量复制到GPU上的操作,这样显然会费时间。
之前也是看到其他文章有说可以直接在GPU上创建张量,因此自己也做了一下尝试:

MyDevice=torch.device('cuda:0')
x = torch.LongTensor(x, device=MyDevice)	# 由于我的模型底层为Embedding层,因此使用LongTensor

运行程序的时候报错:

legacy constructor expects device type: cpu but device type: cuda was passed

根据报错分析问题是这里不能给device参数传’cuda’?然后查了一下,发现pytorch官方给的回答是,Tensor类是tensor的子类,不能给其device传参。而使用tensor类进行构建就不存在问题。
⭐️ 因此将代码改为如下:

MyDevice = torch.device('cuda:0')
x = torch.tensor(x, device=MyDevice)
x = x.long()

这下,就不再报错了。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐