Ubuntu18.04(非虚拟机)下Anaconda3 + CUDA + cudnn + PyTorch(GPU)安装记录

前言

由于台式机电脑刚刚增加了一块500G的固态硬盘,所以直接把Ubuntu18.04装在整块硬盘里面了,然后原来的存储全部分给WIN10,这样的话便于管理。重新刷过Ubuntu,第一件事肯定就是安装各种各样的开发平台。
因此,本文对所配置的文件以及开发平台做记录,以便遗忘时有所参考。(毕竟Ubuntu这破玩意,每台电脑的BUG,同一台电脑不同时候的BUG都可能不一样…It works, but why? It doesn’t work, but why?)
Tips: 个人感觉,大多数时候还是官网的教程最靠谱,出现奇奇怪怪BUG的概率低一些。但是鉴于官网经常“引导”大家操作一些“看似熟悉,但是却又没有接触过”的操作,把本来就不熟悉平台的我们搞得更加困惑。所以,更多时候作为初学者的我,比起官网,更喜欢博客或者知乎…(只是因为我很菜>_<)

0. 台式机配置

  • CPU:16核 11th Gen Intel® Core™ i7-11700 @ 2.50GHz
  • GPU:NVIDIA RTX 2060
  • GPU的驱动版本号:470.57.02
  • 内存:16G
  • 存储:两张500G固态硬盘

1. Anaconda3 安装

Anaconda3的安装直接参考官网的教程就好,进入官网:https://www.anaconda.com/,点击Get Started, Download Anacona installers,之后选择对应版本即可。安装方法参考https://docs.anaconda.com/anaconda/install/linux/,参考installation即可,一般不会出啥问题,然后链接里面有说哪些操作“recommend”,最好听他的话;除了Verify data integrity with SHA-256,这个没必要。
安装之后,系统会默认将Python切换成anaconda自带的,这是很好的。打开终端,会有如下提示。(base代表anaconda3的基本环境,3.8是python版本。很多教程喜欢在anaconda里面创建各种自环境,个人习惯是直接在base里面安装。)
在base环境下,就可以直接使用pip安装python的包,跟正常的python没有差别。
在这里插入图片描述

2. CUDA安装

CUDA的安装个人趟了一些坑,但是最后成功之后,也没有太明确究竟是哪些坑导致我失败的。
开始安装之前最好卸载NVIDIA的显卡驱动,并且禁用Ubuntu自带的驱动,然后手动安装NVIDIA显卡驱动,原因不是因为这么做是最好的,而是我这么做成功了,可能是巧合,但是同理…好使了,以后就照搬吧,O(∩_∩)O哈哈哈~。。。。

2.1. 卸载NVIDIA显卡驱动

sudo ./usr/bin/nvidia-uninstall

或者

sudo apt-get install autoremove --purge nvidia*

哪个都行,卸了就行。如果之前有CUDA,最好也卸载掉

sudo ./usr/local/cuda-11.4/bin/cuda-uninstaller

2.2. 禁用自带nouveau驱动

sudo gedit /etc/modprobe.d/blacklist_nouveau.conf

在文中添加:

blacklist nouveau
options nouveau modeset=0

重启电脑,运行lsmod | grep nouveau,如果啥都没有,那说明OK了。

2.3. 重新安装NVIDIA驱动

终端输入ubuntu-drivers devices查看系统推荐的版本,我的是470。(有一个recommended)
在这里插入图片描述
然后直接终端执行sudo apt-get install nvidia-driver-470-server即可,不同的设备安装的驱动版本不一样,千万看好,我自己的台式机是470。
最后测试,终端输入nvidia-smi,可以看到我的显卡驱动为470.57.02,推荐的CUDA版本为11.4。

Sun Oct 17 16:48:47 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.57.02    Driver Version: 470.57.02    CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   53C    P8    24W / 183W |    526MiB /  5931MiB |     11%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1299      G   /usr/lib/xorg/Xorg                 26MiB |
|    0   N/A  N/A      1435      G   /usr/bin/gnome-shell               89MiB |
|    0   N/A  N/A      1727      G   /usr/lib/xorg/Xorg                214MiB |
|    0   N/A  N/A      1852      G   /usr/bin/gnome-shell               40MiB |
|    0   N/A  N/A      2321      G   ...AAAAAAAAA= --shared-files      152MiB |
+-----------------------------------------------------------------------------+

2.4. CUDA安装

直接去官网,CUDA下载界面,找到自己的对应版本就OK。然后下载一个run文件,之后直接终端执行sudo sh xxxxx.run即可,如果之前装过驱动,可能新版本的CUDA会提示类似于“你的电脑已经安装了某个版本的显卡驱动,您选择先卸载还是继续”之类的话,就选择继续。然后下边会弹出一个option,问我们哪些module是我们需要的,其中第一个就是driver,不要选择这个就好了。

     个人猜测:CUDA安装程序是要把显卡驱动核CUDA一起帮我们装上,但是我们已经有NVIDIA显卡驱动了,
     而且我们确认过,我们所选择安装的版本是完全兼容的,因此就不需要CUDA帮我们安装了。

之后终端会提示一共有三个东西,第一个是驱动:没安装,剩下两个:安装了,就OK了。
若安装后显示toolkit安装成功,但是sample安装失败,也许是因为缺少一些库,可以使用如下代码解决

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
此外, 不要忘记将环境变量更新,打开~/.bashrc文件,在最下边添加如下两行
export PATH="/usr/local/cuda-11.4/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH"

2.5. CUDA测试

测试1:终端输入nvcc -V,输出内容与下方类似则OK。

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Sun_Aug_15_21:14:11_PDT_2021
Cuda compilation tools, release 11.4, V11.4.120
Build cuda_11.4.r11.4/compiler.30300941_0

测试2:编译运行sample,进入安装目录:/usr/local/cuda-11.4/samples/0_Simple/vectorAdd,这只是其中一个例子,我们可以选择任意一个,然后执行sudo make,之后运行./vectorAdd
终端中会输出一大堆东西,最后一行如果是类似Pass、Test Pass之类的字样,就是成功了。

注意:不要直接在0_Simple的上一级文件夹直接`sudo make`,因为那样会编译所有的samples
我写博客的时候已经编译了好几分钟了T_T......,还没结束......
我只是做测试而已,不需要这么复杂/(ㄒoㄒ)/~~

cudnn安装

安装

同样,官网可以找到与CUDA版本相对应的cudnn,CUDNN下载。下载之后解压,解压后的文件夹名为cuda,文件夹中包含两个文件夹:一个为include,另一个为lib64,将解压后的文件中的lib64文件夹关联到环境变量中。

   cd ~
   sudo gedit .bashrc

在文件里面加入

   export LD_LIBRARY_PATH=/your/path/to/cudnn/lib64:$LD_LIBRARY_PATH

保存,关闭,终端执行source ~/bashrc
配置cuDNN的最后一步就是将解压后的cuda文件夹中的include文件夹中的cudnn.h文件拷贝到/usr/local/cuda/include中

   cd 解压路径/cuda/include
   sudo cp cudnn.h /usr/local/cuda/include
   sudo chmod a+r /usr/local/cuda/include

cudnn测试

官网下载测试程序https://developer.nvidia.com/rdp/cudnn-archive。里面有很多文件,找到这三个:

libcudnn8_8.2.4.15-1+cuda11.4_amd64.deb
libcudnn8-dev_8.2.4.15-1+cuda11.4_amd64.deb
libcudnn8-samples_8.2.4.15-1+cuda11.4_amd64.deb

(不同的版本不一样,但是名字类似)
然后直接安装

sudo dpkg -i libcudnn8_8.2.4.15-1+cuda11.4_amd64.deb
sudo dpkg -i libcudnn8-dev_8.2.4.15-1+cuda11.4_amd64.deb
sudo dpkg -i libcudnn8-samples_8.2.4.15-1+cuda11.4_amd64.deb

进入安装目录cd /usr/src/cudnn_samples_v8,然后挑一个编译,比如conv_sample

cd conv_sample
sudo make
./conv_sample

输出如下字样

Executing: conv_sample
Using format CUDNN_TENSOR_NCHW (for INT8x4 and INT8x32 tests use CUDNN_TENSOR_NCHW_VECT_C)
Testing single precision
====USER DIMENSIONS====
input dims are 1, 32, 4, 4
filter dims are 32, 32, 1, 1
output dims are 1, 32, 4, 4
====PADDING DIMENSIONS====
padded input dims are 1, 32, 4, 4
padded filter dims are 32, 32, 1, 1
padded output dims are 1, 32, 4, 4
Testing conv
^^^^ CUDA : elapsed = 0.426204 sec,  
Test PASSED
Testing half precision (math in single precision)
====USER DIMENSIONS====
input dims are 1, 32, 4, 4
filter dims are 32, 32, 1, 1
output dims are 1, 32, 4, 4
====PADDING DIMENSIONS====
padded input dims are 1, 32, 4, 4
padded filter dims are 32, 32, 1, 1
padded output dims are 1, 32, 4, 4
Testing conv
^^^^ CUDA : elapsed = 2.7895e-05 sec,  
Test PASSED

OK,安装成功,O(∩_∩)O~~O(∩_∩)O

PyTorch(GPU)安装

安装

同样,官网找安装说明https://pytorch.org/get-started/locally/,我选的是:
Stable(1.9.1)、LInux、Pip、Python、CUDA11.1(其实我是CUDA11.4,但是没有更新的了),然后直接终端执行下边的指令就行,很简单~~

测试

新建main.py,内容如下:

import torch
import time
a = torch.rand((10000, 10000))
b = torch.rand((10000, 10000))
print('Size a:', a.size())
print('Size b:', b.size())
t0 = time.time()
for _ in range(10):
    c = torch.matmul(a, b)
t1 = time.time()
print('Device:', a.device, '  Time:', t1 - t0)

print('Start moving matrix to GPU...')
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
t0 = time.time()
a = a.to(device)
b = b.to(device)
t1 = time.time()
print('time:', t1 - t0)
print('Finish moving matrix to GPU...')

t0 = time.time()
for _ in range(10):
    c = torch.matmul(a, b)
t1 = time.time()

print('Device:', a.device, '  Time:', t1 - t0)

代码中可以看到for _ in range(10):这个是控制计算矩阵乘法的次数。
如果只计算一次,结果如下:

Size a: torch.Size([10000, 10000])
Size b: torch.Size([10000, 10000])
Device: cpu   Time: 2.066044807434082
Start moving matrix to GPU...
time: 2.224944591522217
Finish moving matrix to GPU...
Device: cuda:0   Time: 0.010721683502197266

计算时间大幅度缩短,但是由于数据从CPU搬运到GPU还需要消耗很多时间,所以总的来算GPU并没有占便宜。但是如果计算10次,结果如下:

Size a: torch.Size([10000, 10000])
Size b: torch.Size([10000, 10000])
Device: cpu   Time: 20.653153657913208
Start moving matrix to GPU...
time: 2.176244020462036
Finish moving matrix to GPU...
Device: cuda:0   Time: 0.011154413223266602

好可怕,CPU的计算时间是原来的10倍,但是GPU运算的时间没有明显变化,加上搬运时间,GPU的好处就大大体现出来了。如果运算100次

Size a: torch.Size([10000, 10000])
Size b: torch.Size([10000, 10000])
Device: cpu   Time: 218.0396192073822
Start moving matrix to GPU...
time: 2.2560465335845947
Finish moving matrix to GPU...
Device: cuda:0   Time: 0.0151214599609375

同样很可怕,当然这个只是计算的时间,还有很多的额外操作是电脑自动去处理,比如数据搬运,缓存等等高级操作,所以实际程序运行时间肯定会远远大于0.0019秒,但是也比用单纯的CPU快很多很多…
OK,环境已经安装完成,我要回windows里面看看还能正常用不了,毕竟装完Ubuntu之后还没回去看过呢,O(∩_∩)O~~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值