参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战
作为一个刚入门的人,讲道理虽然我们实验室好几张卡。但是我一次也没用到过,我也不知道怎么用。
现在要开始学怎么用了!
!nvidia-smi
查看显卡信息。
比如下边这种。 显示显卡型号,最右边那一栏是显卡利用率,没用就是0%。最底下是当前有没有程序在跑,no running processes就是程序运行呗。
import torch
from torch import nn
torch.cuda.device_count()
查询gpu数量。正常情况下会告诉你有几块卡可用。但是卑微的我,突然连K80都抢不上了。
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)
笔记还在更新中…………