【发布时间】:2021-11-24 13:04:00
【问题描述】:
我在 PyTorch 中设计了一个神经网络,它需要大量的 GPU 内存或者以非常小的批量运行。
导致GPU Runtime错误由于三行代码,其中存储了两个新张量并进行了一些操作。
我不想以小批量运行我的代码。因此,我想在 CPU 上执行这三行代码(并因此存储这些新张量),并像往常一样将所有其他代码保留在 GPU 上。
可以吗?
【问题讨论】:
我在 PyTorch 中设计了一个神经网络,它需要大量的 GPU 内存或者以非常小的批量运行。
导致GPU Runtime错误由于三行代码,其中存储了两个新张量并进行了一些操作。
我不想以小批量运行我的代码。因此,我想在 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)
几点说明:
.to()操作是not an "in place" operation。【讨论】: