Ubuntu 20.04 深度学习环境搭建:从NVIDIA驱动到CUDA的避坑指南
1. 深度学习环境搭建前的准备工作
刚接触深度学习的朋友们,第一次在Ubuntu上配置GPU环境时总会遇到各种"坑"。我当年第一次安装NVIDIA驱动时,就经历了循环登录、黑屏、驱动冲突等一系列问题,反复重装了不下五次系统。现在回想起来,如果能提前了解这些注意事项,至少能节省80%的折腾时间。
首先需要确认你的硬件配置。打开终端输入lspci | grep -i nvidia,这个命令会列出你显卡的型号信息。我遇到过不少朋友拿着集显笔记本想跑深度学习,结果发现根本不支持CUDA加速。目前主流的NVIDIA显卡从GTX 1060到最新的RTX 4090都支持CUDA,但笔记本的移动版显卡需要注意驱动兼容性问题。
提示:如果你是在云服务器上操作,大多数云服务商已经预装了基础驱动,建议先联系服务商确认是否需要自行安装驱动。
在开始安装前,强烈建议先更新系统。我习惯先执行以下命令:
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential gcc make perl dkms -y
这些基础工具包后续安装驱动时会用到,特别是dkms(动态内核模块支持)非常重要,它能确保内核升级后驱动自动重新编译。
2. 彻底解决NVIDIA驱动安装问题
2.1 禁用系统默认的nouveau驱动
这是最容易出问题的环节。Ubuntu默认使用开源的nouveau驱动来支持NVIDIA显卡,但在安装官方驱动前必须禁用它。我见过太多因为这一步没做好导致安装后黑屏的案例。
具体操作步骤:
sudo gedit /etc/modprobe.d/blacklist.conf
在文件末尾添加:
blacklist nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
保存后执行:
sudo update-initramfs -u
重启后用lsmod | grep nouveau检查,如果没有输出说明禁用成功。这里有个小技巧:如果更新失败,可以尝试在blacklist.conf中添加更多禁用选项,就像上面示例中的alias语句。
2.2 选择合适的驱动版本
驱动版本选择不当会导致各种奇怪问题。我推荐三种确定合适版本的方法:
- 使用官方检测工具:
ubuntu-drivers devices
这个命令会列出推荐的驱动版本。
-
到NVIDIA官网查询你的显卡型号对应的最新驱动。
-
根据你要安装的CUDA版本选择驱动。比如CUDA 11.x通常需要驱动版本>=450.80.02。
安装驱动时,我强烈建议使用apt方式而不是.run文件:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-510 # 以510版本为例
这种方式会自动处理依赖关系,比手动安装.run文件稳定得多。
3. CUDA工具包的安装与配置
3.1 多版本CUDA共存方案
深度学习框架对CUDA版本的要求各不相同,我建议安装多个CUDA版本并通过软链接切换。首先从NVIDIA官网下载对应版本的runfile安装包,例如CUDA 11.4:
wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run
sudo sh cuda_11.4.0_470.42.01_linux.run
安装时注意:
- 不要勾选Driver选项(除非你要更新驱动)
- 建议自定义安装路径到/usr/local/cuda-11.4
安装完成后,配置环境变量:
export PATH=/usr/local/cuda-11.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH
我习惯把这些配置写在~/.bashrc的单独区块里,方便管理多个版本:
# CUDA 11.4
# export PATH=/usr/local/cuda-11.4/bin:$PATH
# export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH
# CUDA 10.2
export PATH=/usr/local/cuda-10.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
需要切换版本时,只需注释掉当前版本,取消注释目标版本即可。
3.2 验证CUDA安装
安装完成后,我建议运行官方测试用例:
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
如果看到"Result = PASS",说明安装成功。常见问题包括:
- 提示找不到nvcc:检查PATH环境变量是否正确
- 报错关于libcudart.so:检查LD_LIBRARY_PATH是否包含CUDA的lib64路径
- 测试程序无法编译:检查gcc版本是否兼容
4. cuDNN的安装与验证
4.1 正确安装cuDNN
cuDNN是深度学习中最重要的加速库之一,但它的安装方式经常让人困惑。我推荐使用.deb包安装,这是最不容易出错的方式:
首先从NVIDIA开发者网站下载对应CUDA版本的cuDNN,例如CUDA 11.4对应的cuDNN 8.2:
sudo dpkg -i libcudnn8_8.2.2.26-1+cuda11.4_amd64.deb
sudo dpkg -i libcudnn8-dev_8.2.2.26-1+cuda11.4_amd64.deb
sudo dpkg -i libcudnn8-samples_8.2.2.26-1+cuda11.4_amd64.deb
4.2 验证cuDNN功能
NVIDIA提供了测试样例,我们可以通过编译运行来验证:
cp -r /usr/src/cudnn_samples_v8 ~/
cd ~/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN
如果看到"Test passed!",说明安装成功。常见错误及解决方法:
- 缺少FreeImage.h:执行
sudo apt install libfreeimage3 libfreeimage-dev - 编译错误:检查CUDA和cuDNN版本是否匹配
- 运行时错误:检查LD_LIBRARY_PATH是否包含cuDNN库路径
5. 常见问题排查与解决方案
5.1 循环登录问题
这是我被问最多的问题之一。症状是输入密码登录后,又跳回登录界面。解决方法:
- 进入tty终端(Ctrl+Alt+F2)
- 卸载当前驱动:
sudo apt purge nvidia*
sudo reboot
- 重新安装时加上关键参数:
sudo ./NVIDIA-Linux-x86_64-xxx.xx.run --no-opengl-files
这个--no-opengl-files参数告诉安装程序不要覆盖系统的OpenGL库。
5.2 多显卡配置
如果你同时有集成显卡和NVIDIA显卡,需要正确配置Xorg:
sudo gedit /usr/share/X11/xorg.conf.d/10-nvidia.conf
添加以下内容:
Section "OutputClass"
Identifier "nvidia"
MatchDriver "nvidia-drm"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration"
Option "PrimaryGPU" "yes"
ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
EndSection
这样可以确保系统优先使用NVIDIA显卡。
5.3 内核升级后的驱动问题
每次系统内核升级后,NVIDIA驱动可能需要重新编译。使用dkms可以自动处理:
sudo dkms install -m nvidia -v 510.85.02 # 替换为你安装的驱动版本
如果已经出现问题,可以尝试:
sudo apt install --reinstall nvidia-dkms-510
sudo update-initramfs -u
我在多个服务器和工作站上部署过深度学习环境,最大的经验就是:做好每个步骤的日志记录。这样当出现问题时,可以快速定位到是哪个环节出了错。另外,建议在安装前使用Timeshift创建系统快照,这样即使操作失误也能快速恢复。
更多推荐
所有评论(0)