为什么是非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 <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后,最好删除安装文件,为自己和别人节省公共空间。(安装其他包也是一样,及时清理安装缓存文件)