Linux服务器无 Root 权限更换 Cuda 版本及常见问题解决

CUDA 简介

CUDA 模块及版本对应关系:https://tianzhipeng-git.github.io/2023/11/21/cuda-version.html#nvidia-driver和cuda-toolkit版本兼容

目前看来,没有找到 torch 降级方法。

CUDA 的结构

CUDA(Compute Unified Device Architecture)是由 NVIDIA 提供的一种并行计算平台和编程模型,用于加速计算密集型任务。CUDA 允许开发者使用 GPU 的计算能力,通过并行处理来快速执行复杂的计算任务。

CUDA 包括以下主要组成部分:

  • CUDA Toolkit:为开发人员提供工具链(如编译器 nvcc)、库(如 cuBLAS、cuDNN)和运行时环境,用于编写和调试 CUDA 程序。
  • CUDA Runtime:运行时库,用于管理和执行 CUDA 程序。
  • GPU 驱动程序(Driver):NVIDIA 提供的驱动程序,为 CUDA 程序与硬件之间的交互提供支持。

参考博客对 CUDA 结构介绍的十分详细。
image

CUDA 的版本

根据上图,有三处可以查看的版本:

  • kernel-mode driver 版本
  • user-mode driver 版本
  • cuda toolkit 版本

前文提到,Driver 包括 kernel-mode Driveruser-mode Driver。通过 nvidia-smi 命令查看。

"Driver Version" 是 kernel-mode version,"CUDA Driver Version" 是 user-mode version,是最大支持的 CUDA 版本。(并不完全正确,因为具有向前兼容的特性,后文提到)
image

通过 nvcc -V 命令查看 CUDA Toolkit 的版本。
image

不同的库或包会依赖不同的 cuda toolkit 版本,因此有时需要更换 cuda toolkit。而 Driver 作为底层的驱动程序,能够支持选择多种版本的上层编译工具,并且具有向后和部分向前兼容的特性。

CUDA 的兼容性

跨次要版本的兼容
NVIDIA 在 CUDA 11.0 版本后支持跨小版本号的向前兼容,即对于任意支持 CUDA >= 11.0 版本的主机驱动,均可兼容所有 CUDA 11.x 版本的应用;同理,对于任意支持 CUDA >= 12.0 版本的驱动,均可兼容所有 CUDA 12.x 版本的应用。

跨任意版本的向后兼容

Backward Compatibility, 这个最好理解, nvidia目前为止保证了, driver的版本不断升级, 都能够兼容以前的旧的cuda和应用, 即完整的向后兼容能力。即,只要低于最大支持的版本,都可以向后兼容。例如,user-mode driver 为 12.7,我可以安装 11.3 的 cuda toolkit。

image

跨主要版本的向前兼容(forward compatible)
跨大版本向前兼容是指最高支持 CUDA 11.x 版本的主机驱动兼容 CUDA 12.x 的应用。

高于当前主机驱动支持的 CUDA 版本且跨大版本号的应用是无法正常运行的,假设当前主机支持的最高 CUDA 版本为 11.8,则 12.x 版本的 CUDA 应用在机器上运行会报错。

为了避免频繁升级系统驱动(需要重启机器),NVIDIA 在 CUDA 10.0 版本后引入了向前兼容,通过安装 cuda-compat 包,以支持在较低的驱动版本上运行较新的 CUDA 版本的应用。cuda-compat 包的默认安装路径为 /usr/local/cuda-xx.x/compat/,可以通过配置 LD_LIBRARY_PATH 环境变量来使用。比如,通过执行 export LD_LIBRARY_PATH=/usr/local/cuda-12.1/compat:"$LD_LIBRARY_PATH",即可在 470.141.03 驱动版本下正常运行 CUDA 12.1 版本的应用。

讲上面两种兼容性的时候, 为啥没提到中间那个CUDA user-mode driver呢?
因为在正常情况下CUDA user-mode driver, 是随着GPU kernal-mode driver一起安装, 一起升级的, 基本等于绑定. 刚才所谓的driver的向后兼容和小版本兼容能力, 也是CUDA user-mode driver能提供的兼容能力, “the minor-version compatibility that is defined between CUDA runtime and CUDA driver”, 应用这两种兼容能力时, 两个driver不分家.


CUDA 安装方法

本文将以普通用户 Ubuntu 24.04 gcc-13 cuda121 环境为例,介绍安装 cuda113 的详细过程和常见问题的解决方案。

1.下载 CUDA

进入 官方网站 下载环境对应的CUDA。本文以 CUDA 11.3 为例。

image

Architechture 查看方法:

uname -m

查看Ubuntu版本:

lsb_release -a

ps:Ubuntu 版本不对应时,个人实践未发现报错。例如 Ubuntu 24.04 可安装 20.04 版本。

cd ~
wget https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.19.01_linux.run```
**2.运行安装文件**
下载完成后可看到路径中出现 `.run` 安装文件。
```bash
ls

image

确保你有执行权限:

chmod +x cuda_11.3.0_465.19.01_linux.run

然后运行安装程序。注意这里toolkitpathsamplespath 可以自定义,特别是注意路径中涉及的 cuda 版本。

./cuda_11.3.0_465.19.01_linux.run --override-driver-check --silent --toolkitpath=/home/$(whoami)/cuda-11.3 --samplespath=/home/$(whoami)/cuda-samples --override

3.进入安装界面

(运行需要一段时间,如果没有报错耐心等待)
移动到 continueenter 继续。
image
输入 acceptenter 继续。
image
4.选择安装内容
由于我们没有 root 权限,因此我们无需也不能安装 Driver。移动到 Driver,按Space取消选中。然后选择 Install 回车继续。
image

5.等待安装完成
6.安装完成
显示 Summary。
image

7.写入环境变量
安装完成后,可以看到出现了指定的安装目录:

ls

image

然后将 bin lib目录写入到全局环境变量中。注意检查自己的路径是否正确。

echo 'export PATH=/home/$(whoami)/cuda-11.3/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/home/$(whoami)/cuda-11.3/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

8.测试

nvcc --version

可以看到,更换成功。

image

常见问题及解决方案

1. 安装协议太长无法翻页,导致无法继续
解决方案:运行安装文件时添加 --silent 参数。
主要作用:

  • 无交互安装: 安装过程中不会要求你输入任何信息,比如选择安装组件、同意协议等。所有操作都默认进行。
  • 适合脚本化安装: 适合在自动化脚本或批量安装中使用,避免人工干预。
  • 减少输出: 使安装过程更简洁,输出的日志信息通常会被最小化。

2.Failed to verify gcc version. See log at /tmp/cuda-installer.log for details.
image
解决方案:运行安装文件时添加 --override 参数。
作用:忽略 gcc 版本检查。

进入日志文件 /tmp/cuda-installer.log 可以看到问题为 gcc 版本不支持,可以通过添加参数忽略。

[INFO]: Overriding driver check
[INFO]: Setting toolkitpath=/home/kzy/cuda-11.3
[INFO]: Setting samplespath=/home/kzy/cuda-samples
[INFO]: Driver installation detected by command: apt list --installed | grep -e nvidia-driver-[0-9][0-9][0-9] -e nvidia-[0-9][0-9][0-9]
[INFO]: Cleaning up window
[INFO]: Complete
[INFO]: Checking compiler version...
[INFO]: gcc location: /usr/bin/gcc
[INFO]: gcc version: gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04)
[ERROR]: unsupported compiler version: 13.3.0. Use --override to override this check.

3.Installation failed. See log at /tmp/cuda-installer.log for details.
解决方案:运行安装文件时通过添加 --toolkitpath ${yourpath} --samplespath ${yourpath}修改为自定义安装目录。注意,由于上文我们没有安装 Driver,因此这里只指定了 toolkitpath 和 samplespath。

进入日志文件可以看到,我们没有 root 权限无法对默认 /usr/local 文件写入,因此需要修改安装目录。

[INFO]: Overriding compiler check
[INFO]: Driver installation detected by command: apt list --installed | grep -e nvidia-driver-[0-9][0-9][0-9] -e nvidia-[0-9][0-9][0-9]
[INFO]: Cleaning up window
[INFO]: Complete
[INFO]: Initializing menu
[WARNING]: Unable to write to directory: /usr/share/applications/
[INFO]: Setup complete
[INFO]: Components to install:
[INFO]: CUDA Toolkit 11.3
[WARNING]: Unable to write to directory: /usr/local
[ERROR]: Permission denied. Unable to write to /usr/local/cuda-11.3/
[INFO]: Cleaning up window
[INFO]: Complete
[ERROR]: Install of CUDA Toolkit 11.3 failed, quitting

4.Existing package manager installation of the driver found. It is strongly recommended that you remove this before continuing.
Override this check by passing --override-driver-check

解决方案:运行安装文件时添加 --override-driver-check参数。

5.报错 gcc 版本不匹配
参照下文更换 gcc 版本:
https://www.cnblogs.com/kuai/p/18708843

顾名思义,绕过驱动检查。至此,安装完成。

posted @   kuaik  阅读(385)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示