第二章 环境搭建: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安装:别踩这些坑

驱动安装,说简单也简单,说复杂也复杂。我曾经在一台新机器上折腾了整整一下午,就是因为驱动版本和内核不匹配。

我的推荐方案:

  1. 用官方runfile安装驱动,不要用系统自带的nouveau。为什么?因为nouveau性能差,而且容易出兼容性问题。
  2. CUDA版本选11.8或12.1。这两个版本是目前PyTorch支持最稳定的。我建议用11.8,因为MMDetection3D对它的支持最好。
  3. 安装顺序:先装驱动,再装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,上层是框架和工具。

BEV感知环境搭建知识体系 第一层:系统与驱动 Ubuntu 20.04 LTS NVIDIA驱动 (535) CUDA 11.8 Toolkit cuDNN 8.6 基础工具 (git, vim, htop) 第二层:容器与虚拟化 Docker Engine NVIDIA Container Toolkit Docker Compose 自定义Dockerfile(固定版本) 第三层:框架与工具 Python 3.8 + Conda PyTorch 1.13.1 MMCV 1.7.1 MMDetection3D 1.0.0rc6 其他依赖 (numpy, opencv) 三层架构:从底层到上层,逐层依赖,不可颠倒

这张图你看懂了吗?说白了,每一层都依赖下一层。如果驱动没装好,CUDA就装不上;如果CUDA版本不对,PyTorch就装不上。所以我的建议是:按顺序来,别跳步。

总结:环境搭建的核心就四个字——版本匹配。只要把Ubuntu、驱动、CUDA、PyTorch、MMDetection3D的版本固定好,剩下的就是复制粘贴命令的事。我现在的做法是:把所有命令写成一个shell脚本,新机器上跑一遍就完事。

可可精品资料库