在实验室服务器上装tensorflow


这两天在服务器上装tensorflow,真是让人头大。

说一下背景,实验室是公用的centos服务器,管理员给了我一个账号,当然是没有root权限的,到时候数据软件啥的,如无必要,都要装到自己的目录下。在这种服务器上装软件,好处是人家管理员把该装的一些基本的东西都装好了,省去了很多步骤。当然,坏处就是,像我这种对linux不熟悉的,敲每个指令都战战兢兢,生怕一不小心就搞了某个公用的变量、配置、驱动、依赖之类的(实际上linux权限管理是比较方便的,一般不需要担心这个)。整个过程甚是曲折。

利用我的mac的终端登录服务器,用ssh [username]@[xx.xx.xx.xx] -p [port]命令,需要输入的是用户名,ip地址和端口编号,之后会让人输入密码,输完密码就登录了。登录后我首先检查了一些基本组件的版本。

python版本2.7,这是系统自带的,直接用就行。

cuda和cudnn,这个实际上决定了tensorflow要装哪个版本的,我一开始的想法是用服务器上安好的cuda和cudnn,于是就用下面两个指令查看了下版本。

cat /usr/local/cuda/version.txt

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

查询得到cuda版本8.0,cudnn版本6.0,在网上查一下对应表,得知对应的tensorflow版本应该是1.3或1.4

知道了这些信息我就准备装tensorflow了,安装方法非常多,官网上就提供了五种,最常用的是pip,anaconda和virtualenv,一开始,我是按照官网上anaconda的步骤进行安装。

首先需要下载安装anaconda,我是在本地电脑上下载了anaconda的安装包(https://www.anaconda.com/download/#macos),然后远程传输到服务器上执行,传输文件很简单,调用下面命令即可:

scp [本地文件完整路径]  [username]@[xx.xx.xx.xx]:[服务器端路径]  

执行安装文件后,它会有一系列询问与选项,中间会询问安装路径,不用默认路径的话,就输入自己的绝对路径就行,我没有用默认路径,后面还有一个关键的是系统会询问是否加入环境变量(.bashrc),我选择的yes,如果这一步选择no,就必须后面自己配置。安装完后,执行conda -V命令可以显示anaconda版本信息,显示了就说明安装成功了。然后在终端输入python,进入python环境,下面第一行中间有 |Anaconda, Inc.|的字样,说明进入ananconda环境也成功了,如果没成功,执行一下source .bashrc

安装完anaconda后,我是先按照官网上的步骤进行安装的,大致可以概括为安装anaconda--创建conda环境并激活--使用pip安装,具体的linux命令见网址(https://www.tensorflow.org/install/install_linux#InstallingAnaconda)。这个方法的好处是整个安装和将来运行都在你建好的那个conda环境中,不会与其他版本的python和tensorflow冲突,这里需要注意的是,如果服务器没有开vpn,那么官网的下载链接是用不了的,需要替换成清华的镜像(https://mirrors.tuna.tsinghua.edu.cn),在这个网站上选择tensorflow后,按照你的系统环境、python版本、gpu还是cpu、tensorflow版本进行选择后,它会提供给你需要输到终端里的链接网址。

用官网上的方法安装完后,就是无限的坑了,我试了下import tensorflow会报错,就是官网常见问题(https://www.tensorflow.org/install/install_linux#common_installation_problems)的第一个,可能稍有不同,比如我在试不同版本时,就先后出现了:

libcudart.so.8.0: cannot open shared object file: No such file or directory

libcublas.so.8.0: cannot open shared object file: No such file or directory

感觉这两种错误是类似的,都是有关cuda的,都可以参考(https://stackoverflow.com/questions/36159194/tensorflow-libcudart-so-7-5-cannot-open-shared-object-file-no-such-file-or-di)上的解决方案,我也百度了博客上的方案,比如输入以下命令

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

最终我也不知道解没解决这个问题,应该是解决了,因为系统开始报另外一个错误了😂,那就是:

ImportError: /lib64/libc.so.6: version `GLIBC_2.14' not found

具体报错的是GLIBC哪个版本忘了,反正都是这个形式,继续百度,发现是linux系统的GLIBC这个库没有所需要的新版本,然而,根据网上的说法和一个同学的指导,千万不要贸然去升级GLIBC,因为这是linux一个很底层的库,与centos版本密切相关,随便升级了,很可能shell都会崩溃。那唯一的办法,就是改变tensorflow版本,看能不能找到可以用的。于是我就从1.4版本一级一级地往下试,中间如果要卸掉某个版本的tensorflow,直接用命令pip uninstall tensorflow-gpu即可,当然uninstall后面的名字要正确,可以用pip list查看安装列表。

结果试验过程出现了可以说令我束手无策的局面:

随着版本的降低,glibc的问题消失了,前面说的关于cuda的错误又出现了,而且不是环境变量配置的问题,是低版本的tensorflow,需要使用cuda7.5,而服务器上的cuda8.0,无论怎么配置都是无用的,但是我如果升级tensorflow,cuda的版本是匹配了,glibc又不行了,这是一个无法解决的矛盾。

不得已请教了师兄,师兄建议直接用anaconda装,结果发现,之前都白忙活了,anaconda一键解决!!

没错你没有看错,使用anaconda安装而不用pip,一键解决!

第可能有人会问,之前不是就用的anaconda么?不,其实之前按照官网的步骤,anaconda只起到了搭建虚拟环境的作用,具体安装的命令还是用的pip,而所谓用anaconda安装,是直接调用conda install指令,具体步骤为:

首先搜索可使用conda安装的源:

anaconda search -t conda tensorflow

调用这个命令后,终端会输出所有可用的源

如图所示,从中选择一个源,输入:

anaconda show [name]

name就是上面列出的name那一列的名字,之后系统会给出要安装这个源的tensorflow所用的指令,比如我选择HCC/tensorflow-gpu,带入上面的指令输入,它会告诉我用:

conda install --channel https://conda.anaconda.org/HCC tensorflow-gpu

这个指令安装,需要注意的是如果直接用这个指令,它会安装所能安装的最新版,我一开始不知道这个,就直接调用了它给出的指令,安装了1.9版的tensorflow

按说安1.9版没有问题,因为anaconda安装最智能的一点就体现在这里,安装前它会自动分析你的环境,然后自动给你安装缺失的或版本不对的依赖,比如cuda,我也不知道它到底安在哪,但是应该是不会影响服务器的其他用户,它就把cuda9.0给我装上了,当然还有cudnn7.1。

装完之后,我进入python环境,输入import tensorflow竟然没有报错!!我以为安装成功了,结果继续往下一试就出问题了,运行sess=tf.Session时,检查完gpu,出现了如下报错信息:

cuda driver version is insufficient for cuda runtime version

没错,cuda版本太高,gpu驱动用不了了!这就没办法了,gpu驱动这东西,我是不能动了,动了的话,所有服务器上正在运行的程序要出大乱子,那么办法就是,安装低版本的tensorflow,从而使用低版本的cuda,从而可以适应服务器的驱动。

要安装指定版本的tensorflow,需要把前面安装的指令修改为:

conda install --channel https://conda.anaconda.org/HCC tensorflow-gpu=1.4

加一个版本信息就好了,比如我这里加的是1.4版本,这时,anaconda会自动给分析出来,在已经装了tensorflow1.9的情况下,安装tensorflow1.4,有哪些需要安装,哪些需要卸载,哪些需要更新,哪些需要降级,就是这么方便。

于是终于安装成功了,使用例子程序,成功打印了“hello”

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM