我们能不能做到不借助 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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。