pytorch - RuntimeError:后端 CUDA 的预期对象,但为参数 #3 'index' 获得了后端 CPU
问题描述
我正在使用 Google CoLab 上的项目“lda2vec-pytorch”,运行 pytorch 1.1.0
https://github.com/TropComplique/lda2vec-pytorch
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
cuda:0
我在前向方法中遇到异常,在我的类中添加“噪声”negative_sampling_loss(nn.Module):
noise = self.multinomial.draw(batch_size*window_size*self.num_sampled)
noise = Variable(noise).view(batch_size, window_size*self.num_sampled)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
self.embedding = self.embedding.to(device)
#print("negative_sampling_loss::forward() self.embedding", self.embedding.is_cuda) This line get's an error.
# shape: [batch_size, window_size*num_sampled, embedding_dim]
noise = self.embedding(noise) # Exception HERE
这是堆栈跟踪:
Traceback (most recent call last):
File "train.py", line 36, in <module>
main()
File "train.py", line 32, in main
save_every=20, grad_clip=5.0
File "../utils/training.py", line 138, in train
neg_loss, dirichlet_loss = model(doc_indices, pivot_words, target_words)
File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 493, in __call__
result = self.forward(*input, **kwargs)
File "../utils/lda2vec_loss.py", line 82, in forward
neg_loss = self.neg(pivot_words, target_words, doc_vectors, w)
File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 493, in __call__
result = self.forward(*input, **kwargs)
File "../utils/lda2vec_loss.py", line 167, in forward
noise = self.embedding(noise)
File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 493, in __call__
result = self.forward(*input, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/sparse.py", line 117, in forward
self.norm_type, self.scale_grad_by_freq, self.sparse)
File "/usr/local/lib/python3.6/dist-packages/torch/nn/functional.py", line 1506, in embedding
return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
RuntimeError: Expected object of backend CUDA but got backend CPU for argument #3 'index'
有任何想法吗?
解决方案
变量noise
在 CPU 上可用,而self.embedding
在 GPU 上。我们也可以发送noise
到 GPU:
noise = noise.to(device)
推荐阅读
- powershell - 右键单击 ps1 文件 > 编辑:不再与 ISE 关联(卸载 Sapien Powershell studio 后)
- azure - 如何从本地终端提取 Azure 订阅 ID
- android - 如何从点击的号码中获取电话号码(在其他应用程序上)并将其显示在我自己的应用程序中
- c++ - Cocos2d-x tilmap黑屏
- jmeter - Jmeter 5.3 - 如何在每个脚本之间以一定的时间间隔循环脚本
- python - Scrapy递归回调
- three.js - 如何在三个 JS 蒙皮示例中旋转骨架段?
- python - “ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。” 在嵌套 if python 和 pandas
- c# - c# 作为另一个函数的结果返回泛型函数
- ios - 在 iOS 模拟器上启动 Flutter 应用程序时出错:“检索线程信息时出错:(ipc/send)无效的目标端口”