系统:Ubuntu 16.04.5 LTS 64 位(内核:4.13.1-041301-generic自己装的、4.4.0-141-generic最开始的)
显卡:GTX1070(驱动:随cuda一起安装,没用软件和更新里的384.130)
软件:TensorFlow 1.12.0 + CUDA 9.0 + cuDNN v7.4.2
因为无线网卡驱动的原因,内核我装了4.13.1,后来升到4.16.1又降下来的,
升级内核过程https://blog.csdn.net/Kim0403/article/details/85545088
cuda9.0安装指南:https://docs.nvidia.com/cuda/archive/9.0/cuda-installation-guide-linux/index.html
首先查看TensorFlow已验证配置:https://tensorflow.google.cn/install/source
已经有1.13.0的测试版了,虽然支持Python3.7,但是需要Ubuntu18.04 + CUDA10.0,作为小白,不想尝试太新的东西。
所以打算安装TensorFlow1.12.0,之前自己安装了最新的NVIDIA驱动跟CUDA9.2,但是运行有问题。所以换CUDA9.0。
从官网https://developer.nvidia.com/cuda-toolkit-archive下载了cuda_9.0.176_384.81_linux.run
根据9.0官网教程
验证GPU是否具有CUDA功能
验证是否拥有受支持的Linux版本
验证系统上安装的gcc版本
确保安装正确版本的内核头文件和开发包。
以上四条一般不可能有问题。
安装指南建议尽可能使用特定于发行版的软件包,即RPM或Deb软件包。
我下载了runfile,感觉不更新本机软件包管理系统可能更好,我又不跨平台开发(跨平台仅限ubuntu)。
如果之前安装过其他版本的NVIDIA驱动,建议卸载。
步骤:https://blog.csdn.net/Kim0403/article/details/85700062
参照上面链接里的1.2.3.4步。即使没有安装过NVIDIA驱动,也要做到2.3.4这三步。
安装可能出现一些Missing recommended library:libxxx.so问题,先提前解决三个
sudo apt-get install libxmu-dev libxi-dev libx11-dev
按Ctrl+Alt+F1进入命令行模式安装
The CUDA driver cannot be installed while the Nouveau drivers are loaded or while the graphical interface is active.
所以先关闭图形界面
sudo service lightdm stop
然后安装
chmod a+x cuda_9.0.176_384.81_linux.run
sudo sh cuda_9.0.176_384.81_linux.run
有博主戏称EULA两公里长,按很久Enter,其实可以Ctrl+C直接跳过。
输入 accept 之后,会问你是否需要安装驱动,选择yes
还会询问是否安装OpenGL,我选的yes
这里说明一下,官网提到:If installing the driver, the installer will also ask if the openGL libraries should be installed. If the GPU used for display is not an NVIDIA GPU, the NVIDIA openGL libraries should not be installed. Otherwise, the openGL libraries used by the graphics driver of the non-NVIDIA GPU will be overwritten and the GUI will not work. If performing a silent installation, the --no-opengl-libs option should be used to prevent the openGL libraries from being installed. 大意是用于显示的GPU不是NVIDIA GPU,则不应安装NVIDIA openGL库。我只有独显工作,所以我安装了。
其他选项都是 默认 或者 yes
我驱动安装失败了一次,重新按步骤走了一遍,第二次成功了。驱动,CUDA9.0一起安装完成。
我们需要设置环境,在 ~/.bashrc 里设置一下cuda的环境变量
sudo gedit ~/.bashrc
在最后面加上
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda
使改动生效
source ~/.bashrc
检查安装成功木有
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176
最后运行示例,有的运行起来已经没问题了,比如bandwidthTest和deviceQuery结果均为pass。
cuDNN 的全称是 The NVIDIA CUDA® Deep Neural Network library,是专门用来对深度学习加速的库。
官网下载链接:https://developer.nvidia.com/rdp/cudnn-download
下载需要注册NVIDIA开发者。我选择了Download cuDNN v7.4.2 (Dec 14, 2018), for CUDA 9.0
然后选择 cuDNN Library for Linux,下载下来之后解压安装即可。
tar -zxvf cudnn-*.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda-9.0/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-9.0/lib64/ -d
sudo chmod a+r /usr/local/cuda-9.0/include/cudnn.h
sudo chmod a+r /usr/local/cuda-9.0/lib64/libcudnn*
这时可以发现在 /usr/local/cuda/include 目录下多了 cudnn.h 头文件。
我安装了Anaconda3,由于tensorflow暂时还不支持python3.7,所以用普通的命令安装时会出现找不到tensorflow可用版本的问题。所以,新建一个Python版本为3.6的tensorflow的环境,然后安装tensorflow。
conda create -n tensorflow python=3.6
可以看到提示
# To activate this environment, use
# $ conda activate tensorflow
# To deactivate an active environment, use
# $ conda deactivate
所以通过 conda activate tensorflow 指令,进入虚拟环境,执行安装指令
pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ tensorflow-gpu==1.12.0
如果直接执行pip install tensorflow-gpu==1.12.0,网速太慢。清华的源总是中途出错,所以用了中科大的源。
完成之后,输入 import tensorflow ,没有任何错误,至此完成安装。
卸载TensorFlow:
pip uninstall tensorflow-gpu==1.12.0
卸载cuDNN:
sudo rm -rf /usr/local/cuda/include/cudnn.h
sudo rm -rf /usr/local/cuda/lib64/libcudnn*
卸载NVIDIA驱动:
sudo /usr/bin/nvidia-uninstall
卸载CUDA9.0
sudo /usr/local/cuda-9.0/bin/uninstall_cuda_9.0.pl
有个样例无法运行:~/NVIDIA_CUDA-9.0_Samples/5_Simulations/nbody (跟opengl有关)
~/NVIDIA_CUDA-9.0_Samples/5_Simulations/nbody$ make
>>> WARNING - libGLU.so not found, refer to CUDA Getting Started Guide for how to find and install them. <<<
>>> WARNING - gl.h not found, refer to CUDA Getting Started Guide for how to find and install them. <<<
>>> WARNING - glu.h not found, refer to CUDA Getting Started Guide for how to find and install them. <<<
网上解决方法之一:https://www.jianshu.com/p/b3ecfa1df423
我略有不同,先找到libGLU.so
$ locate libGLU.so
/usr/lib/x86_64-linux-gnu/libGLU.so.1
/usr/lib/x86_64-linux-gnu/libGLU.so.1.3.1
然后创建软链接。
sudo ln -s /usr/lib/x86_64-linux-gnu/libGLU.so.1 /usr/lib/libGLU.so
libGLU.so不报错了,但是gl.h和glu.h还是not found.如果你仅有libGLU.so的问题,上述方法足以解决。
cuda官方给出的提示:Note: Installing Mesa may overwrite the /usr/lib/libGL.so that was previously installed by the NVIDIA driver, so a reinstallation of the NVIDIA driver might be required after installing these libraries.我尝试了一下,不动cuda仅卸载安装NVIDIA驱动完全不影响CUDA,但是我重装了驱动还是老样子,换驱动版本也没用……
除了上一段,官网还给了第二个方法,安装第三方库,但是我遇到了如下问题
$ sudo apt-get install freeglut3-dev libglu1-mesa-dev
下列软件包有未满足的依赖关系:
freeglut3-dev : 依赖: libgl1-mesa-dev 但是它将不会被安装 或
libgl-dev
libglu1-mesa-dev : 依赖: libgl1-mesa-dev 但是它将不会被安装 或
libgl-dev
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
$ sudo apt-get install libgl1-mesa-dev
下列软件包有未满足的依赖关系:
libgl1-mesa-dev : 依赖: mesa-common-dev (= 11.2.0-1ubuntu2) 但是它将不会被安装
依赖: libgl1-mesa-glx (= 11.2.0-1ubuntu2) 但是 18.0.5-0ubuntu0~16.04.1 正要被安装
依赖: libdrm-dev (>= 2.4.65) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
并且越往下越混乱……
我觉得跟内核版本无关,肯定不是驱动版本问题。官方文档也看了,各处博客论坛也查了,gl.h跟glu.h我无解。其他使用是正常的,涉及opengl就完了……问题就此先扔着吧,我应该用不着那俩。日后有了更新,我用18.04LTS。如果有问题跟我一样,还耐心看到了这里的,如果着急用,目前我建议放弃16.04,安装ubuntu17.10+cuda9.2。
相关链接:
https://developer.nvidia.com/cuda-toolkit-archive
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/
https://docs.nvidia.com/cuda/archive/9.2/cuda-installation-guide-linux/index.html