1 将CPU上的Tensor或变量放到GPU上
代码:x.cuda()
2 将GPU上的Tensor或Variable放到CPU上
代码:x.data.cpu().numpy()
3 将CPU上的神经网络模型放到GPU上
代码:net = model()
net.cuda()
4 深度学习中我们默认使用的是CPU,如果我们要使用GPU,需要使用.cuda将计算或者数据从CPU移动至GPU。
代码:
import torch
from torch.autograd import Variable
# 将变量或者数据移到GPU
gpu_info = Variable(torch.randn(3,3)).cuda()
5 如果当我们需要在CPU上进行运算时,比如使用plt可视化绘图,我们可以使用.cpu将计算或者数据转移至CPU。
代码:
# 将变量或者数据移到CPU
cpu_info = gpu_info.cpu()
6 torch.cuda会记录当前选择的GPU,并且分配的所有CUDA张量将在上面创建。可以使用torch.cuda.device上下文管理器更改所选设备。
但是,一旦张量被分配,您可以直接对其进行操作,而不考虑所选择的设备,结果将始终放在与张量相同的设备上。
默认情况下,不支持跨GPU操作,唯一的例外是copy_()。 除非启用对等存储器访问,否则对分布不同设备上的张量任何启动操作的尝试都将会引发错误。
例子:
x = torch.cuda.FloatTensor(1)
# x.get_device() == 0
y = torch.FloatTensor(1).cuda()
# y.get_device() == 0
with torch.cuda.device(1):
# allocates a tensor on GPU 1
a = torch.cuda.FloatTensor(1)
# transfers a tensor from CPU to GPU 1
b = torch.FloatTensor(1).cuda()
# a.get_device() == b.get_device() == 1
c = a + b
# c.get_device() == 1
z = x + y
# z.get_device() == 0
# even within a context, you can give a GPU id to the .cuda call
d = torch.randn(2).cuda(2)
# d.get_device() == 2
7 总结:
.cuda()是读取GPU中的数据,将cpu转成gpu。
.data是读取Variable中的tensor。
.cpu是把数据转移到cpu上。
.numpy()把tensor变成numpy。