本文记录了一次从驱动损坏到成功安装的全过程,包含清理、编译问题解决、全局环境配置等完整步骤,适用于多卡服务器场景。


目录

环境说明

安装前准备

1. 检查当前状态

2. 下载CUDA runfile

彻底清理旧驱动和CUDA

步骤1:卸载apt安装的NVIDIA/CUDA包

步骤2:清理依赖

步骤3:删除CUDA残留目录

步骤4:清理残留的TensorRT等包(如果有)

步骤5:卸载内核中的NVIDIA模块

步骤6:验证清理完成

准备工作:编译器问题处理

检查当前编译器版本

临时将 cc 指向 GCC 12+

安装CUDA和驱动(runfile方式)

执行安装

安装界面操作说明

安装成功标志

配置全局环境变量

创建全局配置脚本

立即生效

恢复编译器配置

验证安装

1. 检查驱动

2. 检查CUDA编译器

3. 检查GPU进程

重启服务器(推荐)

常见问题汇总

Q1: Driver/library version mismatch 错误

Q2: 编译驱动时报 unrecognized command-line option '-ftrivial-auto-var-init=zero'

Q3: runfile 运行时卡住没反应

Q4: 安装后 nvcc 找不到

Q5: 只想给当前用户配置CUDA

📌 总结


环境说明

项目 配置
GPU NVIDIA GeForce RTX 3080 (LHR, Ampere架构)
操作系统 Ubuntu 22.04, 内核 6.8.0
目标CUDA版本 12.6
目标驱动版本 560.28.03
安装方式 runfile 离线安装

安装前准备

1. 检查当前状态

# 查看GPU是否可用(驱动损坏时会报错)
nvidia-smi

# 检查内核版本
uname -r

# 查看已安装的NVIDIA相关包
dpkg -l | grep -iE 'nvidia|cuda'

2. 下载CUDA runfile

从 NVIDIA官网 下载对应版本的 runfile:

# 从官网下载CUDA包
wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda_12.6.0_560.28.03_linux.run

官网下载地址:

CUDA Toolkit 12.6 Downloads | NVIDIA Developerhttps://developer.nvidia.com/cuda-12-6-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=runfile_local

⚠️ 注意:runfile 同时包含 CUDA Toolkit 和 NVIDIA 驱动,约 4GB。


彻底清理旧驱动和CUDA

⚠️ 重要:如果系统存在多个CUDA版本或驱动残留,必须彻底清理,否则会导致安装冲突。

步骤1:卸载apt安装的NVIDIA/CUDA包

sudo apt-get --purge remove -y '*nvidia*' '*cuda*' '*libnvidia*'

步骤2:清理依赖

sudo apt-get autoremove -y
sudo apt-get autoclean

步骤3:删除CUDA残留目录

sudo rm -rf /usr/local/cuda /usr/local/cuda-* /etc/alternatives/cuda*

步骤4:清理残留的TensorRT等包(如果有)

sudo dpkg --purge libcufile-12-4
sudo apt-get --purge remove -y 'libnvinfer*' 'libnvonnxparsers*'
sudo rm -rf /usr/local/cudaback

步骤5:卸载内核中的NVIDIA模块

# 查看是否还有nvidia模块
lsmod | grep nvidia

# 卸载模块(如果有)
sudo rmmod nvidia_uvm
sudo rmmod nvidia
sudo rmmod ecc

步骤6:验证清理完成

# 应该没有输出
dpkg -l | grep -i nvidia
ls /usr/local/cuda* 2>/dev/null

准备工作:编译器问题处理

⚠️ 关键问题:内核 6.8+ 编译NVIDIA驱动需要 GCC 12+,但系统默认的 cc 可能指向 GCC 11。

检查当前编译器版本

which gcc && gcc --version | head -1
which cc && cc --version | head -1

临时将 cc 指向 GCC 12+

# 备份原cc
sudo mv /usr/bin/cc /usr/bin/cc.bak

# 创建软链接到GCC 12(根据实际路径调整)
sudo ln -s /usr/local/bin/gcc /usr/bin/cc

# 验证
cc --version  # 应显示 GCC 12.x

💡 安装完成后记得恢复,见第7步。


安装CUDA和驱动(runfile方式)

执行安装

# 进入runfile所在目录
cd /path/to/your/runfile

# 运行安装程序(交互模式)
sudo sh cuda_12.6.0_560.28.03_linux.run

安装界面操作说明

  1. 接受EULA:输入 accept 回车

  2. 选择组件

    • [X] Driver → 必须勾选

    • [X] CUDA Toolkit 12.6 → 必须勾选

    • [ ] CUDA Demo Suite → 可选,建议取消

    • [ ] CUDA Documentation → 可选,建议取消

  3. 开始安装:用方向键选中 Install 按回车

安装成功标志

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

Driver:   Installed
Toolkit:  Installed in /usr/local/cuda-12.6/

配置全局环境变量

让所有用户都能使用 nvcc 和 CUDA 库。

创建全局配置脚本

sudo tee /etc/profile.d/cuda.sh > /dev/null << 'EOF'
export PATH=/usr/local/cuda-12.6/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH
EOF

立即生效

source /etc/profile.d/cuda.sh

恢复编译器配置

安装完成后,将 cc 恢复为原来的版本,避免影响其他编译任务。

sudo rm /usr/bin/cc
sudo mv /usr/bin/cc.bak /usr/bin/cc

验证恢复:

cc --version  # 应显示原来的版本(如 11.4)

验证安装

1. 检查驱动

nvidia-smi

预期输出:

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 560.28.03              Driver Version: 560.28.03      CUDA Version: 12.6     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
|   0  NVIDIA GeForce RTX 3080        Off | 00000000:1A:00.0 Off |                  N/A |
+-----------------------------------------+------------------------+----------------------+

2. 检查CUDA编译器

nvcc --version

预期输出:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Fri_Jun_14_16:34:21_PDT_2024
Cuda compilation tools, release 12.6, V12.6.20

3. 检查GPU进程

nvidia-smi

查看 Processes 部分,确认没有异常进程占用。


重启服务器(推荐)

sudo reboot

重启后再次验证 nvidia-smi 和 nvcc --version,确保一切正常。


常见问题汇总

Q1: Driver/library version mismatch 错误

原因:驱动内核模块和用户态库版本不匹配。

解决:彻底清理后重装(参考第3步)。


Q2: 编译驱动时报 unrecognized command-line option '-ftrivial-auto-var-init=zero'

原因:GCC版本低于12,不支持该编译选项。

解决:将 cc 指向 GCC 12+(参考第4步)。


Q3: runfile 运行时卡住没反应

原因:runfile 正在解压到 /tmp,4GB文件需要时间。

解决

# 检查磁盘空间
df -h /tmp

# 或指定临时目录
sudo TMPDIR=/ssd2/tmp sh cuda_*.run

Q4: 安装后 nvcc 找不到

原因:PATH未配置CUDA的bin目录。

解决:配置环境变量(参考第6步)。


Q5: 只想给当前用户配置CUDA

解决:在 ~/.bashrc 中添加:

echo 'export PATH=/usr/local/cuda-12.6/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

📌 总结

步骤 命令/操作
清理旧驱动 apt-get --purge remove '*nvidia*'
清理CUDA目录 rm -rf /usr/local/cuda*
卸载内核模块 sudo rmmod nvidia_uvm nvidia
修复编译器链接 ln -s /usr/local/bin/gcc /usr/bin/cc
安装runfile sudo sh cuda_*.run
配置环境变量 sudo tee /etc/profile.d/cuda.sh
恢复编译器 rm /usr/bin/cc && mv cc.bak cc
重启验证 reboot && nvidia-smi && nvcc --version

🎉 恭喜!你的 GPU 服务器已经成功安装 CUDA 12.6 和 NVIDIA 驱动 560.28.03,可以开始深度学习训练了!

如果本文对你有帮助,欢迎点赞收藏!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐