之前只在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上做一个矩阵乘法,算一下用时:
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))
我的运行结果:
代码语言:javascript复制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短很多了。