tensorflow的安装和注意事项

想了一下还是把tensorflow安装的过程整理一下吧,万一时间久了忘了呢。

终于tensorflow的安装可以告一段落了,内心还是很兴奋的,这次还是好好的整理下。

尤其是注意的地方,往往时我折腾了好久,查阅了大量的资料,测试了好多次,才验证出来的硕果。

1、准备工作

  1、更换源,好的软件源,直接决定你的安装速度。这里选择清华的。

  操作:进入:设置 --> 软件和更新 --> Ubuntu软件,打开下载自:选择 其他,选择清华。点击 选择服务器 确认,在弹出框选择,重新载入。

  2、更新软件包,防止有些工具没有安装上。

sudo apt update

  3、打开:设置 --> 软件和更新 --> 附加驱动

  选择NVIDIA公司专有的最新驱动,选择应用更改。时间较长,请耐心等待。

2、安装cuda

  下载文件,这里我选择run本地文件,进入文件所在目录,并运行,XXX代指文件名,历史版本

sudo sh XXX.run

  安装注意,这时会出现很多信息,按ctr+c关闭信息,再按accept接受。

  接下来询问是否,安装驱动,输入n,不要安装。因为已经安装过。

  一路输入y,或者回车。

  进入/home/用户名/NVIDIA_CUDA-8.0_Samples/1_Utilities/deviceQuery,打开终端,输入

sudo make

  然后输入

./deviceQuery

  如果显示pass,说明cuda安装成功,如果显示说,cuda驱动不满足于cuda运行库,说明驱动太旧,或者cuda太新。参照修改。

3、下载并安装cudnn(本段参照于http://blog.csdn.net/m0_37924639/article/details/78785699)

  下载cudnn,安装CUDNN

  进入CUDNN安装包所在目录,执行以下命令:

sudo dpkg -i runtime包.deb
sudo dpkg -i developer包.deb
sudo dpkg -i 代码sample包.deb

  报错查看此项https://blog.csdn.net/u011636567/article/details/77162217

  至此,CUDNN安装完成。

  验证CUDA和CUDNN是否安装成功

  CUDNN的code sample可以用来检查CUDNN和CUDA是否安装成功,执行以下命令:

sudo cp -r /usr/src/cudnn_samples_v7/ $HOME
cd $HOME/cudnn_samples_v7/mnistCUDNN
sudo make clean
sudo make
sudo ./mnistCUDNN

  正常情况下执行以上代码会得到Test passed!的结果。如果在make步出错,那么可能gcc需要降级(由于一直未出现类似错误,作者未验证);

  如果出现CUDA driver version is insufficient for CUDA runtime version,说明你的显卡驱动版本低于cuda工具包的版本。

  如果下载的是压缩包,那个运行库,可以使用下面的。

cd  /home/***(自己的用户名)/Desktop/###(这个命令意思是找到刚刚我们用U盘传过来的文件)
tar xvzf cudnn-8.0-linux-x64-v5.1-ga.tgz###(解压这个文件)
sudo cp cuda/include/cudnn.h /usr/local/cuda/include###(复制)
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64###(复制)
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

4、版本说明

  1、显卡驱动要高于cuda版本,cudnn要选择和cuda版本一样的

  2、建议安装的cuda版本和驱动的版本一致,比如我的驱动目前只能是384.11(9.0版本),最好安装cuda工具包9.0

  3、安装对应的cudnn9.0

4、安装tensorflow  

在配置完cudnn之后,可以直接在终端输入

sudo pip install tensorflow==1.5.0

或者安装CPU版本

sudo pip install tensorflow==1.5.0

如果网速不好的话,也可以自己在https://github.com/tensorflow/tensorflow下载whl文件,往下翻,在installation下面,然后使用

sudo pip install xxx.whl

 5、简便安装的方法

如果确定了自己的显卡支持的最高版本驱动,可以直接参照下面的方法:

1、cuda的下载和安装

  下载适合你的cuda版本(包含驱动,即驱动版本)

  关闭目前的图形界面,

sudo service lightdm stop

  按住ctr + alt + f1,进入命令行界面,输入帐号和密码,并且登录。

  进入你的cuda下载目录,比如我的在Download里面

cd Download
sudo sh XXX.run --silent --overide

  不输入参数,先accept,一路y或者回车默认

  打开图像界面

sudo service lightdm start

  进入图形界面,按下ctr + alt + f7

  进入用户主路径

cd ~

  进入cuda的例子make并且运行,验证是否正确安转cuda

cd /home/shuailing/NVIDIA_CUDA-9.0_Samples/1_Utilities/deviceQuery
make
./dedeviceQuery

  如果最后一行显示pass,说明安装成功。

  注意:这个方法,我在工作站安装成功,在自己的电脑上失败,出现的现象时,反复登录。

  解决方法:先安装显卡驱动,在安装cuda,在安装cuda的时候,询问是否安装cuda驱动(显卡驱动),选择否。

  如果,出现了重启可以切换回之前的驱动。

2、下载并安装cudnn

  下载cudnn,安装CUDNN

  进入CUDNN安装包所在目录,执行以下命令:

sudo dpkg -i runtime包.deb
sudo dpkg -i developer包.deb
sudo dpkg -i Codesample包.deb 

注意:这里需要按照这个顺序来进行,负责最后的代码测试包,是无法安装的。

  如果测试说,找不到,libdart文件,说明没有把 cuda的lib库加入LD_LIBRARY_PATH中。

  这个之前也加入过,但是总是有其他的意外,这里把加入环境变量,再说一便。

sudu gedit .bashrc

  把下面两行加入.bashrc最后

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

  输入下面命令使其立即生效,之前的cudnn测试的窗口。需要重新打开,才能更新新的环境变量。

source .bashrc

  如果是解压放入到库中的,还需要对其libcudnn进行链接,ln -s 源文件 目标文件

3、安装tensorflow-gpu

  下载tensorflow-gpu,之后进入下载路径

  pip安装

sudo pip install tensorflow_gpu-1.6.0-cp27-cp27mu-manylinux1_x86_64.whl

这个tensorflow-gpu==1.6.0,需要实测,cuda9+cudnn7.0可以用,之前用cuda9+cudnn7.1运行程序说,找到cudnn7.1版本,但是期望是7.0。程序报错。

4、验证

python
import tensorflow

  不报错说明安装成功。  

6、源码安装

1、克隆tensorflow

git clone https://github.com/tensorflow/tensorflow

2、进入下载目录的tensorflow主目录,配置编译环境

./configure

  除了Cuda、Cudnn相关的yes,其余的不相关的都选择n。剩下的默认回车就好。

3、完成之后编译

sudo bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
sudo mkdir /tmp/tensorflow_pkg
sudo bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
sudo pip install/tmp/tensorflow_pkg/tensorflow-1.2.0rc2-cp27-cp27mu-linux_x86_64.whl

  之前因为权限不够,编译出错不加载,执行第三条说找不到文件。现在全部加了权限。

4、参照上面的测试

5、最后的注意:

  描述:在我运行程序的时候,终端运行正常使用GPU,可是在pycharm中运行就报错,说找不到libcublas.so.9.0.源码编译的时候也说找不到/usr/bin/ld的什么文件。

  尝试的方法:tensorflow降级,结果不可以。实际上我的cuda和cudnn都是要求的9.0和7.0,明明在/usr/local/cuda/lib64中可以找到这个文件的。可是不论是降级还是配置cudnn的libcudnn.so的链接都不行。

  后来,在手机上偶然查到。

  解决方案:在/etc/ld.so.conf中最后一行添加/usr/local/cuda-9.0/lib64。或者在ld.so.conf.d这个目录新建一个档案,以.conf结尾(建议),最后输入sudo ldconfig使其立即生效。

  解释:其实上面那个含有libculas的路径,正常的已经被添加到LD_LIBRARY_PATH中了,可是程序运行的时,不一定回读到这个变量,所以需要设置/etc/ld.so.conf把,含有libcublas的路进加入的系统中。