离线服务器之gcc,g++,cuda,cudnn版本更新

离线服务器之gcc,g++,cuda,cudnn版本更新

服务器:root 普通用户 centos7.5

状态:root权限安装,离线,提供给普通用户高版本使用

项目1:更新gcc,g++

由于需要运行cw2vec(https://github.com/noobiegz/cw2vec)需要c++11,本机的gcc为4.8.5,至少需要5.0的。因此进行升级。

首先尝试yum install gcc,gcc-c++,服务器会进行更新,但版本还是4.8.5。在https://mirrors.ustc.edu.cn/gnu/gcc/gcc-8.1.0/ 。下载gcc安装教程可以参考:https://blog.csdn.net/hanzheng260561728/article/details/75125891。要点在于离线情况下,./contrib/download_prerequisites无法自己安装需要的包。因此需要手动安装需要的包,从download_prerequisites可以查看依赖包名和版本。然后跟着教程,一个个编译安装即可。

在gcc的 make install完成后,通过查看gcc –v和g++ -v查看当前版本。如果两者都为高版本且一致,说明安装成功。但是发现在普通用户下执行编译出错。Bug为:

gcc: error trying to exec ‘cc1plus’: execvp: 没有那个文件或目录。在网上查找解决方案,发现基本如链接所示但问题是gcc –v和g++ -v的版本一致啊!!!

https://blog.csdn.net/Todd_Dijkstra/article/details/52971548

这是一个神奇的问题,我搜了好久好久,都是别人的gcc,g++不对。我却一致。然后我开始尝试在root用户下进行编译,竟然成功了。但是普通用户却还是错的。由此可得软件我们装成功了,但是普通用户用不了,什么问题?当然是权限问题。我去查看cc1plus所在目录的权限,发现普通用户无法读,因此找不到,所以报错为no such file。

我通过chmod –R 755 dir_path 解决了问题。

难点在于:当出现问题,如何一步步排查,找到问题的关键点,网上的解决要半信半疑,要自己分析可能的原因。(ps:软链接的使用也是一个技巧)

项目2:更新cuda,cudnn

我发现cw2vec的requirement里面需要tensorflow=1.8.0,而我们的服务器版本为1.4.0,我尝试更新 pip install tensorflow=1.8.0。尝试import tensorflow,发现报错:Error: libcublas.so.9.0: cannot open shared object file: No such file or direcctory。我去查了看原因,发现是因为cuda,cudnn的版本较低导致的。

当时服务器的配置为cuda8.0,cudnn9.1,tensorflow=1.4.0,我需要将其升级为cuda9.0,cudnn9.1,tensorflow=1.8.0.cuda的安装不复杂,麻烦的是下载和拷贝,从本地拷贝到服务器,我的winscp崩溃了n次,在周一总算拷贝成功了。安装很简单,执行run文件就好了。注意路径的设置,即可。

崩溃的点又来了,安装好了,libcublas.so.9.0也的确存在了,但是还是报同样的错。这时和项目1一样的,也是因为权限问题,普通用户无法访问root安装的软件,导致找不到。修改权限即可

总结:安装不复杂,拷贝也不复杂,很多时候会卡在一个点上,只要解决了,就OK了。但是这个点的解决很难。需要你通过搜索,复现,测试,去定位这个问题出现的根本原因。我这次遇到的No such file or direcctory错误。可能我们直观的认为文件不存在,但是我们去查找,发现文件存在,这时候我们的思维就当机了,存在为啥找不到?这时候发现root和普通用户的不同,才能定位到是权限导致了普通用户无法访问,所以认为不存在。

    原文作者:道华
    原文地址: https://zhuanlan.zhihu.com/p/44388183
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞