第二章 环境搭建:Ubuntu系统配置、NVIDIA驱动与CUDA安装、Docker环境配置、PyTorch与MMDetection3D安装
说实话,做BEV感知部署,最磨人的往往不是模型本身,而是环境搭建。我见过太多同学在群里问「为什么我跑不起来」,最后发现是CUDA版本不对,或者Docker没配好。这一章,咱们就把这些坑一个个填平。
核心目标:搭建一个可复现、可迁移的BEV感知开发环境。说白了,就是让你在任何一台新机器上,都能半小时内把环境跑起来。
2.1 Ubuntu系统配置:从零开始
我个人习惯用Ubuntu 20.04 LTS。为什么?因为PyTorch和CUDA的兼容性最好。你想想看,如果选了个太新的版本,很多库还没适配,那真是自找麻烦。
系统安装要点:
- 分区建议:至少给根目录
/分配100GB,给/home分配剩余空间。我遇到过同学把根目录只分了30GB,装了几个CUDA版本就满了,那叫一个尴尬。 - 换源:安装完第一件事,换国内源。我用的是清华源,速度稳定。
- SSH配置:如果你用服务器,记得开启SSH服务。我习惯把端口改成非标准端口,安全一点。
# 换源示例(清华源)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo apt update && sudo apt upgrade -y
# 安装基础工具
sudo apt install -y build-essential git vim curl wget
小技巧:装完系统后,我习惯先装个htop和nvtop,方便监控CPU和GPU状态。这两个工具在调试时特别有用。
2.2 NVIDIA驱动与CUDA安装:别踩这些坑
驱动安装,说简单也简单,说复杂也复杂。我曾经在一台新机器上折腾了整整一下午,就是因为驱动版本和内核不匹配。
我的推荐方案:
- 用官方runfile安装驱动,不要用系统自带的nouveau。为什么?因为nouveau性能差,而且容易出兼容性问题。
- CUDA版本选11.8或12.1。这两个版本是目前PyTorch支持最稳定的。我建议用11.8,因为MMDetection3D对它的支持最好。
- 安装顺序:先装驱动,再装CUDA toolkit,最后装cuDNN。别搞反了。
# 禁用nouveau
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
sudo update-initramfs -u
# 重启后验证
lsmod | grep nouveau # 应该没有输出
# 安装驱动(以535版本为例)
sudo chmod +x NVIDIA-Linux-x86_64-535.154.05.run
sudo ./NVIDIA-Linux-x86_64-535.154.05.run
# 安装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
sudo sh cuda_11.8.0_520.61.05_linux.run
注意:安装CUDA时,不要勾选驱动选项(Driver),只安装CUDA Toolkit。否则会覆盖你刚装好的驱动版本,导致系统崩溃。我吃过这个亏,重装了三次系统才记住。
验证安装:
nvidia-smi # 查看驱动版本和GPU信息
nvcc --version # 查看CUDA版本
2.3 Docker环境配置:一次配置,到处运行
Docker是部署的神器。我现在的习惯是:所有项目都跑在Docker里,宿主机只装驱动和Docker。这样换机器时,直接把镜像拉下来就能跑。
安装Docker:
# 安装Docker Engine
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 将当前用户加入docker组(避免每次sudo)
sudo usermod -aG docker $USER
# 重新登录后生效
# 安装NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
个人经验:我习惯在Dockerfile里固定所有依赖的版本,包括Python、PyTorch、CUDA。这样即使半年后回来,也能复现一模一样的环境。你想想看,如果依赖版本变了,模型推理结果对不上,那排查起来多痛苦。
测试Docker GPU支持:
docker run --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi
如果能看到GPU信息,说明配置成功。
2.4 PyTorch与MMDetection3D安装:实战配置
终于到了最核心的部分。嗯,这里要注意版本匹配问题。
版本选择:
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| Python | 3.8 - 3.10 | 我习惯用3.8,兼容性最好 |
| PyTorch | 1.13.1 或 2.0.1 | 1.13.1更稳定,2.0.1支持torch.compile |
| MMDetection3D | 1.0.0rc6 或 1.1.0 | rc6更成熟,1.1.0有新特性 |
| MMCV | 2.0.0rc4 | 必须与MMDetection3D版本匹配 |
# 创建conda环境(推荐)
conda create -n bev_env python=3.8 -y
conda activate bev_env
# 安装PyTorch(以CUDA 11.8为例)
pip install torch==1.13.1+cu118 torchvision==0.14.1+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
# 安装MMCV
pip install mmcv-full==1.7.1 -f https://download.openmmlab.com/mmcv/dist/cu118/torch1.13/index.html
# 安装MMDetection3D
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
pip install -v -e .
避坑指南:我曾经在安装MMCV时,直接用了pip install mmcv,结果装成了CPU版本。后来才发现,必须指定mmcv-full并加上CUDA和PyTorch版本的索引链接。这个坑我踩了两次才记住。
验证安装:
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
python -c "import mmdet3d; print(mmdet3d.__version__)"
如果输出正常,说明环境搭建成功。
2.5 知识体系总览
为了让你对整个环境搭建流程有个全局认识,我画了张图。说白了,就是三层结构:底层是系统和驱动,中间是容器和CUDA,上层是框架和工具。
这张图你看懂了吗?说白了,每一层都依赖下一层。如果驱动没装好,CUDA就装不上;如果CUDA版本不对,PyTorch就装不上。所以我的建议是:按顺序来,别跳步。
总结:环境搭建的核心就四个字——版本匹配。只要把Ubuntu、驱动、CUDA、PyTorch、MMDetection3D的版本固定好,剩下的就是复制粘贴命令的事。我现在的做法是:把所有命令写成一个shell脚本,新机器上跑一遍就完事。