3、开发环境搭建(一):Ubuntu系统安装与配置、NVIDIA驱动与CUDA安装、cuDNN库配置、常见环境问题排查
做深度视觉开发,第一步就是搭环境。说实话,这一步劝退了很多人。我见过不少同学,代码写得挺好,结果卡在环境配置上,一卡就是两三天。今天咱们就把这块硬骨头啃下来。
本章核心目标:从零搭建一套可用的深度视觉开发环境,包括Ubuntu系统、NVIDIA驱动、CUDA和cuDNN。这套环境配好了,后面30章的内容才能跑起来。
3.1 Ubuntu系统安装与配置
我个人习惯用Ubuntu 20.04 LTS。为什么?因为它的生态最成熟。你想想看,PyTorch、TensorFlow这些框架,对20.04的支持是最好的。18.04太老,22.04又太新,有些库还没跟上。
我的建议:如果你是新装机,直接上Ubuntu 20.04.6 LTS。别折腾其他版本,省下来的时间多跑几个模型不香吗?
安装步骤其实不复杂,但有几个坑要注意:
- 制作启动盘——用Rufus(Windows)或balenaEtcher(macOS),别用UltraISO,我吃过亏
- 分区方案——至少分三个区:/(根目录)50GB、/home(用户数据)剩余空间、swap(交换分区)等于内存大小
- 安装时断网——嗯,这里要注意。联网安装会下载更新,慢得要命。先断网装完,再配源更新
装完系统第一件事,换源。我一般用清华源或阿里源,速度杠杠的:
# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 替换为清华源(Ubuntu 20.04)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 更新
sudo apt update && sudo apt upgrade -y
注意:不同Ubuntu版本的源不一样。20.04用focal,22.04用jammy。别搞混了,否则会报依赖错误。
3.2 NVIDIA驱动安装
驱动安装是重头戏。我在项目中遇到过好几次,驱动装完系统直接黑屏。后来总结了一套稳妥的方法。
首先,确认你的显卡型号:
lspci | grep -i nvidia
如果输出为空,说明显卡没识别到,检查一下是不是没插好,或者BIOS里没开启。
安装驱动有三种方式,我按推荐程度排序:
| 方式 | 命令/操作 | 推荐指数 | 说明 |
|---|---|---|---|
| Ubuntu仓库安装 | sudo apt install nvidia-driver-535 |
⭐⭐⭐⭐⭐ | 最稳定,兼容性好 |
| NVIDIA官网.run文件 | 下载后 sudo sh ./NVIDIA-*.run |
⭐⭐⭐ | 版本最新,但容易出问题 |
| PPA源安装 | sudo add-apt-repository ppa:graphics-drivers/ppa |
⭐⭐ | 不推荐,依赖容易乱 |
我个人只用第一种方式。简单、安全、省心。装完重启,跑一下 nvidia-smi,看到GPU信息就说明成功了。
避坑指南:我曾经用官网.run文件装驱动,结果因为nouveau开源驱动没禁用,装完直接黑屏。后来学乖了,装之前先禁用nouveau:
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nvidia-nouveau.conf
sudo update-initramfs -u
# 然后重启,再装驱动
3.3 CUDA安装配置
驱动装好了,接下来装CUDA。说白了,CUDA就是NVIDIA给开发者用的并行计算平台。没有它,深度学习框架就调不动GPU。
CUDA版本怎么选?我建议跟PyTorch走。比如PyTorch 2.0推荐CUDA 11.8,那你就装11.8。别追新,稳定第一。
安装步骤:
- 去NVIDIA官网下载CUDA Toolkit(选runfile方式,别选deb)
- 执行安装命令,注意不要装驱动(因为我们已经装过了)
- 配置环境变量
# 下载CUDA 11.8(以这个版本为例)
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
# 执行安装,取消勾选Driver
sudo sh cuda_11.8.0_520.61.05_linux.run
# 配置环境变量(加到 ~/.bashrc 末尾)
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
# 生效
source ~/.bashrc
# 验证
nvcc --version
小技巧:如果你需要多个CUDA版本共存,装在不同目录就行。用的时候改一下环境变量,指向你要用的版本。我电脑上就同时装了11.7和11.8,切换很方便。
3.4 cuDNN库配置
cuDNN是NVIDIA针对深度神经网络做的加速库。没有它,卷积运算会慢很多。你可以把它理解成GPU的「涡轮增压器」。
安装cuDNN需要先注册NVIDIA开发者账号,然后下载对应的版本。注意版本必须和CUDA匹配。
# 假设下载了 cudnn-linux-x86_64-8.9.0.131_cuda11-archive.tar.xz
tar -xvf cudnn-linux-x86_64-8.9.0.131_cuda11-archive.tar.xz
# 复制文件到CUDA目录
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-11.8/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64/
# 设置权限
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h
sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*
# 验证
cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
注意:cuDNN的版本号格式是「主版本.次版本.补丁版本」,比如8.9.0。一定要和CUDA版本对应上。我见过有人把cuDNN 8.6装到CUDA 12上,结果训练时各种报错。
3.5 常见环境问题排查
环境搭完了,但十有八九会遇到问题。别慌,我整理了几个最常见的坑:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
nvidia-smi 报错「NVIDIA-SMI has failed」 |
驱动没装好或内核升级后驱动失效 | 重新安装驱动,或使用 dkms 管理驱动 |
nvcc --version 找不到命令 |
环境变量没配置 | 检查 ~/.bashrc 中的PATH设置 |
| PyTorch检测不到GPU | CUDA版本不匹配或cuDNN没装 | 运行 python -c "import torch; print(torch.cuda.is_available())" 排查 |
编译时报错 cannot find -lcudart |
LD_LIBRARY_PATH没设置 | 确认 /usr/local/cuda/lib64 在路径中 |
我的经验:遇到问题先看日志。很多同学一报错就慌了,到处问人。其实大部分问题,看 /var/log/nvidia-installer.log 或者 dmesg | grep nvidia 就能找到答案。
还有一个常见问题——内核升级后驱动失效。Ubuntu会自动更新内核,有时候新内核和驱动不兼容。我的做法是锁定内核版本:
# 查看当前内核
uname -r
# 锁定内核(以5.15.0-91-generic为例)
sudo apt-mark hold linux-image-5.15.0-91-generic
sudo apt-mark hold linux-headers-5.15.0-91-generic
嗯,到这里环境就搭好了。你可以跑一个简单的PyTorch程序验证一下:
import torch
print(f"PyTorch版本: {torch.__version__}")
print(f"CUDA可用: {torch.cuda.is_available()}")
print(f"GPU数量: {torch.cuda.device_count()}")
print(f"当前GPU: {torch.cuda.get_device_name(0)}")
如果输出显示CUDA可用,恭喜你,环境搭建成功了!
公众号:蓝海资料掘金营,微信deep3321