1. 在 windows10 上面安装 CUDA 和 cuDNN
2. 使用GPU之前需要安装PyTorch的GPU版本,原来装的pytorch版本是CPU的,而pytorch-cpu与pytorch-GPU不兼容,重新创建一个虚拟环境安装。
以上两部分,可参考 https://www.cnblogs.com/guan-zl/p/12986253.html
3. GPU的使用
(1)检测是否可以使用GPU
use_gpu = torch.cuda.is_available()
可以使用GPU,use_gpu的值为True,否则为False。
当可以使用GPU,我们不想使用,可以直接赋值use_gpu = False。
(2)使用GPU的三种方式
with torch.cuda.device(1):
# allocates a tensor on GPU 1
a = torch.tensor([1., 2.], device=cuda)
# transfers a tensor from CPU to GPU 1
b = torch.tensor([1., 2.]).cuda()
# a.device and b.device are device(type='cuda', index=1)
# You can also use ``Tensor.to`` to transfer a tensor:
b2 = torch.tensor([1., 2.]).to(device=cuda)
# b.device and b2.device are device(type='cuda', index=1)
#这三种方式没什么区别,但都需要先判断是否又GPU才能使用,个人觉得.to(device)更好用,在使用前先使用(1)中的代码判断,后面直接使用use_gpu即可。
(3)在代码中哪些东西需要上传到GPU
#(1)判断GPU是否可用
if torch.cuda.is_available():
device = torch.device('cuda')
cudnn.benchmark = True
else:
device = torch.device('cpu')
#(2)构建网络时,把网络,与损失函数转换到GPU上
model = CNN().to(device)
loss = nn.CrossEntropyLoss().to(device)
#(3)训练网络时,把数据转换到GPU上
x, y = x.to(device), y.to(device)
# 注,只有tensor类型才能上传到GPU上,故需要对numpy数据进行转换成rensor类型
# torch.tensor(x) 或 torch.from_numpy(x)
#两者的区别见 https://blog.csdn.net/github_28260175/article/details/105382060
#(4)对训练的输出结果有些需要使用np的函数进行操作,需先将输出结果转到CPU上,并转成numpy类型,再使用np的函数
output = (model(x)).cpu().numpy()