Ubuntu16.04 安装显卡驱动+cuda8.0+cudnn-v6+TensorFlow-gpu

时间:2023-01-29 22:45:51

 TensorFlow版本的Faster-rcnn   https://github.com/smallcorgi/Faster-RCNN_TF   

 说明:以前自己写过一篇环境配置的文章,但是现在遇到新的问题,驱动一直安装不上。这和Ubuntu的内核有关。所以在此重新写了一篇。                                                                                                                                                                   环境:Ubuntu16.04 内核4.13                                                                                                                                      

显卡:GTX1050Ti 2G

英伟达显卡和cuda相关安装文档:

https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#abstract
http://us.download.nvidia.com/XFree86/Linux-x86_64/390.59/README/installdriver.html#OtherFeaturesOfd7638
http://wiki.ubuntu.org.cn/index.php?title=NVIDIA&variant=zh-cn
https://wiki.gentoo.org/wiki/NVidia/nvidia-drivers

一、Ubuntu内核版本降级

1、查看已安装内核:

sudo dpkg --get-selections |grep linux-image

示例:

linux-image-4.4.0-21-genericinstall
linux-image-4.4.0-66-generic deinstall
linux-image-4.4.0-70-generic deinstall
linux-image-4.4.0-71-generic install
linux-image-4.4.0-72-generic install

2、查看当前使用内核版本

uname -r

如果显示:4.13.0-36-generic

 3:删除内核
tip:删除当前版本重启会使用低一级的已安装内核,如果是最后一个内核版本删除之后重启会进入BIOS界面

sudo apt-get remove linux-image-4.4.0-75-generic
 4:升级/安装内核
sudo apt-get install linux-image-4.4.0-75-generic

上面的命令是在线安装,也可以手动下载内核后,安装内核。看这篇文章:https://blog.csdn.net/ytusdc/article/details/79675410

  5、安装内核头文件

sudo apt-get install linux-headers-$(uname -r)
查看内核头文件,
dpkg-query -s linux-headers-$(uname -r)

参考链接:1、http://blog.sina.com.cn/s/blog_413d250e0102xaoc.html

                2、http://blog.sina.com.cn/s/blog_16b01ecd40102xkrf.html

二、安装显卡驱动

1、禁用nouveau驱动,参看以前写的文章。

寻找合适的驱动版本

ubuntu-drivers devices

2、安装显卡驱动,基本过程一致,但是在安装run文件时有些不同。

 sudo ./NVIDIA-Linux-x86_64-384.59.run –no-opengl-files
  •       --no-opengl-files:表示只安装驱动文件,不安装OpenGL文件。这个参数不可省略,否则会导致登陆界面死循环,英语一般称为”login loop”或者”stuck in login”。
  •       –no-x-check:表示安装驱动时不检查X服务,非必需。
  •       –no-nouveau-check:表示安装驱动时不检查nouveau,非必需。
  •       -Z, --disable-nouveau:禁用nouveau。此参数非必需,因为之前已经手动禁用nouveau
  •       -A:查看更多高级选项。

      必选参数解释:因为NVIDIA的驱动默认会安装OpenGL,而Ubuntu的内核本身也有OpenGL、且与GUI显示息息相关,一旦NVIDIA的驱动覆写了OpenGL,在GUI需要动态链接OpenGL库的时候就引起问题。

nvidia-smi 查看显卡是否安装成功,我的nvidia-settings命令始终报错,但是其他正常,只是电脑不能调节亮度

三、安装cuda

  sudo ./cuda.run --no-opengl-libs

      --no-opengl-libs:表示只安装驱动文件,不安装OpenGL文件。必需参数,原因同上。注意:不是-no-opengl-files。
      --uninstall (deprecated):用于卸载CUDA Driver(已废弃)。
      --toolkit:表示只安装CUDA Toolkit,不安装Driver和Samples。

      --help:查看更多高级选项。

  cudnn配置安装参见另一篇文章。

四、安装TensorFlow

具体安装时少什么安装什么。

安装TensorFlow,注意这里安装的事1.4版本的,因为我们用的cuda版本是8.0的,1.5以上版本的TensorFlow需要cuda9.0.

sudo pip install tensorflow-gpu==1.4   # 安装1.4版本的
sudo pip install tensorflow-gpu          # 默认安装的事最新版本的


遇到的问题:

1、安装TensorFlow时会提示更新pip,pip更新到10版本之后,安装命令会报以下错误

错误: ImportError: cannot import name ‘main‘

找到这个pip文件做以下更改,cd /usr/bin,具体位置根据报错修改,把

from pip import main
if __name__ == '__main__':
    sys.exit(main())

改为:

from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

2、问题描述: error while loading shared libraries: libcudart.so.8.0: cannot open shared object file: No such file or directory

解决办法:

先试一下命令

sudo ldconfig /usr/local/cuda/lib64 
如果依然报错,则执行下面的命令后,再执行一遍这个命令

首先确认/etc/profile中的路径包含了cuda8.0的安装路径及相应的库文件

export PATH=$PATH:/usr/local/cuda-8.0/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-8.0/lib64

使配置文件生效:

source /etc/profile

若仍提示相同的错误,则执行以下命令,将相应的库文件复制到/usr/lib

sudo cp /usr/local/cuda-8.0/lib64/libcudart.so.8.0 /usr/local/lib/libcudart.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcublas.so.8.0 /usr/local/lib/libcublas.so.8.0 && sudo ldconfig
sudo cp /usr/local/cuda-8.0/lib64/libcurand.so.8.0 /usr/local/lib/libcurand.so.8.0 && sudo ldconfig
sudo ldconfig /usr/local/cuda/lib64    #执行命令

ldconfig命令是一个动态链接库管理命令,是为了让动态链接库为系统共享 

TensorFlow 安装完成后,安装faster-rcnn报错

1.编译过程中 nsync_cv.h:No such file or directory,使用python虚拟环境会存在该问题。
解决:根据提示路径找到mutex.h文件,修改其中代码

#include "nsync_cv.h"
#include "nsync_mu.h"

改为

#include "external/nsync/public/nsync_cv.h"
#include "external/nsync/public/nsync_mu.h"
再打开lib文件夹下的make.sh文件添加下述内容,重新编译即可

NSYNC_INC=$TF_INC"/external/nsync/public"

2.运行demo过程中遇到的错误

undefined symbol: _ZTIN10tensorflow8OpKernelE
这个问题卡得最久,因为make.sh文件中缺少了TF_LIB编译参数,还需要添加 -D_GLIBCXX_USE_CXX11_ABI=0
解决:

(1)修改make.sh添加TF_LIB,并修改相应的编译参数

TF_LIB=$(python-c 'import tensorflow as tf; print(tf.sysconfig.get_lib())')
g++-std=c++11 -shared -o roi_pooling.so roi_pooling_op.cc-D_GLIBCXX_USE_CXX11_ABI=0 \
roi_pooling_op.cu.o-I $TF_INC -L $TF_LIB -ltensorflow_framework -D GOOGLE_CUDA=1 \
-fPIC$CXXFLAGS -lcudart -L $CUDA_PATH/lib64

4.缺少yaml库

查了网上的方法,都是这样的
sudo apt-get install python-yaml
我试了,但是在虚拟环境中还是无法import,最后直接下载库,手动安装。注意,是在虚拟环境中,通过pythonsetup.py install 进行安装。


yaml 下载地址 http://pyyaml.org/download/pyyaml/PyYAML-3.12.tar.gz

参考链接:

https://www.cnblogs.com/danpe/p/7825357.html

https://blog.csdn.net/zhongxinleishi/article/details/78972944