计算机视觉2-> 深度学习1 | Anaconda+Cuda+PyTorch环境配置
00 想说的
深度学习的环境我配置了两个阶段,暑假的时候在一个主攻视觉的实验室干活,闲暇时候就顺手想给自己的Ubuntu1804配置一个深度学习的环境。这会儿配到了anaconda+pytorch+cuda,但是记忆里是显卡始终配不好。
1 torch.cuda.is_available() 2 >> False 3 # 表示显卡不配套
当时我以为就崩了。
确实是崩了,应该是navigator出现了一些问题。
事实上根据后续的回忆,是当时的自己对这些东西没有一个清楚的认识,pytorch装好就开始配显卡,然后anaconda跟pytorch不匹配;显卡本身虽然麻烦但是也不至于崩。
后来
另一个阶段就是2021年年末,在西安疫情封校的这段时间,没课没考试,所以继续配置deep learning的环境。这一阶段主要是搞显卡的事情。于12月30号配好。
这篇记录写出来不会那么容易
-
因为暑假的时候没有具体写自己的记录,只记录了follow的教程;
-
而年末配好的时候,因为长出一口气也没有来做记录这件事情。
-
过程中反复做的事情很多,中间甚至删了一些东西。我在写到这里时不敢说自己就能完成这篇总结。
我尽量回忆出一个逻辑清晰的链条。
但还是要做这件事情的,
-
是加深一下对相关概念的理解,
-
是给自己后续重装系统或者换电脑提供一个亲身体验的参考。
-
会带有一些记录性质,同时保持教程的可用性。
01 思路概览
01-1 关系
pytorch是深度学习的框架,在python中以一个包的形式进入编程。
anaconda是python的发行版;
cuda是N卡的一种计算架构,不同的N卡版本对应不同的CUDA版本。
01-2 难点
N卡、Cuda、anaconda、pytorch各个环节的版本适配问题。
01-3 思路
现在想想,其实两个阶段做了很多无用功,主要思路应该是:
-
python
(对于深度学习步骤来说非必须的步骤,因为第二步包含了第一步)
虽然Ubuntu上会自带python,但是18.04上是2.7和3.5(默认使用2.7),有时候会不符合自己的要求。
1 # 查看自带版本 2 python2 --version 3 python3 --version
若符合,此步略过;
若不符合,动手
-
将python版本指向3版本
-
安装更高级的python(如3.9)
若后续发现python不合适,仍跳回这一步。
ps:anaconda是python的一个发行版本,有管理工具conda,所以安装anaconda不需要额外安装python;这里主要是说python版本的事情。
-
-
Anaconda
这步比较常规,按照教程做就可以,留意的点是注意anaconda3的包很大,注意给自己的系统预留12G以上的空间。
1 #查看anaconda版本 2 conda -v
-
显卡
深度学习在CPU上也可以跑,但是在GPU上跑得更快。所以调用英伟达的显卡也是必要的。
-
cuda
2022-0114补充:
cuda和显卡是要互相配套的,互相决定对方的版本。
我们可以先到pytorch上看一下我们想下什么版本的pytorch。比如:
所以这里我们决定安装cuda10.2,并据此决定显卡驱动的版本。
-
pytorch
在pytorch官网直接下载,即可大功告成。
下面是我的配置经验。
0113 再记录:
由于学习真空期确实比较闲,在windows10下又配置了一遍,感觉windows比ubuntu好配置一点,也有可能是已经有了一些环境基础(pycharm+各种包),加之已经过了一遍整个过程,所以比较快。
02 Anaconda
python跳过,我们来谈Anaconda,我主要的参考:
02-1 简单了解
Anaconda是Python的一个开源发行版本,主要面向科学计算。我们可以简单理解为,Anaconda是一个预装了很多我们用的到或用不到的第三方库的Python。
而且相比于已经熟悉的pip install命令,Anaconda中增加了conda install命令,而后者在该平台下更为方便。
另外还有一个优点是它可以指定任意版本的Python(实际上Pycharm上也可以,只不过是智能切换PythonProject下的python版本,就在页面左下角)
02-2 安装
02-2-1 .sh文件
我们使用wget下载Anaconda的sh文件,
有关wget命令:
wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。
1 wget https://repo.anaconda.com/archive/Anaconda3-5.3.1-Linux-x86_64.sh # 官网 如果网络一般,下载较慢 2 # 这里我使用的是第一种官网下载,网络良好,下的还比较快 3 wget https://mirrors.ustc.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh # 中科大 在中科大源下载
同理其实也可以在其他源下载sh文件,这个并不关键。
mark一下清华源:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
后面在装pytorch的时候,我还会提到这个换源下载的好处:快。
02-2-2 环境变量
打开终端:
1 echo 'export PATH="~/anaconda3/bin:$PATH"' >> ~/.bashrc 2 # 将anaconda的bin写入环境变量
02-2-3 sh文件安装
在放置anaconda的目录下,比如你放在下面这个主目录下:
就在这里打开终端,运行sh文件
1 bash Anaconda3-5.3.1-Linux-x86_64.sh 2 # 一路yes enter即可,不过每一步注意看信息的反馈。 3 4 #如果不想输入yes enter之类的,尝试以下命令: 5 bash Anaconda3-5.2.0-Linux-x86_64.sh -b -u
看到下列信息即为安装完成:
在最后的问题“Do you wish to proceed with the installation of Microsoft VSCode? [yes|no]”,输入no;
这表示不要重复安装VSCode(默认读者不需要或者已安装)
02-2-4 刷新
关闭终端,重启一个终端
source ./bashrc
测试python
python
如果仍然显示ubuntu自带的python版本,我们执行:
1 sudo gedit ~/.bashrc 2 export PATH="/home/xupp/anaconda3/bin:$PATH" 3 source ~/.bashrc
02-3 使用
02-3-1 conda命令
Anaconda有很多使用技巧,基础的、进阶的都有;但是我没怎么探索,毕竟这个用用就上手了。
1 conda create -n python369 python=3.6.9 2 # 创建一个Python 3.6.9版本的环境 3 conda create -n example --clone base 4 # 直接Copy跟Base一样的环境 5 conda env remove -n python369 6 # 删除指定环境 7 conda activate python369 8 # 激活指定环境 9 conda remove -n python369 pandas 10 # 删除指定环境的指定包
02-3-2 常用库的安装
另外附上anaconda的安装包的问题:
对于python的正常使用,我们需要numpy、matplotlib、pandas等库,所以我们需要安装一下这些库:
1 #于2022-0109记录 2 conda install numpy 3 # 含有numpy的语句可以使用了 4 conda install pandas, 5 6 # 这之后pandas和matplotlib以及sys就都能用了 7 # 我疑心直接install pandas,numpy也可以使用了 8 9 import d2lzh_pytorch as d2l 10 # 这个语句也可以用了。
02-4 关于适配问题
希望大家不要遇到我这样的问题。但我还是要记录一下:
我现在的Ubuntu18.04下是没有anaconda-navigator的,我在终端输入
1 anaconda-navigator
是没有反应的,这才发觉我在暑假遇到的问题是什么,那就是python等各个版本与这个模块的不兼容,当时我从那考各个教程都没有什么结果,于是一狠心就把这个包给删掉了,jupyter notebook还能正常使用。
至于怎么一个不兼容,大家可以看一下我重新执行
1 conda update anaconda-navigator
语句产生的结果:
可以看到python版本有一个降级,这点我也不甚明了,但是后面的东西我都配好了,所以我先就维持原状了,不配置navigator了。
PS:
大家如果出现了这个问题,可以在这一步就调整一下自己的python版本,anaconda的每一个虚拟分支都是可以指定python版本的。然后再进行后面的安装。保证各个环节的匹配,从而避免我的问题。
如果哪天重装,或者升级系统,自己或许会再操作一下这个部分。
02-5 测试
在终端输入
1 jupyter notebook
就会弹出jupyter notebook的窗口,进行编程。
具体使用可以参见:
https://www.zhihu.com/question/46309360/answer/254638807
进阶用法:
https://www.zhihu.com/question/46309360/answer/742984819
这个文章写的已经很详细了。用法也没必要特意总结。
(或者哪天有了自己的东西,我也要写[doge])
03 CUDA
如果着急安装可以直接跳转到
03-1 CUDA是什么?
CUDA(Compute Unified Device Architecture),是一种由NVIDIA推出的通用并行计算架构(注意并不是N卡驱动本身),该架构使GPU能够解决复杂的计算问题。
简单来讲cuda是n卡的加速器。
包含:
-
CUDA指令集架构(
-
GPU内部的并行计算引擎
我们可以使用C语言来为CUDA架构编写程序,所编写出的程序可以在支持CUDA的处理器上以超高性能运行。从CUDA3.0开始已经支持C++和FORTRAN。
利用CUDA,我们可以进行多线程编程。这也是今天计算机组成与系统结构老师提到的提高程序性能的一种方法。
03-2 安装
03-2-1 准备1 | 支持CUDA
不是每一个电脑都能安装CUDA的,我们首先需要查看一下自己的电脑是否支持CUDA加速。
可以通过命令行:
1 lspci | grep -i nvidia 2 # 查看电脑显卡信息 3 ubuntu-drivers devices 4 # 查找对应的驱动程序 5 nvidia-smi 6 # 如果知道是N卡,可以直接这个命令,显示具体显卡型号 7 # 但不同电脑情况不同,比如你的电脑现在还不是N卡驱动,这个命令就不会生效
03-2-2 准备2 | gcc
cuda依赖c语言,所以检查自己的系统是否已经有gcc。
gcc -v # 若没有 sudo apt-get install gcc
03-2-3 N卡驱动安装/更新
然后就是装驱动/更新驱动,这里驱动与CUDA是有一个配套情况的,高版本的CUDA是需要高版本的N卡驱动的。
cuda官网查看版本适配情况:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#title-resolved-issues
这里我推荐大家使用450以上的驱动版本。
也要根据ubuntu-drivers devices推荐(recommended)的版本进行安装。
分两种情况:
-
如果你的ubuntu-drivers devices命令中显示了有450以上的版本:
那就直接打开软件与更新,进行更换:
-
如果没有,需要安装N卡驱动
1 sudo apt-get install nvidia-driver-450 2 sudo apt update 3 4 # 或者 5 sudo add-apt-repository ppa:graphics-drivers/ppa 6 sudo apt update 7 sudo ubuntu-drivers autoinstall 8 sudo apt update
03-2-4 CUDA安装
CUDA安装有两种方法,我应用的是第一种:
1 sudo apt install nvidia-cuda-toolki 2 # 地址在/usr/include和/usr/lib/cuda/lib64 3 # 自动安装的是9.1版本,大家可以尝试一下,如果后续适配方面不好,就在这一步采取第二种做法,手动官网安装
官网:https://developer.nvidia.com/zh-cn/cuda-toolkit
右上角->下载->CUDA->立即下载:
然后根据页面指示做即可。CUDA官网的教程相当友好。
例如deb本地下载:
1 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin 2 3 sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 4 5 wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda-repo-ubuntu1804-11-6-local_11.6.0-510.39.01-1_amd64.deb 6 7 sudo dpkg -i cuda-repo-ubuntu1804-11-6-local_11.6.0-510.39.01-1_amd64.deb 8 9 sudo apt-key add /var/cuda-repo-ubuntu1804-11-6-local/7fa2af80.pub 10 11 sudo apt-get update 12 13 sudo apt-get -y install cuda
deb联网下载:
1 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin 2 3 sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600 4 5 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub 6 7 sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /" 8 9 sudo apt-get update 10 11 sudo apt-get -y install cuda
03-2-5 调用路径
打开终端输入
1 sudo gedit /etc/profile
在文末加入以下三行
1 export CUDA_HOME=/usr/local/cuda-<version> 2 3 export PATH=/usr/local/cuda-<version>/bin${PATH:+:${PATH}} 4 5 exportLD_LIBRARY_PATH=/usr/local/cuda-<version>/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} 6 7 # 需要根据自己的版本进行配置 8 source ~/.bashrc
03-3 测试
1 nvcc -v 2 # 查看cuda版本 3 # CUDA Runtime API
1 nvidia-smi 2 # 此时应该都能打开这个命令了 3 # CUDA Driver API
PS:关于为什么两个地方的cuda版本不一样?
在安装CUDA 时候会安装3大组件,分别是
cuda 驱动程序
用来控制 GPU 硬件
toolkit cuda工具包
包括nvcc编译器等
samples
CUDA软件开发包代码实例
包括很多样例程序包括查询设备、带宽测试等等
理论上安装完驱动以后只需要安装CUDA toolkit就可以保证CUDA相关的程序运行。这也是03-2-4的命令行的意思。
上面说的 CUDA Driver API是依赖于 NVIDIA 驱动 安装的;表示驱动所能支持的最大运行API版本。我的情况是11.0。
而CUDA Runtime API 是通过CUDA toolkit 安装的。这就是我们一般所说的CUDA版本。
但是为什么我们的cuda版本会比下面的pytorch适配的低,还能正常运行呢?
装了Anaconda之后Anaconda也会提供一个cudatoolkit工具包,同样包含了CUDA的运行API,可以用来替代官方CUDA的CUDA Toolkit。这也就是为什么有时候我们通过nvcc-V查看的cuda版本很低(比如9.1),但是能成功运行cuda10.2的pytorch的原因。
本部分主要参考:
https://zhuanlan.zhihu.com/p/396344997
04 PyTorch
04-1 安装
进入pytorch官网https://pytorch.org/
从上面可以看到自己的cuda是9.1,
而pytroch官网已经是10+了
我们继续:
实际上这并不影响,我现在用的是好的,没有出现不适配的现象。(原因上一部分的末尾我有说明)。
大家可以在上一步就安装与此步完全适配的cuda。
我们看到下面Run this Command:
1 conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
但是根据我在windows下配置的经历,这一步可能会很慢(ubuntu网络配置的好的话可能没问题,我当时应该是官网直接下载)。所以建议如下命令:
conda install pytorch torchvision torchaudio cudatoolkit=10.2
在Windows下这样运行下载速度极快。
04-2 测试
1 conda list | grep torch 2 # 安装的pytorch及其版本号
下面测试显卡、cuda等的适配情况
1 jupyter notebook
输入:
import torch torch.cuda.is_available()
若返回True,则一切正常,大功告成。
若返回Flase,则为显卡驱动,cuda,pytorch不匹配