Ubuntu18.04完美搭建Tensorflow-gpu

2019-09-20 15:24:30 浏览数 (1)

Ubuntu18.04完美搭建Tensorflow-GPU1.8

0.导语

这是18年的最后一个工作日,为了这篇文章耗费了半天的时间来琢磨!

关于文章更新,后面不能保证每天一篇了,因为要放假回家了,哈哈!

18年回顾

光城

请输入

文章分享 互促共进

坚持分享,互促共进

Persist in sharing and promote mutual progress

共建共助

19年展望

光城

论文复现 刷爆offer

请输入

坚持刷题,直通Offer

Stick to the brush, go straight to Offer

共助刷题

今天这篇文章主要讲的是,我将我自己的系统全部删除掉,然后装上一个单系统,Ubuntu18.04!

然后在Ubuntu上搭建深度学习环境!

本次搭建环境,主要是在Ubuntu18.04版本,关于Centos系统搭建深度学习环境昨天也尝试了,驱动与cuda都装成功了!但可惜电脑莫名的启动不了了,然后就换成这次的Ubuntu了,总结了一下,发现Ubuntu比Centos简单了很多!

有时需要对自己狠一点,不留后路,就像这次换系统一样,全部卸载掉,只保留一个单Linux系统,让自己在Linux上重燃激情与活力,不断磨炼自己的学习毅力与能力!

1.驱动

1.1 检查

配置深度学习GPU环境之前,首先了解一下自己的GPU是否是CUDA-capable!

代码语言:javascript复制
lspci | grep -i nvidia

输入上述命令,会看到如下输出:

如果有,则支持,否则不支持!

1.2 禁驱动

不管是centos还是ubuntu系统,系统都会自带nouveau驱动,而这个驱动会影响后面的cuda安装,不当操作会出现黑屏现象!

现在来查看一下nouveau设备有没有,输入下面命令,如果有输出,则说明这个驱动正在加载!

代码语言:javascript复制
lsmod|grep nouveau

我们接下来需要做的工作就是禁用这个驱动!

编辑blacklist.conf配置文件

代码语言:javascript复制
sudo gedit /etc/modprobe.d/blacklist.conf

尾部追加:

代码语言:javascript复制
blacklist nouveau  
options nouveau modeset=0 

更新配置文件

代码语言:javascript复制
sudo update-initramfs -u

再次查看驱动是否被加载

代码语言:javascript复制
lsmod | grep nouveau

上述这个操作不能彻底禁用nouveau,则移除nouveau.ko与nouveau.ko.org文件即可!

如下操作:

代码语言:javascript复制
cd /lib/modules/4.15.0-29-generic/kernel/drivers/gpu/drm/nouveau 
sudo rm -rf nouveau.ko 
sudo rm -rf nouveau.ko.org

上述4.15.0-29不一定一致,这里直接tab补全就可以了,然后其他的同上!

随后,在做更新

代码语言:javascript复制
sudo update-initramfs -u

再检查

代码语言:javascript复制
lsmod | grep nouveau

如果还是有输出,则重启即可,否则没有输出,表示禁用成功!

1.3 安装nvidia驱动

上述原装驱动卸载后,开始装nvidia驱动!

  • 卸载原有nvidia驱动
代码语言:javascript复制
sudo apt-get remove --purge nvidia-*
  • 安装驱动

有两种方式安装:

第一种方式,直接打开“软件和更新”,然后找到附加驱动,直接选择nvidia驱动安装即可,但是不幸的是网速比较慢,容易出错,所以不建议这种方式安装,我第一次瞎搞,就这样搞,是不行的!

第二种方式,也是我建议的方式:

首先确定自己所需要安装的驱动版本:

代码语言:javascript复制
ubuntu-drivers devices

会看到:

代码语言:javascript复制
driver : nvidia-340 - distro non-free
driver : nvidia-driver-390 - distro non-free recommended 
driver : xserver-xorg-video-nouveau - distro free builtin

然后来安装驱动,一般看第二行,我们看到有个英文单词recommended,表示建议安装驱动!

代码语言:javascript复制
sudo apt-get install nvidia-driver-390

上述一键安装即可,安装完后,测试:

代码语言:javascript复制
nvidia-smi

输出:

若显示如上表,则表示驱动nvidia安装成功!

2.Cuda

2.1 版本

关于版本,我选择Cuda9.0!

下载地址:

https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1704&target_type=runfilelocal

进入上述下载地址后,我们发现选择的Ubuntu系统支持到17.04,我当时也纳闷了,没有18.04,那怎么搞呢?

想了半天不管了,最后果然,没得影响,所以直接按照我下面勾选的下载安装即可,不用纠结!

2.2 安装

输入下面命令,进行安装:

代码语言:javascript复制
sudo sh cuda_9.0.176_384.81_linux.run

中间会提示是否为NVIDIA安装,由于前面安装过了,所以选择no,其余默认即可,安装过程,如果修改了安装路径,请记住,后面配置需要用到!

2.3 环境变量

配置环境变量

代码语言:javascript复制
sudo gedit  /etc/profile

尾部追加

代码语言:javascript复制
export  PATH=/usr/local/cuda-9.0/bin:$PATH
export  LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64$LD_LIBRARY_PATH  

上述保存后,然后重启电脑!

2.4 测试Cuda

依次输入下面命令

代码语言:javascript复制
cd  /usr/local/cuda-9.0/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

如果显示GPU相应信息,则成功!

如下图所示:

额外的库文件安装

代码语言:javascript复制
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev

2.5 动态链接

编辑~/.bashrc文件

代码语言:javascript复制
vi ~/.bashrc

尾部追加

代码语言:javascript复制
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}}

打开环境配置文件

代码语言:javascript复制
sudo gedit /etc/profile

尾部追加

代码语言:javascript复制
export PATH=/usr/local/cuda/bin:$PATH

创建链接文件

代码语言:javascript复制
sudo gedit /etc/ld.so.conf.d/cuda.conf

添加

代码语言:javascript复制
/usr/local/cuda/lib64

执行生效

代码语言:javascript复制
sudo ldconfig

3.CudNN

3.1 版本

代码语言:javascript复制
cudnn-9.0-linux-x64-v7.tgz

下载地址:

https://developer.nvidia.com/cudnn

需要注册!

3.2 安装

解压并安装

代码语言:javascript复制
tar -xzvf cudnn-9.0-linux-x64-v7.tgz 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

更新链接

代码语言:javascript复制
cd /usr/local/cuda/lib64/  
sudo chmod  r libcudnn.so.7.0.3  # 自己查看.so的版本  
sudo ln -sf libcudnn.so.7.0.3. libcudnn.so.7  
sudo ln -sf libcudnn.so.7 libcudnn.so  
sudo ldconfig  

4.Anaconda3

4.1 版本

版本为:

Anaconda3-5.2.0-Linux-x86_64.sh

下载地址:

https://repo.continuum.io/archive/

这个5.2.0有bug!建议改为5.3以上!

4.2 安装

代码语言:javascript复制
bash Anaconda3-5.2.0-Linux-x86_64.sh

一直选择默认,回车就行!

中间的一个安装注意点:是否选择添加环境变量到~/.bashrc,选择是就可以了!

最后执行

代码语言:javascript复制
source ~/.bashrc

4.3 测试

输入python

显示上述Anaconda,则表示安装成功!可以看看conda命令是否可以使用!

5.Tensorflow-GPU

5.1 版本

版本:tensorflow-gpu-1.8

5.2 安装

直接输入:

代码语言:javascript复制
conda install tensorflow-gpu==.

最后发现,直接输入pip就可以了,所以上述换成:

代码语言:javascript复制
pip install tensorflow-gpu==.

两者区别是,cond安装会更新包,pip则不会!

6.测试

依次输入如下命令:

代码语言:javascript复制
import tensorflow as tf 
a = tf.constant([1.0,2.0,3.0],name='a')
b = tf.constant([3.0,4.0,5.0],name='b')
c = a   b
sess = tf.Session()
print(sess.run(c))

测试结果如下图:

看到[4. 6. 8.],并看到自己的GPU设备,测试成功!

但是发现了一个小的bug,上面导包的时候有个警告,这个可以忽略不计,但是为了追求完美,最后的解决方案是:重装h5py即可!

上图这个警告是h5py与numpy不兼容,我卸载后,然后重装,警告解决!

重装解决如下图:

导包后,没警告了,很完美!哈哈,终于安装完毕!

7.总结

由于cuda8.0以上不支持gcc5.0以上,所以要保证自己电脑的gcc与g 版本!将这两个进行降级,有关解决问题方案,网上很多,如果安装过程碰到可以留言,也可以谷歌!

希望通过本文,大家可以对深度学习环境有个更深刻的认识,并且深入了解Ubuntu系统的操作!

0 人点赞