Fork me on GitHub

pytorch+cuda初体验

之前只在NVIDIA JETSON TX2上用过CUDA,由于本学期选了并行计算这门课,应该会用到一点CUDA;于此同时,最近又在研究pytorch,还没有试过在GPU上跑pytorch;并且我一查,自己的显卡是英伟达的且支持CUDA。所以就毅然决定去试一试。

查看自己的显卡是否支持CUDA

首先你要看自己的显卡是不是英伟达的,如果是AMD的就已经没戏了,后面的文章你就别看了。

确定是英伟达的显卡后,上这个网查一查自己的显卡是否支持CUDA:https://developer.nvidia.com/cuda-gpus

网站里也清楚地标注了不同型号的算力,我的显卡是Quadro K620,这是一款专业级显卡,画图建模很不错,但是用来打游戏就不咋地了(打游戏请用Geforce系列),算力5.0,算是刚刚及格吧。Jetson TX1的算力为5.3,TX2为6.2,最新的AGX Xavier算力为7.2,毕竟一分价钱一分货。

安装CUDA

上这个网址下载CUDA:https://developer.nvidia.com/cuda-downloads

选择自己操作系统的版本,Installer Type我选的是local,然后就是无脑装,所有的配件我都勾选了(默认),当然你也可以按需选取。安装过程中屏幕会有闪动,这是正常现象。

装好后,去CMD输入nvcc -V看一下版本号,我下的最新版为Cuda compilation tools, release 10.1, V10.1.243,如果显示找不到命令,去配一下环境变量 。

安装pytorch

上这个网址下载pytorch:https://pytorch.org,选择相应的版本,得到下载命令。

我的下载命令为:conda install pytorch torchvision cudatoolkit=10.0 -c pytorch

下载过程中可能会碰到各种anaconda给你报的奇奇怪怪的问题,更新这个,下载那个,照做就是了。

对比CPU和GPU的性能差距

装好后检验一下效果,用pytorch分别在CPU和GPU上做一个矩阵乘法,算一下用时:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import torch
import time
print(torch.__version__)
print(torch.cuda.is_available()) # 得返回true,否则你再看看上文哪儿出了问题
a = torch.randn(10000, 1000)
b = torch.randn(1000, 2000)
t0 = time.time()
c = torch.matmul(a, b)
t1 = time.time()
print(a.device, t1 - t0, c.norm(2))
device = torch.device('cuda')
a = a.to(device)
b = b.to(device)
t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2))
t0 = time.time()
c = torch.matmul(a, b)
t2 = time.time()
print(a.device, t2 - t0, c.norm(2))

我的运行结果:

1
2
3
4
5
1.2.0
True
cpu 0.2418828010559082 tensor(141039.7031)
cuda:0 0.30884218215942383 tensor(141441.1094, device='cuda:0')
cuda:0 0.0069959163665771484 tensor(141441.1094, device='cuda:0')

你会发现我在GPU上特地跑了两次,而且第一次时间甚至比CPU还久,那是因为第一次GPU需要做一些部署的工作,时间自然会长一些,第二次运行时间就明显比 CPU短很多了。

donate the author