【Linux】如何不借助 root 权限安装 CUDA?

服务器

浏览数:116

2020-6-10

我们能不能做到不借助 root 权限给 Linux 系统安装 CUDA?

答案是有可能的,但是“丑话说在前面”,显卡驱动需要比较新才行。

那么我们为什么会有这种奇怪的需求呢?一种可能的情况是,服务器因为不同的人使用的版本不一样的原因,无法轻易改动 CUDA 的版本。但是我们作为普通用户,又想使用新版的 CUDA(而更新驱动一般不会对其他用户产生影响,除非他们正在占用显卡)。那么该怎么做呢?

安装 CUDA

拿目前最新的版本 CUDA 10.2 为例。首先,我们在 NVIDIA 官网找到 CUDA 下载链接,选择 runfile:

下载好的文件我们简称为 cuda.run。下载完毕之后,运行安装工具。运行这个文件有两种方法。任选其一即可。

# 方法一:修改文件属性,使其可以运行
chmod +x cuda.run
./cuda.run
# 方法二:直接 sh
sh cuda.run

运行安装工具后,首先是接受 EULA:

如果是旧版本(比如 9.x)的 CUDA,阅读 EULA 的界面会特别长。这里的一个小技巧是,不要按住回车键,而是按住空格键来进行跳过

这里我们不要安装驱动(Driver),因为驱动一定需要 root 才能够安装。一旦选择,必定会安装失败。我们可以移动光标到这些不需要的项目,然后按下Enter取消勾选:

除了 Toolkit 以外,下面的几个其实也不需要。可以根据情况选择安装(比如可以安装 Samples,后续测试 CUDA 以及 cuDNN 是否安装成功)。这里我选择的是仅安装 Toolkit。

接下来我们的任务,就是修改安装路径到自己的 home 下。默认情况下,

  • CUDA 会被安装在:/usr/local/cuda-10.2/
  • Library 会被安装在:/usr/local/cuda-10.2/lib64/

所以我们要对这两个进行修改。打开 Options。如果不安装 Driver 和 Samples,那么这两个不用管。否则也需要修改他们的安装位置。打开 Toolkit Options,然后 Change Toolkit Install Path,修改为/home/<username>/cuda-10.2/

然后 Done,返回上一级,再选择 Library install path:

并将安装目录修改为:/home/<username>/cuda-10.2/lib64/。如果是 9.x 版本的 CUDA,一旦在前面安装了 CUDA 本体的安装位置,那么 library 的位置会自动变成本体安装目录下的 lib64

然后就可以开始安装了。

安装完毕之后,需要配置一下 .bashrc,在其下方添加:

export PATH=/home/<username>/cuda-10.2/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/<username>/cuda-10.2/lib64/

保存后运行一下 source .bashrc,就可以用 nvcc -V 试试有没有安装成功了。

安装 cuDNN

我们还可以考虑安装 cuDNN。官网下载需要注册并登录:https://developer.nvidia.com/cudnn

下载完 .tar.gz 之后,可以用 tar -zxvf 解压缩,然后将里面的文件拷贝到 CUDA 安装目录下的指定位置即可。具体为:

cp <CUDNN>/cuda/include/cudnn.h <CUDA>/include/
cp <CUDNN>/cuda/lib64/libcudnn* <CUDA>/lib64
chmod a+r <CUDA>/include/cudnn.h <CUDA>/lib64/libcudnn*

到此,CUDA 10.2 与 cuDNN 安装完毕。

但是,有比较大的可能会因为你安装的 CUDA 版本太新,而服务器上的显卡驱动又太旧了(比如是 CUDA 9.0 安装包自带的驱动),那么仍旧是没有办法正常使用的(比如使用 GPU 版的 PyTorch)。想要真正能用,还是要说服管理员将服务器的驱动进行更新。但是可以放心的是,更新了驱动之后,旧版本的 CUDA 依旧是可以用的。

(这篇文章的方法借鉴自:Install Cuda without root - Stack Overflow

作者:风晴雪