ubuntu16.04安装cuda8.0 和cudnn5.1(多个cuda、天坑tensorflow)
背景
以下只能解决特定问题,普遍问题不能解决,建议参考参考博客内容进行选择。
文本摘要界中有一个很著名的论文,叫做Get to the point(指针生成模型),最近需要复现一下相关论文。然后踩坑就开始了。
过程
代码地址,有兴趣的可以挑战一下。其实这玩意说难也难,说不难也不难。难就难在配置环境上,真的是踩坑无数。我按照一步一步配置下来,获得数据集步骤可以参考这篇博客,会讲解处理数据集的过程,但是具体还得看人家写的英文文档。
处理好了之后,觉得还有点小成就,然后就安装tensorflow跑,直接报错:大概说的是类型转换出现了问题。
不出意外,死活不会改人家的代码。只好换方法,找到上述的代码地址,看到作者tensorflow用的是1.2.1的,我寻思我也安装跟作者一样的,结果就可以正常跑通,然后就想着先跑着吧。跑了一上午、一下午、一晚上、又一上午,感觉训练的速度好慢,就想着要不用gpu跑跑试试?然后手贱的在正在使用的环境中输入了pip install tensorflow-gpu==1.2.1
,然后就没有然后了。
安装cuda8.0
既然程序崩了,那就好好整理下,那就非得用GPU跑它不行。
首先找到一个表格:
在这里插入图片描述
从这里我们可以看出我们使用1.2.1那么需要安装的是cuda8和cudnn5.1。
我使用的是ubuntu16.04,然后输入/usr/local
查看由多少个cuda:
![在这里插入图片描述](https://img-blog.csdnimg.cn/202012102011473.png)
可以看到有cuda9.0、cuda9.1,这就证明我们需要在一台机器上安装多个cuda。
步骤:
-
下载cuda8.0,百度网盘在这:链接:https://pan.baidu.com/s/1aXhnaIuM5cgyQ1sneYmbFQ
提取码:a5kk 。 -
将这个文件拷贝到算法服务器的指定位置,并使用指令解压:
tar xvzf cuda_8.0....
-
解压之后直接开始安装:sudo sh cuda_8.0.61_375.26_linux.run。
-
#..一堆协议说明... #直接按q退出协议说明. zerozone@zerozone: accept/decline/quit: accept #接受协议 Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26? y)es/(n)o/(q)uit: n #是否显卡驱动包,由于已经安装显卡驱动,选择n Install the CUDA 8.0 Toolkit? (y)es/(n)o/(q)uit: y #是否安装工具包,选择y Enter Toolkit Location [ default is /usr/local/cuda-8.0 ]: #工具包安装地址,默认回车即可 Do you want to install a symbolic link at /usr/local/cuda? (y)es/(n)o/(q)uit: y #添加链接**注意这个连接,如果你之前安装过另一个版本的cuda,除非你确定想要用这个新版本的cuda,否则这里就建议选no,因为指定该链接后会将cuda指向这个新的版本** Install the CUDA 8.0 Samples? (y)es/(n)o/(q)uit: y #安装样例 Enter CUDA Samples Location [ default is /root ]: #样例安装地址默认即可 # ***安装信息*** Installing the CUDA Toolkit in /usr/local/cuda-8.0 ... Missing recommended library: libXi.so Missing recommended library: libXmu.so #注意,这里出现了Missing recommended library错误, # 如果出现了错误:执行这条指令 # sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev # 我没有出现,所以直接略过这条指令了,我执行这条指令,需要我安装matlib,有点迷。所以就没执行这段指令,后来发现也能用。 #是因为博主在第一次安装时,没有添加最开始的那条安装相关依赖的指令, #之后我添加了依赖后,再次安装,就没有Missing错误了 Installing the CUDA Samples in /root ... Copying samples to /root/NVIDIA_CUDA-8.0_Samples now... Finished copying samples. =========== = Summary = =========== Driver: Not Selected Toolkit: Installed in /usr/local/cuda-8.0 Samples: Installed in /root, but missing recommended libraries Please make sure that - PATH includes /usr/local/cuda-8.0/bin - LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-8.0/bin Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-8.0/doc/pdf for detailed information on setting up CUDA. ***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 361.00 is required for CUDA 8.0 functionality to work. To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file: sudo <CudaInstaller>.run -silent -driver Logfile is /tmp/cuda_install_6388.log # ***安装完成***
-
配置CUDA相关环境
# 或者输入这些指令: Tensorflow官方安装历程要求注意的是:配置PATH和LD_LIBRARY_PATH和CUDA_HOME环境变量. vim ~/.bashrc #修改配置文件(如果你用的是zsh,则需要修改 ~/.zshrc文件) #在文件结尾处添加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64 export PATH=$PATH:/usr/local/cuda/bin export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
-
如果需要版本切换的话,可以参考这篇文章,通过软链进行更换的,但是我发现我不更换也能用。1.8的和1.2.1的都能正常使用gpu。待会还需要验证下。
安装cudnn5.1
百度网盘下载:链接:https://pan.baidu.com/s/1UUUgevH6xX9R1-BX5olaTQ
提取码:hoe7
安装过程
-
解压
tar -zxvf cudnn-8.0-linux-x64-v6.0.tgz
-
在当前目录下查看都有什么文件:
-
拷贝指定文件到指定目录
$cd cuda $sudo cp lib64/lib* /usr/local/cuda/lib64/ $sudo cp include/cudnn.h /usr/local/cuda/include/
-
如果有软链的话,建议这样更新:
$ sudo chmod +r libcudnn.so.6.0.21 $ sudo ln -sf libcudnn.so.6.0.21 libcudnn.so.6 $ sudo ln -sf libcudnn.so.6 libcudnn.so $ sudo ldconfig
这时候再使用tensorflow1.2.1的话应该没什问题了。但是有一点比较疑惑,为什么我配置了1.2.1的环境,tensorflow1.8.0的还能用。有点迷。
报错记录
-
ImportError: libcudnn.so.5: cannot open shared object file: No such file or directory
安装cudnn就行了。
-
ResourceExhaustedError (see above for traceback): OOM when allocating tensor of shape [9216,4096] an
很明显,OOM,out of Memory,显存不够了,调小参数就行。
-
TensorFlow报错FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated......
重新安装numpy-1.16-0 安装版本太高了,更换即可