RTX 3090上从零搭建BEVFusion环境:避开版本冲突的保姆级避坑指南

在深度学习领域,硬件与软件的版本兼容性问题一直是开发者面临的棘手挑战。特别是当使用RTX 3090这样的新一代显卡来运行基于较旧框架(如BEVFusion)的项目时,CUDA、PyTorch、MMCV等关键组件的版本冲突会让人寸步难行。本文将系统性地梳理这些依赖关系,提供一套经过验证的稳定版本组合方案,并深入解析每个版本选择背后的技术考量,帮助开发者不仅解决当前问题,更能举一反三应对类似的老项目新硬件适配场景。

1. 环境准备与基础组件安装

搭建BEVFusion环境的第一步是创建一个干净的Python虚拟环境。这一步看似简单,但Python版本的选择会直接影响后续所有依赖的兼容性。对于RTX 3090显卡和BEVFusion项目,推荐使用Python 3.8.3版本,这个版本在稳定性和兼容性之间取得了良好平衡。

conda create -n bevfusion python=3.8.3
conda activate bevfusion

接下来是最关键的PyTorch安装环节。RTX 3090需要CUDA 11.x支持,而BEVFusion原始要求是CUDA 9.2和PyTorch 1.3.1,这显然无法直接兼容。经过多次测试验证,PyTorch 1.8.0+cu111是一个理想的选择:

pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html

这个版本组合确保了:

  • 完全支持RTX 3090的Ampere架构
  • 兼容BEVFusion所需的大部分功能
  • 为后续安装MMCV和MMDetection提供了稳定的基础

注意:PyTorch 1.9+版本虽然理论上支持RTX 3090,但与BEVFusion要求的MMCV和MMDet版本存在兼容性问题,务必避免使用。

2. MMCV与MMDetection的版本适配

MMCV是BEVFusion依赖的核心计算机视觉库之一,其版本选择直接影响整个项目的稳定性。针对PyTorch 1.8.0和CUDA 11.1环境,我们有两种安装方法:

方法一:直接安装预编译版本

pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html

方法二:使用OpenMIM安装

pip install -U openmim
mim install mmcv-full==1.6.0

两种方法的主要区别在于:

特性 方法一 方法二
MMCV版本 1.4.0 1.6.0
安装方式 直接下载whl 通过mim管理
稳定性 已验证可用 可能需要额外调整
功能完整性 完整版 完整版

在实际测试中,方法一的成功率更高,特别是在网络环境不稳定的情况下。如果遇到安装失败,可以尝试更换国内镜像源:

pip install mmcv-full==1.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 解决常见依赖冲突问题

在安装MMDetection和MMDetection3D时,开发者经常会遇到各种依赖冲突。以下是几个典型问题及其解决方案:

3.1 Cython版本过高问题

当执行 pip install -v -e . 时,可能会遇到如下错误:

error: legacy-install-failure × Encountered error while trying to install package. ╰─> mmpycocotools

这是因为默认安装的Cython版本过高导致的,解决方法很简单:

pip install Cython==0.29.36

3.2 NetworkX版本冲突

另一个常见问题是NetworkX版本不兼容:

error: networkx 2.2 is installed but networkx>=2.8 is required by {'scikit-image'}

解决方法是指定安装兼容版本:

pip install scikit-image==0.19.3 networkx==2.8

3.3 NumPy与Pandas版本问题

当NumPy和Pandas版本不匹配时,会出现类似错误:

error: numpy 1.19.5 is installed but numpy>=1.20.3; python_version < "3.10" is required by {'pandas'}

推荐的版本组合是:

pip install numpy==1.21.6 pandas==1.4.4

4. 完整环境配置与验证

完成所有依赖安装后,我们需要编译BEVFusion环境并验证其正确性:

cd mmdetection-2.11.0
pip install -r requirements/build.txt
pip install -v -e .

cd ../mmdetection3d
pip install -v -e .

cd ..
python setup.py develop

环境验证时,特别要注意CUDA设备的识别情况。如果遇到 RuntimeError: radix_sort: failed on 1st step: cudaErrorInvalidDevice: invalid device ordinal 错误,通常是因为PyTorch版本与CUDA驱动不匹配。这时需要检查:

  1. CUDA驱动版本: nvidia-smi
  2. PyTorch CUDA支持: python -c "import torch; print(torch.version.cuda)"
  3. 设备识别: python -c "import torch; print(torch.cuda.is_available())"

提示:如果环境配置正确但仍有问题,可以尝试降低PyTorch版本到1.9.0,同时调整Python版本到3.7,这有时能解决一些难以排查的兼容性问题。

5. 数据准备与训练技巧

BEVFusion项目通常使用nuScenes数据集进行训练。数据准备阶段有几个关键注意事项:

  1. 数据集目录结构必须严格符合要求:

    data/nuscenes
    ├── samples
    ├── sweeps
    ├── maps
    └── v1.0-trainval
    
  2. 使用官方工具创建数据:

    python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes
    
  3. 如果遇到 ImportError: libcudart.so.10.1 错误,说明MMCV版本安装不正确,需要重新安装支持CUDA 11.1的版本。

训练阶段,针对RTX 3090显卡,推荐以下配置优化:

  • 单卡batch_size设置为2
  • 使用混合精度训练减少显存占用
  • 学习率根据实际batch_size调整
# 示例训练配置调整
optimizer = dict(type='AdamW', lr=2e-4, weight_decay=0.01)
runner = dict(type='EpochBasedRunner', max_epochs=36)
data = dict(samples_per_gpu=2, workers_per_gpu=4)
fp16 = dict(loss_scale=512.)

在实际项目中,我们发现使用4张RTX 3090训练BEVFusion模型,每个epoch大约需要4小时,完整训练周期约3天(36个epoch)。训练过程中要特别注意loss曲线的变化,如果发现loss下降异常,可能是batch_size设置过小导致的。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐