在深度学习、科学计算和图形处理等领域,GPU加速已经成为标配。相比CPU,现代GPU拥有数千个计算核心,能够并行处理大量数据。以NVIDIA显卡为例,其CUDA架构专门为并行计算优化,在训练神经网络时速度可达CPU的数十倍。
我在搭建机器学习开发环境时,发现很多新手会在GPU驱动安装环节踩坑。常见问题包括:驱动版本不匹配、CUDA安装失败、系统内核冲突等。本文将基于Ubuntu 22.04 LTS,详细演示如何从零搭建稳定的GPU计算环境。
首先确认你的显卡型号是否支持CUDA:
bash复制lspci | grep -i nvidia
如果是AMD显卡,需要改用ROCm平台。本文以NVIDIA RTX 3090为例。
注意:笔记本用户需特别注意,部分机型采用Optimus双显卡技术,需要额外配置PRIME切换。
推荐使用Ubuntu 22.04 LTS纯净安装:
bash复制# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装编译工具链
sudo apt install build-essential linux-headers-$(uname -r) -y
禁用系统自带的nouveau驱动:
bash复制sudo bash -c "echo 'blacklist nouveau' >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo 'options nouveau modeset=0' >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo update-initramfs -u
推荐使用NVIDIA官方仓库安装最新驱动:
bash复制# 添加官方PPA
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update
# 查找推荐驱动版本
ubuntu-drivers devices
# 安装驱动(以525版本为例)
sudo apt install nvidia-driver-525 -y
安装完成后验证:
bash复制nvidia-smi
正常输出应显示GPU型号、驱动版本和CUDA版本。
某些科研场景需要特定驱动版本:
bash复制# 从NVIDIA官网下载.run文件
chmod +x NVIDIA-Linux-x86_64-525.85.05.run
sudo ./NVIDIA-Linux-x86_64-525.85.05.run --no-opengl-files
关键参数说明:
--no-opengl-files:避免与系统自带OpenGL冲突--dkms:支持内核自动更新
推荐使用runfile方式安装CUDA 11.8:
bash复制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
安装时注意:
编辑~/.bashrc添加:
bash复制export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
验证安装:
bash复制nvcc --version
从NVIDIA开发者网站下载对应版本的cuDNN:
bash复制tar -xvf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
bash复制cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
对于需要环境隔离的场景,推荐使用NVIDIA Container Toolkit:
bash复制distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
如果遇到登录循环问题,尝试:
bash复制sudo systemctl stop gdm
sudo systemctl stop lightdm
Secure Boot导致的问题解决方案:
bash复制sudo mokutil --disable-validation
bash复制nvidia-smi -q -d TEMPERATURE
bash复制sudo nvidia-smi -pm 1
sudo nvidia-smi -ac 5001,1590
bash复制sudo systemctl set-default multi-user.target
nvtop:类似htop的GPU监控gpustat:简洁的状态显示我在实际使用中发现,定期清理旧的Linux内核可以避免驱动兼容性问题:
bash复制sudo apt autoremove --purge