在深度学习、科学计算和图形处理等领域,GPU加速已经成为标配。相比CPU,GPU凭借其并行计算能力,能够将某些计算任务的速度提升数十倍甚至上百倍。以TensorFlow训练ResNet50模型为例,在RTX 3090上的训练速度比i9-10900K快约8-12倍。
Ubuntu作为最受欢迎的Linux发行版之一,其稳定的内核和丰富的软件生态使其成为搭建GPU计算环境的理想选择。但安装过程中常会遇到驱动冲突、CUDA版本不匹配等问题,这些问题往往让初学者耗费数小时甚至数天时间。
首先通过终端命令检查显卡型号:
bash复制lspci | grep -i nvidia
或者对于AMD显卡:
bash复制lspci | grep -i amd
不同世代的GPU对驱动版本有不同要求:
检查系统架构和内核版本:
bash复制uname -m && cat /etc/*release
推荐使用Ubuntu 20.04 LTS或22.04 LTS,这两个版本有最好的驱动支持。对于较新的GPU(如RTX 40系列),建议使用22.04以获得更好的兼容性。
安装前务必清理旧驱动:
bash复制sudo apt purge *nvidia* *cuda* -y
sudo apt autoremove -y
sudo reboot
推荐使用Ubuntu官方维护的驱动仓库:
bash复制sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
查询推荐驱动版本:
bash复制ubuntu-drivers devices
安装推荐驱动(以525版本为例):
bash复制sudo apt install nvidia-driver-525 -y
sudo reboot
检查驱动状态:
bash复制nvidia-smi
正常输出应显示GPU型号、驱动版本和CUDA版本。如果看到类似如下输出,说明驱动安装成功:
code复制+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12 Driver Version: 525.85.12 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 On | N/A |
| 30% 45C P8 15W / 250W | 512MiB / 12288MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
对于大多数用户,推荐使用网络仓库安装:
bash复制wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt update
sudo apt -y install cuda
在~/.bashrc末尾添加:
bash复制export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
然后执行:
bash复制source ~/.bashrc
验证CUDA安装:
bash复制nvcc --version
从NVIDIA开发者网站下载对应版本的cuDNN(需要注册账号)。以8.6.0为例:
bash复制sudo dpkg -i libcudnn8_8.6.0.163-1+cuda11.8_amd64.deb
sudo dpkg -i libcudnn8-dev_8.6.0.163-1+cuda11.8_amd64.deb
编译并运行样本代码:
bash复制cp -r /usr/src/cudnn_samples_v8/ $HOME
cd $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN
看到"Test passed!"表示安装成功。
对于AMD显卡,需要安装ROCm平台:
bash复制sudo apt update && sudo apt dist-upgrade -y
sudo apt install linux-headers-generic -y
sudo reboot
wget https://repo.radeon.com/amdgpu-install/22.40.3/ubuntu/jammy/amdgpu-install_22.40.3.50203-1_all.deb
sudo apt install ./amdgpu-install_22.40.3.50203-1_all.deb -y
sudo amdgpu-install --usecase=rocm,hip,mllib --no-dkms -y
检查ROCm状态:
bash复制/opt/rocm/bin/rocminfo
症状:nvidia-smi报错"NVIDIA-SMI has failed..."
解决方法:
bash复制mokutil --sb-state
如果启用,需要禁用或配置MOK:
bash复制sudo mokutil --disable-validation
bash复制lsmod | grep nvidia
如果没有输出,尝试手动加载:
bash复制sudo modprobe nvidia
dmesg | tail -n 20
当同时存在多个CUDA版本时,可以通过update-alternatives管理:
bash复制sudo update-alternatives --config cuda
选择正确的版本后,重新配置环境变量。
如果安装驱动后无法进入图形界面:
bash复制sudo apt install xserver-xorg-video-nouveau -y
启用持久模式可减少内核调用延迟:
bash复制sudo nvidia-smi -pm 1
设置高性能模式:
bash复制sudo nvidia-smi -ac 4004,1911
对于PCIe通道较多的系统,在/etc/default/grub中添加:
bash复制GRUB_CMDLINE_LINUX_DEFAULT="... iommu=pt"
然后更新grub:
bash复制sudo update-grub
安装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 -s -L 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 update
sudo apt install -y nvidia-container-toolkit
sudo systemctl restart docker
运行测试容器:
bash复制docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
检查GPU连接拓扑:
bash复制nvidia-smi topo -m
启用MIG模式:
bash复制sudo nvidia-smi -mig 1
创建计算实例:
bash复制nvidia-smi mig -cgi 9 -C
使用nvtop工具:
bash复制sudo apt install nvtop -y
nvtop
设置风扇曲线:
bash复制nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=70"
定期检查更新:
bash复制sudo ubuntu-drivers autoinstall
使用conda环境:
bash复制conda create -n pytorch python=3.9 -y
conda activate pytorch
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
对于CUDA 11.8:
bash复制pip install tensorflow[and-cuda]==2.12.0
验证GPU支持:
python复制import tensorflow as tf
print(tf.config.list_physical_devices('GPU'))
编辑/etc/modprobe.d/vfio.conf:
bash复制options vfio-pci ids=10de:13c2,10de:0fbb
更新initramfs:
bash复制sudo update-initramfs -u
在虚拟机中安装驱动后,检查性能:
bash复制nvidia-smi -q | grep "GPU Utilization"
在偏好设置中启用CUDA或OptiX后端,对于Cycles渲染器,性能提升可达5-8倍。
在/opt/resolve/configs/下创建GPU配置:
bash复制echo "GPUConfiguration=1" >> DaVinci-Resolve-GPU.txt
在/etc/sysctl.conf中添加:
bash复制vm.swappiness = 10
vm.dirty_ratio = 30
vm.dirty_background_ratio = 10
使用taskset绑定CPU核心:
bash复制taskset -c 0-7 ./gpu_app
备份关键配置文件:
bash复制sudo tar czvf nvidia_backup.tar.gz /etc/modprobe.d/nvidia* /etc/X11/xorg.conf
创建安装脚本:
bash复制#!/bin/bash
sudo apt update
sudo apt install --reinstall nvidia-driver-525 nvidia-dkms-525 -y
sudo update-initramfs -u
sudo reboot