是否可以在 CPU 上存储一些张量并在 GPU 上存储其他张量以在 PyTorch 中训练神经网络?

Is it possible to store some tensors on CPU and other on GPU for training neural network in PyTorch?

我在 PyTorch 中设计了一个神经网络,它需要大量的 GPU 内存,否则 运行s 的批量大小非常小。

GPU 运行时错误导致由于三行代码,它存储两个新的张量并执行一些操作。

我不想 运行 我的代码有小批量。因此,我想在 CPU 上执行这三行代码(并因此存储这些新张量),并像往常一样将所有其他代码保留在 GPU 上。

可以吗?

有可能。
您可以使用命令 .to(device=torch.device('cpu') 将相关张量从 GPU 移动到 CPU,然后再返回到 GPU:

orig_device = a.device  # store the device from which the tensor originated
# move tensors a and b to CPU
a = a.to(device=torch.device('cpu')) 
b = b.to(device=torch.device('cpu'))
# do some operation on a and b - it will be executed on CPU
res = torch.bmm(a, b)
# put the result back to GPU
res = res.to(device=orig_device)

一些注意事项:

  1. 在设备之间或在 GPU 和 CPU 之间移动张量并不罕见。用于描述它的术语是 "model parallel" - 您可以 google 它以获取更多详细信息和示例。
  2. 注意 .to() operation is .
  3. 在 GPU 和 CPU 之间来回移动张量需要时间。在这种情况下,使用这种类型的“模型并行性”可能不值得。如果您在 GPU space 上苦苦挣扎,您可以考虑 gradient accumulation 而不是