当前训练CNN最受欢迎的两个框架是TensorFlow和 pyTorch,搭建相应的环境其实不难,博主早先在笔记本的Ubuntu上很快就搭建了pyTorch环境及手写了ResNet 的Demo。但是最近台式机配上比较不错的显卡后,再次搭建带CUDA的 pyTorch开发环境时,遇到一些问题,故简略记录于此。
博主一直使用的是Ubuntu+Windows双系统,此次一并将双系统(Win10+Ubuntu18.04)安装方式总结啦。
双系统安装
这里主要总结先安装Win10,再安装Ubuntu18.04的方法。
第一步:安装Win10。
这一步很多人可以直接跳过,毕竟平时使用的就是Win10。而Windows的安装方法当前也越来越简单,将安装包刻录到U盘里(使用UltraISO),然后在BIOS或UEFI启动顺序设置中将U盘设置为优先启动后,根据提示指引安装即可,此处不赘述。
在既有的Win10上,需要做一件事情,以便后续安装Ubuntu:进入“磁盘管理”后,将硬盘压缩出50G左右,作为“未使用”的空白盘。注意:1、如果有双硬盘(固态+机械),则可选择将固态硬盘压缩出一些空间,作为Ubuntu的boot空间(开机会快一点)。2、考虑到要处理大量图像数据,最好将硬盘留大一点,比如我预留了500G空间未使用。
第二步:准备安装Ubuntu18.04。
基本和安装Win10类似,从官网获取Ubuntu18.04后,将安装包刻录到U盘里(使用UltraISO,具体操作请自行百度,有很多制作系统安装盘的教程),然后在BIOS或UEFI启动顺序设置中将U盘设置为优先启动后,选择“Install Ubuntu”后,进入安装指引。其中有一步会提示“是否与Win10共存”,这一步很关键,如果没有出现这个提示,之前的步骤会是有问题的。当然,此处我们选择“Other/其他”,以便进行自定义安装。
第三步:Ubuntu安装分区设置。
根据安装引导提示,将会进入分区设置界面。分区其实不难,关键是把握4个分区:主分区/,交换分区swap,引导分区boot,和用户分区home。选择之前预留的空白空间后,进行如下操作。
创建主分区/。主分区相当于系统盘,建议分配10G左右空间。选择主分区、Ext4、和挂载点/。
创建交换分区swap。交换分区将被当成内存使用,建议设置为物理内存同样大小。选择逻辑分区、交换空间。
创建引导分区boot。引导分区是用来开机引导的,建议500M左右,另外可创建在固态硬盘里。选择逻辑分区、Ext4、和挂载点/boot。
创建用户分区home。这里是平时工作的地方,主要是存储数据。选择逻辑分区、Ext4、和挂载点/home。
之后根据提示完成安装即可。
Ubuntu系统安装显卡驱动
安装好Ubuntu后,发现分辨率比较低,而且操作比较卡顿,直觉告诉我是显卡驱动的问题。博主显卡是RTX 2080Ti,于是立刻到NVIDIA官网(https://www.geforce.com/drivers)下载了个相应的显卡驱动:NVIDIA-Linux-x86_64-418.56.run(请根据自己的显卡和当前驱动更新发布情况选择适当的驱动版本)。
安装前需要禁用系统默认的显卡驱动,如下操作。
打开系统黑名单:
sudo gedit /etc/modprobe.d/blacklist.conf
在文件末尾加入这几行:
# for nvidia display device install
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist rivatv
blacklist nvidiafb
保存,然后更新initramfs:
sudo update-initramfs -u
重启电脑后,输入命令查看是否禁用成功:
lsmod | grep nouveau
无输出则说明禁用成功。
接下来进行驱动安装。首先需要将安装文件的权限提升到最高:
sudo chmod 777 NVIDIA-Linux-x86_64-418.56.run
然后运行安装程序:
sudo ./NVIDIA-Linux-x86_64-418.56.run
如果安装过程中遇到错误如未找到gcc或make,那么安装好这些必要的程序后再重新运行安装显卡驱动。
显卡驱动安装好后,重新启动电脑,发现分辨率正常了,找到“设置”→“详细”,发现显示了RTX 2080Ti。说明显卡驱动安装成功。
检测显卡的另一个方法,运行命令:nvidia-smi。
安装Anaconda
目前pyTorch搭建IDE比较推荐Anaconda。至官网下载Linux64位版本的Anaconda安装包(博主下载的是Anaconda3-5.2.0-Linux-x86_64.sh)。将该文件权限提升到最高:
sudo chmod 777 Anaconda3-5.2.0-Linux-x86_64.sh
然后sudo运行安装即可。
安装成功后,在Terminal中输入jupyter notebook,即可在浏览器中打开notebook操作界面。
注意:若官网下载Anaconda太慢的话,可以从清华镜像平台上下载:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
安装pyTorch和相应CUDA
这部分可以参考官网的指导“get-started”:https://pytorch.org/get-started/locally/
理论上这一步可以直接运行官网推荐的命令进行安装的(以CUDA9.0为例):
conda install pytorch torchvision cudatoolkit=9.0 -c pytorch
安装成功后,可以在notebook中使用一下代码进行测试:
from __future__ import print_function
import torch
x = torch.rand(5, 3)
print(x)
应该输出类似于以下的结果:
tensor([[0.3380, 0.3845, 0.3217],
[0.8337, 0.9050, 0.2650],
[0.2979, 0.7141, 0.9069],
[0.1449, 0.1132, 0.1375],
[0.4675, 0.3947, 0.1426]])
另外,测试cuda:
import torch
torch.cuda.is_available()
如果输出True,就说明安装一切安装成功了。
但是如果安装失败,可以尝试手动安装这些组件:CUDA、cuDNN、pyTorch。
CUDA安装包下载地址:https://developer.nvidia.com/cuda-downloads
cuDNN安装包下载地址:https://developer.nvidia.com/rdp/cudnn-download
pyTorch建议命令安装:conda install pytorch
主要CUDA与cuDNN需要安装互相兼容的版本,官网上可找到其兼容性的相关说明。CUDA下载的最后一步选择“runfile(local)”
博主在手动安装CUDA时捣鼓了很久,本来想装CUDA10.1,但是进入安装界面后,如果选择“不安装驱动”(显卡驱动之前已经安装过了啊),就会报错“需要在安装驱动基础上进行后续安装”;而如果选择“安装驱动”,就会出现“假的安装成功”。之后卸载当前的显卡驱动后,再进行安装,会出现“近似的安装成功”(/usr/local目录下出现了cuda10.1的目录,但是其实似乎没完全安装)。但是重启后,发现驱动还是没有,于是又重新装了一次显卡驱动。另外,据说还可能出现gcc版本和CUDA不兼容,可能需要将gcc降级处理(兼容信息同样可以在官网CUDA兼容说明中找到,如:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html)。
手动安装容易出各种问题,还是建议尽量使用命令:conda install pytorch torchvision cudatoolkit=9.0 -c pytorch,直接搞定。
另外,有篇博客也对此进行了总结,可以参考:Ubuntu18.04下安装深度学习框架Pytorch(GPU加速)
其他参考内容:
在Ubuntu 18.04系统中安装RTX 2080Ti显卡驱动的方法
至此,安装结束。现在启用cuda跑一跑你的CNN训练,不出意外的话,训练速度瞬间将得到显著的提升。继续努力吧!