火炬张量的 .get_device() 返回 -1 是什么意思?

问题描述 投票:0回答:2

我正在使用 pytorch geometric 来训练图神经网络。导致这个问题的问题是以下错误:

RuntimeError:预期所有张量都在同一设备上,但发现 至少有两个设备,cpu 和 cuda:0! (检查参数时 方法 wrapper_addmm 中的参数 mat1)

所以,我正在尝试检查张量加载到哪个设备上,当我运行

data.x.get_device()
data.edge_index.get_device()
时,我得到每个设备的
-1
。 -1 是什么意思?

一般来说,我对何时需要将数据传输到设备(无论是 cpu 还是 gpu)感到有点困惑,但我假设对于每个纪元,我只是在我的张量上使用 .to(device) 来添加到适当的设备。

附加上下文:

我正在运行 ubuntu 20,在安装 cuda 之前我没有看到这个问题(即,我能够在 cpu 上训练/测试模型,但只有在安装 cuda 和更新 nvidia 驱动程序后才会出现这个问题)。 我在我的系统上安装了

cuda 11.7
,带有兼容 cuda 12 的 nvidia 驱动程序(例如,cuda 12 以
nvidia-smi
列出),
torch.version.cuda
的输出是
11.7
。不管怎样,我现在只是想使用 cpu,但一旦这个设备问题得到解决,我就会使用 gpu。

python pytorch cuda torch pytorch-geometric
2个回答
1
投票

表示数据还在CPU上

-1 表示不在任何 GPU 设备上。

要将其移动到 GPU,请使用
.to()

data.x = data.x.to(device)
data.edge_index = data.edge_index.to(device)

0
投票

-1 表示张量在 CPU 上。当你做

.to(device)
时,你的
device
变量初始化为什么?如果您只想使用 CPU,我建议将设备初始化为
device = torch.device("cpu")
并使用
CUDA_VISIBLE_DEVICES='' python your_code.py ...

运行您的 python 代码

通常,如果您将张量传递给模型,PyTorch 期望您的张量与您的模型位于同一设备上。如果您将多个张量传递给一个方法,例如您的损失函数 ``nn.CrossEntropy()```,PyTorch 期望您的两个张量(预测和标签)位于同一设备上。

© www.soinside.com 2019 - 2024. All rights reserved.