前言
从安装ubuntu系统配置pytorch-GPU环境开始就已经走上了不归路,本以为没什么大问题,但其实坑非常的多,在此写上安装过程中遇到的种种问题与大家分享,希望大家少走弯路!
另外要说明,安装过程中一定要仔细看cuda、cudnn的官方文档,官方文档写的过程非常的详细,仔细看之后再安装会避免不少的问题!
电脑配置
电脑为个人闲置的笔记本电脑:
处理器:i7-6700
显卡:GTX 965M(集显)
系统ubuntu16.04
之前在安装nvidia-cuda-toolkit
7.5的时候出现了错误,原因是在安装nvidia驱动之后,使用命令nvcc -V
进行查看的时候,系统提示没有安装nvidia-cuda-toolkit,让使用apt-get命令进行安装,但是使用该命令安装后的cuda有问题。虽然通过nvcc -V
命令可以查询到tool信息,但是在usr/local却没有发现安装文件,例程找不到,程序也无法调用工具包,估计安装出错,故卸载重新安装最新版。
(所以最好不要在终端中直接下载和安装cuda,大小1G多,在终端下载很容易出现问题,最好下载好直接安装)
于是使用命令sudo apt-get autoremove nvidia-cuda-toolkit
卸载当前的cuda7.5版本
下载最新的cuda_9.0.176_384.81_linux.run
https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=runfilelocal
下载支持与cuda9匹配的cudnn: cuDNN v7.0.3 (Sept 28, 2017), for CUDA 9.0
https://developer.nvidia.com/rdp/cudnn-download
注意!
1、在官网下载cuda9的时候总是下到一半就停住了,翻墙下载也一样,最后试了几次总结:与网络关系不大,与下载环境有关,可以多换着环境下载。注意不要使用迅雷和360浏览器下载、使用谷歌浏览器或火狐浏览器下载;
2、这个cuda9.0安装包里面包含了很多东西,其中包括了与当前cuda版本匹配的nvidia驱动,所以在安装前,建议在安装前卸载掉与NVIDIA相关的所有东西以防之后在安装过程中发生冲突。
使用sudo apt-get remove --purge nvidia*
命令卸载掉所有系统上存在的nvidia驱动。
安装前进行检查(必要)
1、 检查自己的GPU是否为CUDA-capable,即是否支持cuda
使用命令 $ lspci | grep -i nvidia
,来检查gpu版本信息,然后在官网查找是否有你的显卡在支持列表中(满足条件),如果上面那个命令无法执行,执行update-pciids
(generally found in /sbin) 命令更新后重新来一遍。
查询网址:http://developer.nvidia.com/cuda-gpus
2、检查自己的linux版本是否支持CUDA
使用命令:$ uname -m && cat /etc/*release
,一般来说,ubuntu16.04和14.04都没有问题
3、查看自己的系统中是否安装了gcc
使用命令$ gcc --version
来查看
4、查看自己的系统是否安装了正确的kernel header和package development
使用命令:$ uname -r
查看
使用$ sudo apt-get install linux-headers-$(uname -r)
来安装对应的kernel header和package development
上面是我的配置,你可以看看你的是否符合,具体详细的问题可以上官网查询。
开始安装
选择安装方式
提供distribution-specific packages (RPM and Deb packages)和 distribution-independent package (runfile packages),这个安装方式各有其优点,但是官方建议使用runfile方式来进行安装,我也是用这个方式进行安装的。
安装cuda9.0
从官方下载cuda的时候,发现已经推送了最新版的(2017-11)9.0版,当然能用最新就用最新,虽然pytorch上面未写的支持9.0,但接口都是一样的,所以这里直接拿来用了。
1、首先禁止 Nouveau驱动
先查看以下驱动是否工作(如果打印出来信息则说明在工作)
$ lsmod | grep nouveau
创建一个 /etc/modprobe.d/blacklist-nouveau.conf
文件,里面写上
blacklist nouveau options nouveau modeset=0
然后进行更新
$ sudo update-initramfs -u
2、然后退出图形界面,按alt+ctrl+f1进入命令行模式,输入sudo service lightdm stop
关闭图形化界面,然后切换到cuda安装文件的路径,也就是之前下载好的目录,运行sudo sh cuda_9.0.176_384.81_linux.run
然后就开始进行安装,安装过程中会安装一下几个东西:
EULA Acceptance
CUDA Driver installation
CUDA Toolkit installation, location, and /usr/local/cuda symbolic link
CUDA Samples installation and location
其中会问题是否安装openGL,强烈建议选择不要安装(除非你的显卡主设是NVIDIA),我当时选安装后重启直接进不了图形界面。其他的默认选推荐就行。
3、安装完成后,重启图形界面sudo service lightdm start
按alt+ctrl+f7之后回到图形界面,登录
注意,如果这时候登录不了,一直循环重复登录,不要着急,看下头的问题汇总。
4、重启电脑,进行Device Node 检查
检查你的路径/dev
下 有无存在名为nvidia*(以nvidia开头)的多个文件(device files),如果没有
进入目录/etc/init.d
中创建一个.sh文件(名字随便起),然后写入
下面的格式有乱,按照上面修改即可(从官网粘过来就这样,没粘其他字符)
#!/bin/bash /sbin/modprobe nvidia if [ "$?" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l` NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ "$?" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 else exit 1 fi
写好后保存即可。
5、设置环境变量
进入/home,终端中输入 $ sudo gedit .bashrc
(ubuntu)
在打开的文件末尾,添加以下两行。(64位)
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\ ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
保存后,执行env
检查一下看是否成导入环境变量。
到此,cuda的安装就基本完成了
cuda安装后进行验证
1、检查 NVIDIA Driver是否安装成功
输入:$ cat /proc/driver/nvidia/version
输出NVIDIA Driver的版本号
2、检查 CUDA Toolkit是否安装成功
输入 : $ nvcc –V
会输出CUDA的版本信息
3、进行编译cuda提供的例子
进入例子存放的路径,默认路径是 ~/NVIDIA_CUDA-9.0_Samples
(即 /home/x/ NVIDIA_CUDA-9.0_Samples, x是你的用户名)
终端输入:$ make
开始进行编译,如果出现错误则会停止编译,注意编译过程稍微长一些,10来分钟,可以看会别的
4、运行编译生成的二进制文件。
编译后的二进制文件 默认存放在~/NVIDIA_CUDA-9.0_Samples/bin
中。
切换路径 : cd ~/NVIDIA_CUDA-9.0_Samples/bin/x86_64/linux/release
终端输入 :$ ./deviceQuery
如果出现下面的图片,Result = PASS
则说明安装成功!!
然后运行 bandwidthTest
程序确保系统和 CUDA-capable device可以正常的进行通信。
同样出现pass说明成功!
开始cudnn的安装
cudnn安装
cudnn安装相对比较简单,只要将相应的文件复制到相应的目录即可
1、进入到你下载好的cuDNN的目录
2、进行解压cuDNNU
$ tar -xzvf cudnn-9.0-linux-x64-v7.tgz
3、复制下面的文件到你的cuda文件中
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include $ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64 $ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
到此cuda和cudnn的安装就结束了,开始pytorch的安装!
安装pytorch
很多人建议安装源码版本的,从github上进行源码下载,这样如果不使用cuda的话问题不大,如果你安装了cuda的话,在进行源码编译的时候会顺便编译cuda的文件,这时候很容易出现gcc和cmake编译的问题,本人当时安装的时候出现了许多编译问题,无法安装成功。
安装前首先引入路径环境,将以下写到~/.bashrc中,路径为anaconda的bin路径,一般为~/anaconda3/bin
export CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" #
在安装pytorch之前还需要安装一些其他依赖软件,同样通过conda进行安装,这时候可以切换成清华源,来加快下载:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes
切换后安装:
conda install numpy pyyaml mkl setuptools cmake cffi
然后,通过conda进行安装pytorch即可
conda install pytorch torchvision cuda80 -c soumith
等待安装后,进行测试即可
Import torch后打印系统是否支持cuda,如果初出现True则说明安装成功!
print(torch.cuda.is_available())
到此就成功完成了pytorch0.2-gpu版本的安装和测试,接下来就可以愉快地进行玩耍测试了!
安装过程中出现的问题
1、分辨率发生变化:could not apply the stored configuration for monitors
好吧,在卸载掉所有nvidia驱动和cuda重新安装后,重启发现桌面分辨率出现问题…竟然找不到分辨率配置信息,导致出现的分辨率很低。我之前是1920*1080的分辨率
从网上查到了解决方法:
打开/etc/X11/xorg.conf
1、在Section “Monitor”中添加一行ModeLine
ModeLine "1920x1080" 148.5 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
2、根据monitor的手册修改Section “Monitor”中的水平和垂直扫描参数
HorizSync 31.469 - 75.0
VertRefresh 59.86 - 70.087
2、修改Section “Screen”下的SubSection “Display“里的Modes
增加”1920×1080” ,而且要排在第一个
3、重启电脑
参考资料
1、NVIDIA官网,CUDA-toolkit-documtation:
http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#pre-installation-actions