为什么是非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
点“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)
选择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 with the name of this run file:
sudo .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