Ubuntu 22.04 多版本 CUDA 安装与快速切换(以 CUDA 12.8 与 11.8 为例)

本教程适用于在 Ubuntu 22.04 下安装多个版本的 CUDA(示例:CUDA 12.8 与 CUDA 11.8),并实现一键快速切换 CUDA 环境。

前提条件

  • 已安装 NVIDIA 显卡驱动
  • 已安装 CUDA(可选)

1. 下载与安装 CUDA

本例默认系统已安装 CUDA 12.8,以下演示如何补充安装 CUDA 11.8。
CUDA下载地址:CUDA Toolkit Archive

2.png

1.1 下载安装包(CUDA 11.8)

Ubuntu 22.04 可向下兼容 Ubuntu 20.04 版本 CUDA,因此选择 Linux → x86_64 → Ubuntu → 20.04 → runfile(local)。
3.png

直接下载 CUDA 11.8:

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

1.2 安装过程说明

安装向导步骤:

  1. 输入 accept(接受协议)

  2. 取消安装显卡驱动(重要)
    4.png

    • 第一项为 NVIDIA Driver(由于已安装显卡驱动,应取消选中:按回车取消)
  3. 关于 a symbol xxx 的提示选择:no

    • 如提示是否再次配置驱动,务必选择 no

安装成功会出现如下提示:

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-11.8/

Please make sure that
 -   PATH includes /usr/local/cuda-11.8/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-11.8/lib64
...

至此,CUDA 11.8 安装完成。


2. 将 CUDA 注册到 alternatives 管理系统

为了方便多版本切换,将已安装的 CUDA 注册到系统 alternatives:

# 注册 CUDA 11.8
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-11.8 118

# 注册 CUDA 12.8(如未注册)
sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-12.8 128

之后可以通过以下命令切换系统级 /usr/local/cuda 链接:

sudo update-alternatives --config cuda

3. 配置环境变量

编辑 .bashrc

sudo vim ~/.bashrc

在文件末尾加入以下内容(如已存在可跳过或按需调整版本号):

# NVIDIA CUDA Toolkit Environment Variables
# 默认 PATH 指向 /usr/local/cuda(由 alternatives 管理)
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

使环境变量生效:

source ~/.bashrc

4. 创建增强版 CUDA 切换脚本

/usr/local/bin/ 下创建切换脚本,支持直接传版本号或交互选择。

sudo vim /usr/local/bin/cuda_switch

写入以下内容:

#!/bin/bash
# ============================================
# CUDA 多版本切换增强脚本
# ============================================

# 扫描系统中所有 /usr/local/cuda-* 目录
CUDA_DIRS=($(ls -d /usr/local/cuda-* 2>/dev/null | sort))
if [ ${#CUDA_DIRS[@]} -eq 0 ]; then
    echo "❌ 没有找到 /usr/local/cuda-* 目录"
    return 1
fi

# 如果传了参数,直接切换
if [ -n "$1" ]; then
    VERSION="$1"
    SELECTED_CUDA="/usr/local/cuda-$VERSION"
    if [ ! -d "$SELECTED_CUDA" ]; then
        echo "❌ CUDA $VERSION 未找到!"
        return 1
    fi
else
    # 显示版本列表
    echo "可用 CUDA 版本:"
    for i in "${!CUDA_DIRS[@]}"; do
        VERSION=$(basename "${CUDA_DIRS[$i]}" | sed 's/cuda-//')
        echo "  [$i] $VERSION"
    done

    # 用户选择版本
    read -p "请选择要切换的版本编号: " idx

    if ! [[ "$idx" =~ ^[0-9]+$ ]] || [ "$idx" -lt 0 ] || [ "$idx" -ge ${#CUDA_DIRS[@]} ]; then
        echo "❌ 无效选择"
        return 1
    fi

    SELECTED_CUDA="${CUDA_DIRS[$idx]}"
    VERSION=$(basename "$SELECTED_CUDA" | sed 's/cuda-//')
fi

echo "🔄 切换到 CUDA $VERSION ..."

# 修改 /usr/local/cuda 软链接
sudo rm -f /usr/local/cuda
sudo ln -s "$SELECTED_CUDA" /usr/local/cuda

# 修改 PATH
export PATH="$SELECTED_CUDA/bin${PATH:+:${PATH}}"

# 修改 LD_LIBRARY_PATH
export LD_LIBRARY_PATH="$SELECTED_CUDA/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"

# 显示 nvcc 版本
echo "✅ nvcc version:"
nvcc -V

# 尝试显示 cuDNN 版本
if [ -f "$SELECTED_CUDA/include/cudnn_version.h" ]; then
    echo "✅ cuDNN version:"
    grep CUDNN_MAJOR "$SELECTED_CUDA/include/cudnn_version.h" -A 2
else
    echo "⚠️  cuDNN 未安装或找不到 cudnn_version.h"
fi

echo "🎉 CUDA 切换完成!"

赋予可执行权限:

sudo chmod +x /usr/local/bin/cuda_switch

5. CUDA 版本快速切换方法

5.1 交互选择

source /usr/local/bin/cuda_switch

然后根据提示选择要切换的版本编号。

5.2 直接传版本号

source /usr/local/bin/cuda_switch 11.8
source /usr/local/bin/cuda_switch 12.8

可选:添加 alias 到 ~/.bashrc

alias cuda_switch="source /usr/local/bin/cuda_switch"

以后直接执行 cuda_switch 即可。


6. 验证当前 CUDA 版本

切换后使用:

nvcc -V

以及查看 cuDNN 版本(如果已安装):

cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

如果显示对应版本号,则切换成功。