非Ubuntu也能用:switch-cuda适配其他Linux发行版的3种方法
2026/8/16 14:23:18 网站建设 项目流程

非Ubuntu也能用:switch-cuda适配其他Linux发行版的3种方法

【免费下载链接】switch-cudaA simple bash script for switching between installed versions of CUDA.项目地址: https://gitcode.com/gh_mirrors/sw/switch-cuda

switch-cuda 是一个用 bash 编写的CUDA 版本切换工具,只需一条source命令,就能在当前终端中快速调整PATHLD_LIBRARY_PATHCUDA_HOME等环境变量。虽然它最初是针对 Ubuntu 16.04 开发的,但通过本文的 3 种适配方法,Fedora、Arch Linux、CentOS、openSUSE 等非 Ubuntu 发行版同样能轻松使用 switch-cuda 管理多个 CUDA 版本,从此告别手动改环境变量的痛苦。

switch-cuda 是什么?为什么默认只认 Ubuntu?📦

switch-cuda 的核心是一个不到 100 行的 bash 脚本switch-cuda.sh,它的工作原理并不神秘:CUDA 的版本切换,本质就是修改 4 个环境变量——PATHLD_LIBRARY_PATHCUDA_HOMECUDA_ROOT,让系统指向你想要的 CUDA 安装目录。

使用方式非常简单:

source switch-cuda.sh # 列出本机已安装的所有 CUDA 版本 source switch-cuda.sh 12.4 # 切换到 CUDA 12.4

之所以"默认只认 Ubuntu",是因为脚本里写死了一行配置:INSTALL_FOLDER="/usr/local",脚本只会到这个目录下寻找cuda-x.y格式的文件夹。这在 Ubuntu 上没问题,但其他发行版的 CUDA 安装路径往往不同:

发行版常见 CUDA 安装路径
Ubuntu / Debian/usr/local/cuda-x.y
Fedora / CentOS / openSUSE/usr/local/cuda-x.y
Arch Linux/opt/cuda
Gentoo/opt/cuda
NixOS/nix/store/...(路径不固定)

好在项目 README 中作者特别注明:脚本针对 Ubuntu 16.04 编写,但很容易移植到其他平台。下面这 3 种方法,就是最典型的移植思路。

适配前:先拿到 switch-cuda 脚本 🔧

首先克隆项目获取脚本:

git clone https://gitcode.com/gh_mirrors/sw/switch-cuda

或者只保留核心文件switch-cuda.shREADME.md,放到任意目录(例如~/tools/)即可开始改造。

方法一:修改 INSTALL_FOLDER 变量(最简单,适合 Arch Linux)✏️

如果你的发行版只是安装路径不同,比如 Arch Linux 把 CUDA 装在/opt下,那么只需把脚本第 37 行的安装目录改成实际路径即可,一条sed命令就能完成:

sed -i 's|INSTALL_FOLDER="/usr/local"|INSTALL_FOLDER="/opt"|' switch-cuda.sh

改完之后立即验证:

source switch-cuda.sh

如果输出类似* cuda-12.4* cuda-11.8,说明脚本已经能在你的发行版上正确识别 CUDA 版本了。整个适配过程只需这一条命令,是新手最值得先尝试的方法。

方法二:符号链接"瞒天过海"(脚本零改动,适合任何发行版)🔗

如果不想动脚本,可以在/usr/local下为真实安装目录建立符号链接,让脚本"以为"CUDA 就装在它熟悉的位置:

sudo ln -s /opt/cuda-12.4 /usr/local/cuda-12.4 sudo ln -s /opt/cuda-11.8 /usr/local/cuda-11.8

建立链接后,无需修改switch-cuda.sh,直接执行source switch-cuda.sh 12.4即可完成切换。这种方法的优点是脚本保持原样、可随时整体升级替换;缺点是每安装一个 CUDA 版本都要手动建一次链接,并且需要 root 权限。

方法三:读懂源码自己改造(适合 NixOS 等特殊发行版)🧩

像 NixOS 这类"非常规"发行版,CUDA 被安装进/nix/store的哈希目录中,路径既不确定也不稳定,前两种方法都难以奏效。这时建议直接复制switch-cuda.sh,按自己的需求改写:

  • 修改INSTALL_FOLDER,指向实际存放 CUDA 的目录;
  • 调整LD_LIBRARY_PATH的拼接逻辑,例如某些发行版的 CUPTI 库路径与 Ubuntu 并不相同;
  • 路径过滤正则(^${INSTALL_FOLDER}/cuda)也可以改成符合你自己命名规则的写法。

由于脚本总共不到 100 行、逻辑清晰,通读一遍即可完全掌握,二次开发成本极低。这也是从"会用工具"进阶到"会写工具"的绝佳练习素材。

适配后如何验证切换是否成功?✅

无论选用哪种方法,适配完成后都建议按以下步骤做一次完整验证:

source switch-cuda.sh 12.4 # 切换版本 nvcc --version # 查看当前 nvcc 版本 echo $CUDA_HOME # 应输出 .../cuda-12.4 echo $PATH # 确认 CUDA 12.4 的 bin 目录排在最前

再运行一段依赖特定 CUDA 版本的程序,确认链接库没有问题,就可以放心使用了。

常见问题(FAQ)💡

为什么必须用source执行,直接运行不行吗?直接执行脚本会启动一个子进程,环境变量的修改无法"带出来",因此脚本内置了校验逻辑,强制要求以source方式运行,否则会直接报错退出。

新开一个终端,怎么又变回旧版本了?source switch-cuda.sh只对当前 bash 会话生效。想永久生效,可以把切换命令写进~/.bashrc

提示 No installation of CUDA 12.4 has been found! 怎么办?先执行不带版本号的source switch-cuda.sh,确认脚本能否找到你的 CUDA 安装目录。如果列表为空,多半是INSTALL_FOLDER没指向正确路径,回到方法一检查即可。

总结:3 种方法怎么选?🎯

  • 路径固定、只是目录不同(如 Arch、Gentoo)→ 用方法一,一条sed命令搞定;
  • 不想改动脚本、追求省心(如 Fedora、CentOS)→ 用方法二,符号链接最省事;
  • 目录结构特殊、需要深度定制(如 NixOS)→ 用方法三,动手改造收益最大。

无论你使用哪种 Linux 发行版,switch-cuda 都能把 CUDA 版本切换这件繁琐事变成一条命令,让你在多个 CUDA 版本之间自由穿梭、互不干扰。

【免费下载链接】switch-cudaA simple bash script for switching between installed versions of CUDA.项目地址: https://gitcode.com/gh_mirrors/sw/switch-cuda

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询