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 结构介绍的十分详细。
CUDA 的版本
根据上图,有三处可以查看的版本:
- kernel-mode driver 版本
- user-mode driver 版本
- cuda toolkit 版本
前文提到,Driver 包括 kernel-mode Driver
和 user-mode Driver
。通过 nvidia-smi
命令查看。
"Driver Version" 是 kernel-mode version,"CUDA Driver Version" 是 user-mode version,是最大支持的 CUDA 版本。(并不完全正确,因为具有向前兼容的特性,后文提到)
通过 nvcc -V
命令查看 CUDA Toolkit 的版本。
不同的库或包会依赖不同的 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。
跨主要版本的向前兼容(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 为例。
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
确保你有执行权限:
chmod +x cuda_11.3.0_465.19.01_linux.run
然后运行安装程序。注意这里toolkitpath
和 samplespath
可以自定义,特别是注意路径中涉及的 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.进入安装界面
(运行需要一段时间,如果没有报错耐心等待)
移动到 continue
,enter
继续。
输入 accept
,enter
继续。
4.选择安装内容
由于我们没有 root 权限,因此我们无需也不能安装 Driver。移动到 Driver
,按Space
取消选中。然后选择 Install
回车继续。
5.等待安装完成
6.安装完成
显示 Summary。
7.写入环境变量
安装完成后,可以看到出现了指定的安装目录:
ls
然后将 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
可以看到,更换成功。
常见问题及解决方案
1. 安装协议太长无法翻页,导致无法继续
解决方案:运行安装文件时添加 --silent
参数。
主要作用:
- 无交互安装: 安装过程中不会要求你输入任何信息,比如选择安装组件、同意协议等。所有操作都默认进行。
- 适合脚本化安装: 适合在自动化脚本或批量安装中使用,避免人工干预。
- 减少输出: 使安装过程更简洁,输出的日志信息通常会被最小化。
2.Failed to verify gcc version. See log at /tmp/cuda-installer.log for details.
解决方案:运行安装文件时添加 --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
顾名思义,绕过驱动检查。至此,安装完成。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端