本文记录了一次从驱动损坏到成功安装的全过程,包含清理、编译问题解决、全局环境配置等完整步骤,适用于多卡服务器场景。
目录
[1. 检查当前状态](#1. 检查当前状态)
[2. 下载CUDA runfile](#2. 下载CUDA runfile)
[临时将 cc 指向 GCC 12+](#临时将 cc 指向 GCC 12+)
[1. 检查驱动](#1. 检查驱动)
[2. 检查CUDA编译器](#2. 检查CUDA编译器)
[3. 检查GPU进程](#3. 检查GPU进程)
[Q1: Driver/library version mismatch 错误](#Q1: Driver/library version mismatch 错误)
[Q2: 编译驱动时报 unrecognized command-line option '-ftrivial-auto-var-init=zero'](#Q2: 编译驱动时报 unrecognized command-line option '-ftrivial-auto-var-init=zero')
[Q3: runfile 运行时卡住没反应](#Q3: runfile 运行时卡住没反应)
[Q4: 安装后 nvcc 找不到](#Q4: 安装后 nvcc 找不到)
[Q5: 只想给当前用户配置CUDA](#Q5: 只想给当前用户配置CUDA)
[📌 总结](#📌 总结)
环境说明
| 项目 | 配置 |
|---|---|
| GPU | NVIDIA GeForce RTX 3080 (LHR, Ampere架构) |
| 操作系统 | Ubuntu 22.04, 内核 6.8.0 |
| 目标CUDA版本 | 12.6 |
| 目标驱动版本 | 560.28.03 |
| 安装方式 | runfile 离线安装 |
安装前准备
1. 检查当前状态
bash
# 查看GPU是否可用(驱动损坏时会报错)
nvidia-smi
# 检查内核版本
uname -r
# 查看已安装的NVIDIA相关包
dpkg -l | grep -iE 'nvidia|cuda'
2. 下载CUDA runfile
从 NVIDIA官网 下载对应版本的 runfile:
bash
# 从官网下载CUDA包
wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda_12.6.0_560.28.03_linux.run
官网下载地址:
⚠️ 注意:runfile 同时包含 CUDA Toolkit 和 NVIDIA 驱动,约 4GB。
彻底清理旧驱动和CUDA
⚠️ 重要:如果系统存在多个CUDA版本或驱动残留,必须彻底清理,否则会导致安装冲突。
步骤1:卸载apt安装的NVIDIA/CUDA包
bash
sudo apt-get --purge remove -y '*nvidia*' '*cuda*' '*libnvidia*'
步骤2:清理依赖
bash
sudo apt-get autoremove -y
sudo apt-get autoclean
步骤3:删除CUDA残留目录
bash
sudo rm -rf /usr/local/cuda /usr/local/cuda-* /etc/alternatives/cuda*
步骤4:清理残留的TensorRT等包(如果有)
bash
sudo dpkg --purge libcufile-12-4
sudo apt-get --purge remove -y 'libnvinfer*' 'libnvonnxparsers*'
sudo rm -rf /usr/local/cudaback
步骤5:卸载内核中的NVIDIA模块
bash
# 查看是否还有nvidia模块
lsmod | grep nvidia
# 卸载模块(如果有)
sudo rmmod nvidia_uvm
sudo rmmod nvidia
sudo rmmod ecc
步骤6:验证清理完成
bash
# 应该没有输出
dpkg -l | grep -i nvidia
ls /usr/local/cuda* 2>/dev/null
准备工作:编译器问题处理
⚠️ 关键问题 :内核 6.8+ 编译NVIDIA驱动需要 GCC 12+,但系统默认的
cc可能指向 GCC 11。
检查当前编译器版本
bash
which gcc && gcc --version | head -1
which cc && cc --version | head -1
临时将 cc 指向 GCC 12+
bash
# 备份原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方式)
执行安装
bash
# 进入runfile所在目录
cd /path/to/your/runfile
# 运行安装程序(交互模式)
sudo sh cuda_12.6.0_560.28.03_linux.run
安装界面操作说明
-
接受EULA :输入
accept回车 -
选择组件:
-
[X] Driver→ 必须勾选 -
[X] CUDA Toolkit 12.6→ 必须勾选 -
[ ] CUDA Demo Suite→ 可选,建议取消 -
[ ] CUDA Documentation→ 可选,建议取消
-
-
开始安装 :用方向键选中
Install按回车
安装成功标志
bash
===========
= Summary =
===========
Driver: Installed
Toolkit: Installed in /usr/local/cuda-12.6/
配置全局环境变量
让所有用户都能使用
nvcc和 CUDA 库。
创建全局配置脚本
bash
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
立即生效
bash
source /etc/profile.d/cuda.sh
恢复编译器配置
安装完成后,将
cc恢复为原来的版本,避免影响其他编译任务。
bash
sudo rm /usr/bin/cc
sudo mv /usr/bin/cc.bak /usr/bin/cc
验证恢复:
bash
cc --version # 应显示原来的版本(如 11.4)
验证安装
1. 检查驱动
bash
nvidia-smi
预期输出:
bash
+-----------------------------------------------------------------------------------------+
| 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编译器
bash
nvcc --version
预期输出:
bash
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进程
bash
nvidia-smi
查看 Processes 部分,确认没有异常进程占用。
重启服务器(推荐)
bash
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文件需要时间。
解决:
bash
# 检查磁盘空间
df -h /tmp
# 或指定临时目录
sudo TMPDIR=/ssd2/tmp sh cuda_*.run
Q4: 安装后 nvcc 找不到
原因:PATH未配置CUDA的bin目录。
解决:配置环境变量(参考第6步)。
Q5: 只想给当前用户配置CUDA
解决 :在 ~/.bashrc 中添加:
bash
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,可以开始深度学习训练了!
如果本文对你有帮助,欢迎点赞收藏!