动手学深度学习5.5 使用GPU

248 阅读2分钟

参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

作为一个刚入门的人,讲道理虽然我们实验室好几张卡。但是我一次也没用到过,我也不知道怎么用。

现在要开始学怎么用了!

!nvidia-smi

查看显卡信息

比如下边这种。 显示显卡型号,最右边那一栏是显卡利用率,没用就是0%。最底下是当前有没有程序在跑,no running processes就是程序运行呗。

0c4f385fece0cc3762615a44940fe3d.png

import torch
from torch import nn

torch.cuda.device_count()

查询gpu数量。正常情况下会告诉你有几块卡可用。但是卑微的我,突然连K80都抢不上了。

image.png

def try_gpu(i=0): 
    """如果存在,则返回gpu(i),否则返回cpu()。"""
    if torch.cuda.device_count() >= i + 1:
        return torch.device(f'cuda:{i}')
    return torch.device('cpu')

def try_all_gpus(): 
    """返回所有可用的GPU,如果没有GPU,则返回[cpu(),]。"""
    devices = [torch.device(f'cuda:{i}')
             for i in range(torch.cuda.device_count())]
    return devices if devices else [torch.device('cpu')]

try_gpu(), try_gpu(10), try_all_gpus()

第一个函数是测试你的第i块gpu在不在,第二个函数是测试你的所有gup在不在。 没卡的我当然返回

>>
(device(type='cpu'), device(type='cpu'), [device(type='cpu')])

张量

默认张量创建是在CPU上的。

x = torch.tensor([1, 2, 3])
x.device

即输出x张量所在的设备。

>>
device(type='cpu')
X = torch.ones(2, 3, device=try_gpu())
X

或者可以直接在GPU上创建张量。

Y = torch.rand(2, 3, device=try_gpu(k))
Y

如果你有很多张卡(羡慕死了),你可以在第k+1张卡上创建一个张量。 因为序号是从0开始的,所以k是第k+1张卡。

如果你有很多张卡,并且在不同的卡上创建了张量,那你进行运算的时候不能直接将不同卡的数据进行运算,而是要决定一下把它挪到哪个卡上才可以。

比如上边在0卡创建的X。在k卡创建的Y。 直接X+Y会失败报错。 可以把X挪到K上,比如Z=X.cuda(k)就可以挪过去了。

神经网络

net = nn.Sequential(nn.Linear(3, 1))
net = net.to(device=try_gpu())

神经网络也可以为其指定设备。

输入张量和网络在同一设备上的时候可以在同一个GPU上运算。


《动手学深度学习》系列更多可以看这里:《动手学深度学习》 - LolitaAnn的专栏 - 掘金 (juejin.cn)

笔记还在更新中…………