博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
玩玩机器学习1——ubuntu16.04 64位安装TensorFlow GPU+python3+cuda8.0+cudnn8.0
阅读量:4092 次
发布时间:2019-05-25

本文共 3679 字,大约阅读时间需要 12 分钟。

        如今的机器学习运算大多数都是利用gpu进行,包括很大大型游戏,比特币的开采,都离不开GPU的运算,GPU已成为大型运算能力的主要硬件。

       大名鼎鼎的机器学习开源框架,如TensorFlow和Caffe,Caffe2都建议使用GPU作为运算平台,有些著名的机器学习开源项目如Detectron物体检测更是明确要求了必须使用GPU作为运行环境。网上有开发者曾经提及到,使用GPU的运算效率起码是使用CPU的十倍以上。基于上述原因,我也着手搭建一个GPU运行环境,不过遇到了许多“新手坑”,浪费了不少时间调试,因此,这里写份博客来让有兴趣搭建GPU机器学习环境的小伙伴们,少走些歪路,更好地进行机器学习的研究。

      在这里首先要感谢两位作者,一是提供了CUDA和CUDNN的正确方法的

      另外一位则是提出了安装过程中许多人曾经遇到的黑屏、循环登录的解决办法

 

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下载地址:

cuda v6.0 Linux下载地址:

 3,使用以下命令查看Noueau驱动是否被加载

$ lsmod | grep nouveau# 如果打印出一些信息,说明Noueau被加载了,正常情况下会打印出一些关于nouveau的信息

创建/etc/modprobe.d/blacklist-nouveau.conf,写入:

blacklist nouveauoptions nouveau modeset=0
  •  

Reboot into text mode (runlevel 3)(重启,进入文本模式)

重启后按: Ctrl+Alt+F1 进入文本模式

这里写图片描述

 

停止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_PATHexport CUDA_HOME=/usr/local/cuda-8.0export 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 tfimport numpy as nphello=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不兼容!

《安装cuda9.1内核问题:Unable to locate the kernel source》

好吧,看来内核4.13.0不能用,要换成4.4.0。

更换内核

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

《安装cuda9.1内核问题:Unable to locate the kernel source》

安装完新的内核后,更换到新的内核(并不是新版本,我就是从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博客问问题的

你可能感兴趣的文章
那些C/C++宏定义中你可能忽视的符号意思
查看>>
两张思维导图,让你轻松学习数据结构
查看>>
数据结构-串(字符串类基本实现C++)
查看>>
数据结构-数组(数组基本实现C++)
查看>>
数据结构-栈(栈基本实现C++)
查看>>
数据结构-队列(队列的基本实现C++)
查看>>
数据结构-链表(链表的基本实现C++)
查看>>
数据结构-树(树基本实现C++)
查看>>
数据结构-图(图的基本实现C++)
查看>>
关于C/C++中const char*、char*、string之间那点事
查看>>
常用Git指令
查看>>
使用git命令行将本地仓库代码上传到远程仓库
查看>>
AI 图像智能修复老照片
查看>>
Linux操作系统概述
查看>>
Linux从入门到放弃之Ubuntu设置默认登录用户为root
查看>>
Linux从入门到放弃之VirtualBox下Ubuntu16.04版本的网络配置
查看>>
Linux从入门到放弃之VirtualBox下Ubuntu16.04版本的ssh配置
查看>>
求在平面直角坐标系中,一个点绕坐标原点旋转一定角度后点的坐标
查看>>
求两圆的公切线计算
查看>>
Boost学习之序列化
查看>>