写在最前面, 因为我们用的tensorflow这个谷歌的AI框架,而且用的是官网的按照保,所以下面的都是按照tensorflow官网的要求和规则来做。其他自己框架或者自己编译的安装的小伙伴们不一定适用。
第一步其实并不是安装安装 NVIDIA cuda, 而是先要选择好操作系统,这个很重要因为现在tensorflow官网只对ubuntu, maxOS, windows的错误进行维护,其他系统的错误就要靠自己囖。
说操作系统重要还有一点就是cuda会依赖不同的操作系统的自带驱动包,然后要根据你的显卡核心版本去下载不同版本的cuda的安装包,不同的tensorflow版本又只能支持对应版本的cuda驱动,如果错了一点可能又要删除重新弄,建议如果是新机器还是用最新的稳定版的系统为好。下面的步骤是针对ubuntu16.0.4和centOS 7的,而且亲测有效(花了两三天时间才装好的)
==========================================真正的开始===========================================
安装 NVIDIA cuda
文档:
总目录:https://developer.nvidia.com/cuda-toolkit-archive
最新版本:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-nouveau
自选版本:https://docs.nvidia.com/cuda/archive/9.0/cuda-installation-guide-linux/index.html
1. 选择 runfile下载 cuda_9.0.176_384.81_linux-run, 在发帖之前tensorflow到了1.9版本,但是官方的安装包都只支持cuda9.0,更高版本的cuda需要自行修改源码去支持了,所以这里选择了9.0的包。在下载之前官网文档上还有一个Pre-installation Actions 的步骤,这个步骤里面的每一小步也是很重要的所以大家一定要看清楚,这些步骤会叫你怎么选择cuda版本,怎么查看系统是否支持等信息,所以每一步都要看喔~!
2. 下载完成之后 运行 "sudo sh cuda_9.0.176_384.81_linux-run" ,然后看到一大堆文档不断的空格键
3. Do you accept the previously read EULA?
accept/decline/quit: accept(没什么好说的了直接敲accept)
4. Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 396.26?
(y)es/(n)o/(q)uit: n (这里是说安装显卡驱动,但是不建议用cuda自带的显卡驱动包,因为这很大可能跟你的显卡的版本对不上,一旦对不不上后面的安装可能出错,即使不出错在时间使用的时候也会报莫名其妙的错误,所以还是自己到这里https://www.geforce.com/drivers 去下载显卡驱动安装。可以先装显卡驱动也可以装完cuda再装。)
5. Do you want to install the OpenGL libraries?
(y)es/(n)o/(q)uit [ default is yes ]: n (这是nvidia自己的opencv 没有用的,要用就用直接的opencv官网安装也很简单,所以这n)
6. Do you want to run nvidia-xconfig?
This will update the system X configuration file so that the NVIDIA X driver is used. The pre-existing X configuration file will be backed up. This option should not be used on systems that require a custom X configuration, such as systems with multiple GPU vendors. (y)es/(n)o/(q)uit [ default is no ]: n (没什么用处所以n)
7. Install the CUDA 9.2 Toolkit?
(y)es/(n)o/(q)uit: y (猪脚在这里只能是y了)
8. Enter Toolkit Location
[ default is /usr/local/cuda-9.2 ]: (直接回车)
之后就是一堆很丑陋的命令行模拟界面的提示信息,一直Ok就可以
最后成功安装
=========== = Summary = ===========
Driver: Disable
Toolkit: Installed in /usr/local/cuda-9.0
Samples Installed in /home/luzhanbo/data/source/cuda_samples Please make sure that
- PATH includes /usr/local/cuda-9.0/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-9.0/lib64, or, add /usr/local/cuda-9.0/lib64 to /etc/ld.so.conf and run ldconfig as root
========================================完美分割线=============================================
你以为这样子就好了么,骚年你还是太年轻了,安装后才是踩坑的时候。下面是遇到过的坑希望能帮到大家 ~~!
1. 运行tensorflow发现还是会提示缺很多的包,因为cuda的包并没有加入到环境变量里面,所以找不到按下面的把cuda的安装路径下面的lib64和bin都放到环境路径就可以
vim /etc/proflie
#set nvidia cuda env
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}}
2. 没有 /dev/nvidia* 这个文件, 把这里的https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications script写在一个运行文件里面运行一次就可以
3. tensorflow每一个build的版本都只能对应某些CUDA的版本,因为tensor在调用的时候会根据版本号去调用api,本人就试过安卓9.2版本的CUDA+tensorflow1.6,结果调用出错因为1.6版本的tensorflow依赖的是一个包libcublas.so.9.0,而9.2版本的CUDA装的是9.2的libcublas.so 这就尴尬了。
4. 运行tensorflow,报错找不到libcudnn的包 去nvidia下载 https://developer.nvidia.com/rdp/cudnn-archive(估计是nvidia特意留坑要你去注册)找到 cudnn-9.0-linux-x64-v7.tgz 这个对应cuda9.0的cudnn包,解压后有一个cuda目录然后 sudo cp lib* /usr/local/cuda/lib64/, 然后 sudo cp cudnn.h /usr/local/cuda/include/ 分别拷贝到cuda对应的文件夹就可以,如果是用安装包的那就 cd cudnn-6.5-linux-R1 或者 locate cudnn 找到对应的lib目录在cp就可以。
5. cp /lib/udev/rules.d/40-vm-hotadd.rules /etc/udev/rules.d
6.显卡驱动和显卡版本不兼容的问题,上面安装的步骤里面已经提过,一旦不兼容用的时候回报很多莫名其妙的错
2018-06-01 17:09:23.275631: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:189] libcuda reported version is: 384.81.0
2018-06-01 17:09:23.275660: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:193] kernel reported version is: 384.130.0
2018-06-01 17:09:23.275668: E tensorflow/stream_executor/cuda/cuda_diagnostics.cc:303] kernel version 384.130.0 does not match DSO version 384.81.0 -- cannot find working devices in this configuration 错误
kernel 是内核版本, libcuda 是cuda版本 下载驱动,不要用apt-get自动更新显卡驱动!不要用apt-get自动更新显卡驱动!不要用apt-get自动更新显卡驱动! https://www.geforce.com/drivers 自己下对于的驱动吧~!
7. centOS执行以下命令,查找编译gcc时生成的最新动态库:
find / -name "libstdc++.so*"
LD_PRELOAD=/usr/local/glibc-2.14/lib/libc-2.14.so ln -s /lib64/lib64/libc-2.17.so /lib64/libc.so.6