linux&github

Linux服务器中非 root 用户安装(多版本) CUDA 和

2020-04-01  本文已影响0人  char_jianjian

为什么是非root用户安装cuda和cudnn?

共用服务器时,系统公共环境中安装的cuda和cudnn的版本往往与项目需求不符合。而且你一般没有root权限,没办法更改系统公共环境中的cuda和cudnn,而且更改公共配置会影响别人使用。

而TensorFlow和pytorch等框架对cuda和cudnn版本很敏感。比如,cuda9.1和cuda9.0不能通用,cudnn7.1.4和cudnn7.0.5不能通用,版本号差一点都不行。(这一点会在跑别人训练好的模型时候体现。)所以一定要确定好具体cuda、cudnn以及TensorFlow具体版本,使其匹配。

这时候可以,在自己用户目录下装cuda和cudnn,不影响系统公共环境,满足自己需求。也不用任何root权限。

安装后,更改自己用户目录下的环境变量,指向自己路径下的cuda。

具体步骤如下文。

下载安装cuda(以9.1为例)

到NVIDIA官网 https://developer.nvidia.com/cuda-toolkit-archive 选择对应版本的cuda,这里选择9.1。
然后再选对应的系统型号和installer type

image
点“Base Installer”里面的下载链接,大约1.5G,
或者也可以自己复制链接地址用wget下载,然后安装
wget https://developer.nvidia.com/compute/cuda/9.1/Prod/local_installers/cuda_9.1.85_387.26_linux
# sh后的文件名以实际下载文件名为准,不如我下载之后文件名为“cuda_9.1.85_387.26_linux.1”
sh cuda_9.1.85_387.26_linux.run

安装指令之后,出现

# 按q退出协议说明. 
 
Do you accept the previously read EULA?
accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: no

Install the CUDA 10.0 Toolkit?
(y)es/(n)o/(q)uit: yes

# 改成自己的用户名(要求绝对路径),这里可能会要求你再输入一遍
Enter Toolkit Location
 [ default is /usr/local/cuda-10.0 ]: /home/wuliyttaotao/cuda-10.0

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: n

Install the CUDA 10.0 Samples?
(y)es/(n)o/(q)uit: y

# 使用默认路径,回车
Enter CUDA Samples Location
 [ default is /home/wuliyttaotao ]:    

下载安装cudnn

https://developer.nvidia.com/rdp/cudnn-archive
下载cudnn需要NVIDIA账号,花3分钟注册一个即可。

选择对应cuda版本号以及项目要求的cudnn版本(亲身经历是,系统公共目录下装的7.1.4,然后代码跑了一半报错说,人家原项目用的是7.0.5。然后无奈在自己用户路径下,新装了对应版本的cuda和cudnn)

image

选择cuDNN v7.0.5 Library for Linux(大概200多M),不要错选成cuDNN v7.0.5 Runtime for Ubuntu 16.04

因为下载cudnn是需要登录的,所以不便用wget下载,在自己电脑上下载后,再传到服务器上。

下载完 cuDNN,可能发现后缀是 .solitairetheme8,直接将这个后缀改成 .tgz 即可解压。

解压后发现cudnn总共分两个目录

复制 cuDNN 文件到 CUDA 安装目录:(cuDNN 解压到 ~/cuda 目录了,~/cuda-9.1 为自己设定的 CUDA 安装目录,~ 代表 /home/x007jianjian),并且给所有用户添加读的权限

cp ~/cuda/include/cudnn.h ~/cuda-9.1/include
cp ~/cuda/lib64/lib* ~/cuda-9.1/lib64

chmod a+r ~/cuda-9.1/include/cudnn.h ~/cuda-10.0/lib64/libcudnn*

建立软连接:

cd ~/cuda-10.0/lib64
ln -sf libcudnn.so.7.6.4 libcudnn.so.7
ln -sf libcudnn.so.7 libcudnn.so
ldconfig -v

配置用户环境变量

修改 ~/.bashrc 文件,将下面两行加进去:(将 x007jianjian 改成自己的用户名)

export PATH=/home/wuliyttaotao/cuda-9.1/bin${PATH:+:${PATH}}  
export LD_LIBRARY_PATH=/home/wuliyttaotao/cuda-9.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

保存 ~/.bashrc 文件后,source ~/.bashrc 使其生效。

安装多版本cudnn,cuda

安装步骤同上述,需要哪个版本就把用户环境变量指向按个版本。

当然,也可以将用户环境变量指向系统公共的cuda

补充说明

安装cuda时候会出现

Installing the CUDA Toolkit in /home/x007jianjian/cuda-9.1 ...
Missing recommended library: libXi.so
Missing recommended library: libXmu.so

Installing the CUDA Samples in /home/x007jianjian ...
Copying samples to /home/x007jianjian/NVIDIA_CUDA-9.1_Samples now...
Finished copying samples.

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /home/x007jianjian/cuda-9.1
Samples:  Installed in /home/x007jianjian, but missing recommended libraries

Please make sure that
 -   PATH includes /home/x007jianjian/cuda-9.1/bin
 -   LD_LIBRARY_PATH includes /home/x007jianjian/cuda-9.1/lib64, or, add /home/x007jianjian/cuda-9.1/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run the uninstall script in /home/x007jianjian/cuda-9.1/bin

Please see CUDA_Installation_Guide_Linux.pdf in /home/x007jianjian/cuda-9.1/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 384.00 is required for CUDA 9.1 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_92427.log

上面提示“Driver: Not Selected”是正常现象。

建立软链接那一步会出现

/lib:
/usr/lib:
/sbin/ldconfig.real: Cannot stat /usr/lib/libopen-pal.so: No such file or directory
/sbin/ldconfig.real: Cannot stat /usr/lib/libopen-rte.so: No such file or directory
/sbin/ldconfig.real: Cannot stat /usr/lib/libmca_common_sm.so: No such file or directory
/sbin/ldconfig.real: Cannot stat /usr/lib/liboshmem.so: No such file or directory
    libsatlas.so -> libsatlas.so
    libmpi_mpifh.so.12 -> libmpi_mpifh.so.12.0.0
    libibverbs.so.1 -> libibverbs.so.1.0.0
    libmpi_usempi_ignore_tkr.so.6 -> libmpi_usempi_ignore_tkr.so.6.1.0
    libGraphicsMagickWand-Q16.so.2 -> libGraphicsMagickWand.so
    libgupnp-av-1.0.so.2 -> libgupnp-av-1.0.so.2.0.0
    libBLTlite.2.5.so.8.6 -> libBLTlite.2.5.so.8.6
    libopen-rte.so.12 -> libopen-rte.so.12.0.2
    libcollada-dom2.4-dp.so.0 -> libcollada-dom2.4-dp.so.2.4.4
    libmpi_cxx.so.1 -> libmpi_cxx.so.1.1.3
    libgjs.so.0 -> libgjs.so.0.0.0
    libGraphicsMagick-Q16.so.3 -> libGraphicsMagick.so
    libgupnp-dlna-gst-2.0.so.3 -> libgupnp-dlna-gst-2.0.so.3.0.0
    libmpi.so.12 -> libmpi.so.12.0.2
    libmutter.so.0 -> libmutter.so.0.0.0
    libmpi_usempif08.so.11 -> libmpi_usempif08.so.11.1.0
    libgupnp-dlna-2.0.so.3 -> libgupnp-dlna-2.0.so.3.0.0
    libBLT.2.5.so.8.6 -> libBLT.2.5.so.8.6
    libmca_common_sm.so.4 -> libmca_common_sm.so.4.0.4
    libmca_common_verbs.so.7 -> libmca_common_verbs.so.7.0.0
    libnetpbm.so.10 -> libnetpbm.so.10.0
    libompitrace.so.0 -> libompitrace.so.0.0.0
    libid3tag.so.0 -> libid3tag.so.0.3.0
    libbotan-1.10.so.1 -> libbotan-1.10.so.1.12
    libopen-pal.so.13 -> libopen-pal.so.13.0.2
/sbin/ldconfig.real: Can't create temporary cache file /etc/ld.so.cache~: Permission denied

显示看起来像是报错。但实际用起来,暂时没发现什么影响。

root用户

Linux 服务器的用户如果有 root 权限,那直接删除原来的 cuDNN,然后再重装新版本。

删除已有的 cuDNN:

sudo rm -rf /usr/local/cuda/include/cudnn.h
sudo rm -rf /usr/local/cuda/lib64/libcudnn*

其他安装方式跟非root用户相同,只不过是把用户路径替换成/usr/local,其它命令前加了sudo

还有一点

使用公共服务器的同学也请注意,大家在安装自己的cuda和cudnn后,最好删除安装文件,为自己和别人节省公共空间。(安装其他包也是一样,及时清理安装缓存文件)

reference

https://www.cnblogs.com/wuliytTaotao/p/12169315.html

上一篇下一篇

猜你喜欢

热点阅读