配置环境是深度学习的第一道门槛,也是必须迈过的一道门槛,之前一直在windows平台上跑pytorch,但很多包无法安装,必须要使用Linux。在经历了很多坑,无数次重装系统,崩溃,坚持后终于在Ubuntu20.04上成功安装pytorch,现将经验分享,希望能对初学者有一定参考。
一、安装Ubantu20.04系统
在清华源上下载系统安装包,找一个空U盘,用第三方软件制作系统启动盘。注意一定是空U盘,制作启动盘时会将U盘格式化。
Index of /ubuntu-releases/20.04/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /ubuntu-releases/20.04/ | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ 系统启动盘具体制作安装步骤网上一大把,在此就不赘述,也没有什么坑。唯一需要注意的是进bios时(我的机器开机一直按F11进,不同的机器可能不一样,需要查),如果找不到刚制作的U盘启动项,那就可能是你的系统盘没有做好,那就重做系统就好了。
二、安装NVIDIA驱动
这一步是最坑的,耗时一天才解决问题。网上关于安装Ubantu系统的NVIDIA驱动的教程很多,我踩了无数次的坑,为解决这个问题至少重装了5次Ubantu20.04系统。主流的方法就是从NVIDIA官网下载适用你机器显卡的驱动,手动安装,但有个重要的步骤是需要禁用nouveau,如Ubuntu16.04安装英伟达(NVIDIA)显卡驱动详细图文教程_Let'sCode的博客-CSDN博客_ubuntu安装nvidia驱动
这位作者提到的,工作做的挺好。但我在禁用nouveau驱动后,重启一直黑屏,应该是进入不了图形界面。按ctrl+alt+F1~F6(F1~F6中具体哪一个按键根据机器的实际情况,多试几次),进入字符界面,始终安装不了NVIDIA的驱动,失败。我在安装中因为迷信手动安装,一直无法解决nouveau禁用后的开机问题,但一直想要征服这个问题至少重装了5遍Ubuntu20.04系统,最后终于妥协用了自动安装方法,才成功解决Ubantu20.04系统安装NVIDIA驱动的问题。步骤如下:
ubuntu-drivers devices
,会输出显卡型号以及推荐安装的NVIDIA驱动。
开始安装。如果同意安装推荐版本
只需要终端输入:sudo ubuntu-drivers autoinstall
,即可自动安装。
重启。注意一定要重启系统,在终端输入:sudo reboot 即可。
重启后在终端输入:nvidia-smi,即可显示驱动信息,证明驱动已经安装好。
三、安装cuda
cuda+cudnn与anaconda的安装顺序没有特殊要求,可以先安装cuda+cudnn也可以先安装anaconda,但cuda一定要在cudnn之前安装。对上步驱动安装好后在终端输入nvidia-smi在输出的表格右上角会有一个CUDA Version,我的输出是CUDA Version=11.4,
刚入门的朋友可能会有疑问,表示这CUDA不是已经安装好了么?为什么还要再安装cuda,而且在配置pytorch的时候,还会安装cudatoolkit,这到底是什么关系了?其实有CUDA Version=11.4并不代表你安装好了,它只表示你安装的cuda版本不能超过11.4,而CUDA是NVIDIA开发的专用于NVIDIA显卡的安装包,
cudatoolkit是facebook开发的,这么理解下就好了。进入正题,安装cuda步骤如下:
1、进入NVIDIA的官网下载cuda,CUDA Toolkit Archive | NVIDIA Developer,可以找到各种版本
cuda。关于版本号的选择,首先要满足前述的要求,其次因为我不知道pytorch安装时的cudatoolkit与nvidia的cuda版本号是不是需要一一对应,以防万一,我将两个版本号定为一样的。然后打开pytorch官网,推荐的是CUDA10.2和CUDA11.3两个版本,一开始我准备安装CUDA10.2,但在NVIDIA官网选择时发现CUDA10.2不支持Ubuntu20.4,就只好选择cuda11.3版本了。选择过程如下:
按照runfile(local)安装的方式简单,只需要在终端输入上述两条NVIDIA推荐的命令就好了,如果没有wget,就安装下。执行第二条命令后,在终端执行nvcc -V后没有输出的版本信息一般是gcc版本太高的问题,Ubuntu 20.04默认g++9版本太高,会导致CUDA无法安装,因此要先降低g++版本,需要添加gcc7才可安装cuda,终端输入命令安装gcc7:
apt-get install gcc-7 g++-7,即可
使用update-alternatives进行版本切换,输入以下命令:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50
我在实际输入第二条命令时始终报错找不到gcc-9这个文件夹,不用管了,反正上面的已经执行好降gcc了,再次运行上图中的第二条命令:sudo sh cudaXXXXXX.run 这个安装命令。
(注:我这个安装顺序是我的踩坑过程,还是推荐大家在安装过程中先执行降低g++版本,再按照Ubuntu推荐的命令安装)
在执行sudo sh cudaXXXXXX.run这条命令的过程中,会跳出一些选择界面,首先是 Abort和continue,选择continue,然后输入accept后出现CUDA Installer,因为已经安装过NVIDIA的驱动了,而弹出的CUDA Installer 自带显卡驱动,所以这一步按空格去掉安装显卡驱动的选项(这一步很重要,可能会引起驱动冲突,导致最后pytorch配置完后,torch.cuda.is_available()=False),然后选择install,就好了。如果这一步安装过程中有什么错误,可能是gcc降版本没有处理好,实在不行最后重装了Ubuntu系统再重新来一遍,毕竟一些残存的安装文件新手不一定能完全卸载完。
最后一步,配置环境变量:
在终端输入:gedit ~/.bashrc命令打开文件,在文件结尾输入以下语句,保存。
export PATH=/usr/local/cuda-11.3/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
(注意:CUDA版本号,如果是10.2就把11.3改为10.2就好了)
更新环境变量配置
source ~/.bashrc
至此cuda安装完成,输入nvcc -V命令查看cuda信息。如果没有输出,证明没有安装成功,对不起,对新入门来说最好重装系统,按上面的过程再来一遍。
在安装过程中Ubuntu 20.04 CUDA&cuDNN安装方法_ashome123的博客-CSDN博客_ubuntu20安装cuda以及
Ubuntu 20.04安装CUDA & CUDNN 手把手带你撸_哈希Map的博客-CSDN博客_ubuntu安装cudnn两篇文章给了很大帮助。
踩坑:我第一遍安装cuda时不是选择的runfile(local)安装,选的是deb(local)安装:
会发现推荐的安装命令很多,另外在执行的过程中,会出现这样的错误:
E: Sub-process /usr/bin/dpkg returned an error code (1) ,后来我按照E: Sub-process /usr/bin/dpkg returned an error code (1) 出错解决方案_Linux教程_Linux公社-Linux系统门户网
所讲的方法解决了这个问题,成功安装了cuda,但上述方法安装过程中仍然会自动安装nvidia驱动,不知道会不会产生冲突,所以我在第二遍重装cuda 的时候就没有选择这个方法,而是选了前述网上讲的蛮多的方法。
四、安装cudnn
这个简单多了,基本没什么坑,一遍过。
上官网https://developer.nvidia.com/cudnn,需要邮箱注册。
进入:https://developer.nvidia.com/rdp/cudnn-archive 一定要按照cuda的型号选择cudnn的型号。
我选的cuDNN Library for Linux (x86_64),下载安装包,注意下载完后将文件复制到电脑的home文件夹下。还有deb的安装包,可以根据自己的喜好,进行安装。
然后打开终端输入:
tar -zxvf cudnnXXXXXXXXXX.tgz 下载的cudnn安装包名称写全
cp cuda/lib64/* /usr/local/cuda-11.3/lib64/
cp cuda/include/* /usr/local/cuda-11.3/include/
(注意你的cuda编号,可以参考Ubuntu20.04下CUDA、cuDNN的详细安装与配置过程(图文)_嵌入式技术的博客-CSDN博客_ubuntu20 安装cudnn)
我们可以使用如下的命令查看cuDNN的信息:
cat /usr/local/cuda-11.3/include/cudnn.h | grep CUDNN_MAJOR -A 2
cudnn 8.0以上版本的输入下面的命令
cat /usr/local/cuda-11.3/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
(注意:根据自己的cuda版本将上面cuda后面的数字进行更改。)
CUDN + cuDNN安装完成,可以执行相关训练文件查看是否有gpu信息输出,或监控一下gpu状态。在watch -n 1 nvidia-smi,如果能有输出,就证明cuda和cudnn能正确匹配。(参考的Ubuntu 20.04安装CUDA & CUDNN 手把手带你撸_哈希Map的博客-CSDN博客_ubuntu安装cudnn)中的一段命令。
五、安装Anaconda
首先从anaconda官网下载安装包,将安装包移动到home文件夹下,也可以不移动,我习惯放在主文件夹home下,打开终端执行:
bash AnacondaXXXXXXX.sh 注XXX按照自己下载的版本名称补齐。
按一直Enter查看协议,直到出现Please answer 'yes' or 'no' , 输入 yes ;
然后再按一次Enter,安装完成。最后添加环境变量,我没添加,照样正常使用。
在终端输入jupyter notebook 可以使用jupyter
这两篇文章Ubuntu下安装Anaconda的步骤(带图) - 知乎和Ubuntu 20.04安装Anaconda3+配置+使用jupyter notebook_阿清~的博客-CSDN博客_ubuntu20.04安装anaconda讲的更详细,可以参考。
六、配置pytorch
打开终端,输入:conda create -n pytorch python=3.9 ,创建pytorch环境,因为我安装的anaconda的python是3.9版本的,自己装的啥版本python就将3.9进行替换。
终端输入:conda activate pytorch 打开pytorch环境。
打开pytorch官网,进行配置:
最后得到一行命令:
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
输入终端运行即可慢慢进行安装。有的因为速度慢的原因推荐使用清华源,操作也挺麻烦的,就用这个官方推荐的链接也挺快,估计十几二十分钟就好了。
在终端输入:python
如果报错,大概是因为没有在pytorch环境中运行的原因,在终端输入conda activate pytorch,以激活pytorch环境,然后在输入python。关闭pytorch环境可以输入 conda deactivate就好了。
然后输入:import torch 如果没输出就证明pytorch安装好了
再输入:torch.cuda.is_availble()
输出True,大功告成,证明pytorch配置好,可以用GPU进行训练了。
七、安装pycharm
在Thank you for downloading PyCharm!官网下载pycharm社区版,放到home文件夹下,在这个文件夹下打开终端:
输入:tar -zxvf pycharmXXXXX.tar.gz 解压,XXX为具体版本号,
然后在解压的pycharm文件夹下打开bin文件夹,在这个文件夹下打开终端~/pycharm-community-2022.1/bin$,输入:
sh pycharm.sh 打开pycharm,然后新建项目,将pytorch环境加入到pytorch新建项目中(此步很简单,网上随便搜索下),在菜单栏点击 Tools 再点击create desktop entry 即可将pycharm图标放到桌面,方便下次开启,可以在terminal 中将第六节中的部分内容载执行一遍:
在终端输入:python
如果报错,大概是因为没有在pytorch环境中运行的原因,在终端输入conda activate pytorch,以激活pytorch环境,然后在输入python。关闭pytorch环境可以输入 conda deactivate就好了。
然后输入:import torch 如果没输出就证明pytorch安装好了
再输入:torch.cuda.is_availble()
输出True,大功告成,证明pytorch配置好,可以用GPU进行训练了。
八、总结
环境配置是做深度学习的第一大关,确实挺麻烦的。中间安装过程中有很多坑,最大的坑就是NVIDIA驱动安装和CUDA安装。因为这个教程是事后回忆的,可能存在一些不足,或者是漏的,可能会产生错误,敬请见谅。