如今的机器学习运算大多数都是利用gpu进行,包括很大大型游戏,比特币的开采,都离不开GPU的运算,GPU已成为大型运算能力的主要硬件。
大名鼎鼎的机器学习开源框架,如TensorFlow和Caffe,Caffe2都建议使用GPU作为运算平台,有些著名的机器学习开源项目如Detectron物体检测更是明确要求了必须使用GPU作为运行环境。网上有开发者曾经提及到,使用GPU的运算效率起码是使用CPU的十倍以上。基于上述原因,我也着手搭建一个GPU运行环境,不过遇到了许多“新手坑”,浪费了不少时间调试,因此,这里写份博客来让有兴趣搭建GPU机器学习环境的小伙伴们,少走些歪路,更好地进行机器学习的研究。
在这里首先要感谢两位作者,一是提供了CUDA和CUDNN的正确方法的
https://blog.csdn.net/ZWX2445205419/article/details/69429518,
另外一位则是提出了安装过程中许多人曾经遇到的黑屏、循环登录的解决办法
https://blog.csdn.net/AutoRobot410/article/details/52862479
1.安装前准备
GPU型号:NVIDIA GTX750 Ti
1.1 Verify You Have a CUDA-Capable GPU(确认你有一个可用CUDA的GPU)
$ lspci | grep -i nvidia
可以看到,我有三块可用的GeForce GTX 1080
,你可以在这里查看你的GPU是否是CUDA-caplable。
1.2 Verify the System Has gcc Installed(查证你是否安装了gcc)
$ gcc --version
2.下载对应cuda和cudnn
cuda 8.0 Linux下载地址:https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda_8.0.44_linux-run
cuda v6.0 Linux下载地址:cuDNN v6.0 (April 27, 2017), for CUDA 8.0
3,使用以下命令查看Noueau驱动是否被加载
$ lsmod | grep nouveau
# 如果打印出一些信息,说明Noueau被加载了,正常情况下会打印出一些关于nouveau的信息
创建/etc/modprobe.d/blacklist-nouveau.conf,写入:
blacklist nouveau
options nouveau modeset=0
Reboot into text mode (runlevel 3)(重启,进入文本模式)
停止X服务
$ sudo /etc/init.d/lightdm stop
sudo sh cuda_8.0.61_375.26_linux.run
-
此处千万不要选安装“Install Graphics Driver”!!!这样是重新安装显卡驱动,百分之百是不匹配的,千万不能选,很有可能导致你重启后一直循环登录!!
安装完成后重启桌面服务
$ sudo service lightdm start
在系统环境里设置CUDA的路径
$ vim ~/.bashrc # 编辑
~/.bashrc 的最后中添加如下代码
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:/usr/local/cuda-8.0/extras/CUPTI/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-8.0
export PATH=/usr/local/cuda-8.0/bin:$PATH
$source ~/.bashrc #配置立即生效
安装cuDNN
cd到cuda的安装目录执行解压命令:
$ cd /usr/local
$ sudo tar -xzvf ~/downloads/cudnn-8.0-linux-x64-v5.1.tgz
这样就完成了cuDNN的安装。
验证CUDA是否安装完成和CUDA版本:
$ nvcc -V
在ubuntu自己可以自动匹配找到相应的驱动的,当然你也可以自己根据自己服务器上的显卡型号去官网下载相应的驱动。
或者,如下:
我的已经按好了,应该是要重启一次的,会有提示。
接着再运行一下:
nvidia-smi
安装Python3.5.2版本和pip3
sudo apt install python3-pip
从清华大学开源镜像网安装tensorflow-gpu1.3.0
pip3 install https://mirrors.tuna.tsinghua.edu.cn/tensorflow/linux/gpu/tensorflow_gpu-1.3.0-cp35-cp35m-linux_x86_64.whl
运行Python的TensorFlow测试代码
import tensorflow as tf
import numpy as np
hello=tf.constant('luyanjie')
sess=tf.Session()
print (sess.run(hello))
出现GPU的信息则安装成功
其中遇到的错误
1,安装完CUDA后重启,一直循环进入登录界面,这时意味着你要卸载原有的显卡驱动,重新安装
进tty:Ctrl+Alt+F3
关闭X:
sudo service lightdm stop
然后卸载之前可能存在的驱动:
sudo apt-get --purge remove nvidia*
只需一条命令
sudo apt-get install nvidia-
有人问上面那条命令没写完啊,其实就是写这么多,然后猛击tab键两次(也可以轻点),下面就会出来许多版本的驱动,当然是安装一个版本最高的,例如
sudo apt-get install nvidia-352
即可。
sudo reboot
2,提示内核错误
The driverinstallation is unable to locate the kernel source. Please make surethat the kernel source packages are installed and set up correctly.If you know that the kernel source packages are installed and set upcorrectly, you may pass the location of the kernel source with the'–kernel-source-path' flag.
经过google和百度,得知原因很简单:cuda9.1和 ubuntu16.04中linux内核4.13不兼容!
更换内核
linux更换内核很简单,一个系统中可以安装多个内核,也可以在开机的时候通过grub来选择要启动的内核。首先我们要做的是先看自己系统中现在存在几个内核。
提前了解
使用uname -r
查看当前使用的内核。
然后我们明确几个有关内核的文件:
- /etc/default/grub 定义了有关启动过程的一系列设置,比如设置内核启动顺序、系统等待启动时间、或者启动过程中相关设置等;
- /boot/grub/grub.cfg 注意一下这个文件是由上一个文件而自动生成的,不建议修改这个文件的内容
- /etc/grub.d 是操作系统菜单目录,也是由系统生成,我们也不用修改。
更换方法
我当前的内核是4.13.0,我要安装4.4.0的内核,使用下面的命令:
sudo apt-get install linux-headers-4.4.0-98-generic linux-image-4.4.0-98-generic
执行完这个命令之后,可以到/boot/grub中看现在存在的kernels
安装完新的内核后,更换到新的内核(并不是新版本,我就是从4.13转为4.4)的方法:
- 进入grub启动界面,在系统启动时按住shift一段时间即可,选择你刚才安装的内核即可(每次都要这样选,有点麻烦)。
- 查看当前内核启动顺序
grep menuentry /boot/grub/grub.cfg
,然后修改/etc/default/grub
中的内容修改GRUB_DEFAULT,默认为0,根据顺序改成你要启动的内核顺序就行(从0开始)。 - 第二个方法有可能失败,终极方法是删除掉所有多余内核!直接修改/boot/grub/grub.cfg中的内容:在/boot/grub目录中,执行
sudo rm -rf *4.13.0-38*
这个命令是删除掉这个目录内所有4.13内核的文件,然后将/boot/grub/grub.cfg中所有有关4.13的信息全部删除。全部给为新的内核。
修改/etc/default/grub中GRUB_DEFAULT=”Ubuntu,Linux 4.4.0-98-generic“
最后弄完别忘了执行sudo update-grub
来对你之前的设置进行更新。
如有问题,请咨询我的qq:1290851757,备注:csdn博客问问题的