detectron2 避坑安装手册:从环境配置到编译成功的全流程解析
1. 环境准备从零搭建detectron2的避雷指南第一次接触detectron2的朋友可能会被它的安装过程吓到——CUDA版本冲突、源码编译报错、依赖项缺失随便一个坑都能让你折腾半天。我去年在部署一个工业质检项目时曾经花了整整三天时间才把环境跑通。现在回头看其实90%的问题都出在环境配置阶段。先说说硬件门槛。虽然官方文档说支持CPU模式但实测下来没有NVIDIA显卡根本跑不动。建议至少准备显存6GB以上的显卡GTX 1060起步我用的是一块RTX 3060。软件方面最头疼的是CUDA版本匹配这里有个血泪教训千万不要直接安装最新版目前最稳定的组合是CUDA 11.3 PyTorch 1.12.1这也是大多数预编译轮子支持的版本。1.1 创建虚拟环境新手最容易犯的错误就是直接往系统Python里装依赖。用conda创建独立环境能避免污染系统环境后续排查问题也方便conda create --name detectron2 python3.8 -y conda activate detectron2这里特别说明选择Python 3.8的原因PyTorch对3.9的支持还不完善我在3.10环境下遇到过numpy兼容性问题。激活环境后立即设置国内镜像源否则后面下载大型依赖包会非常慢pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple1.2 CUDA工具链安装到NVIDIA官网下载CUDA 11.3和对应版本的cuDNN时要注意选择runfile(local)安装方式。deb包安装虽然简单但容易和系统自带的Nouveau驱动冲突。安装完成后验证版本nvcc --version # 应显示11.3 nvidia-smi # 右上角CUDA Version显示可能不同这是驱动支持的最高版本不影响实际使用有个隐藏坑点是gcc版本。Ubuntu 20.04默认gcc 9.4会与CUDA 11.3冲突需要降级到gcc 7sudo apt install gcc-7 g-7 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 702. PyTorch的精准狙击安装法PyTorch版本选择直接决定后续能否成功编译detectron2。很多教程只告诉你要装GPU版本但没说明白版本号的玄机。看这个典型错误案例# 错误示范这样装会导致后续编译失败 pip install torch torchvision torchaudio正确的安装姿势必须指定完整版本号CUDA版本组合。经过多次测试这套组合最稳定pip install torch1.12.1cu113 torchvision0.13.1cu113 torchaudio0.12.1 \ --extra-index-url https://download.pytorch.org/whl/cu113安装后务必验证CUDA是否可用import torch print(torch.cuda.is_available()) # 必须返回True print(torch.version.cuda) # 应显示11.3如果显示False八成是PyTorch版本没装对。有个快速排查技巧在Python中执行torch.zeros(1).cuda()如果报错信息包含CUDA unknown error说明版本组合有问题。3. 依赖项的蝴蝶效应除了PyTorch这几个依赖项的版本也暗藏杀机pip install opencv-python4.5.5.64 \ cython0.29.32 \ pycocotools2.0.4 \ fvcore0.1.5.post20221221特别提醒不要安装最新的opencv-python4.7.x版本会导致detectron2的visualization模块报错。我在三个不同项目中都遇到了这个坑错误信息是AttributeError: NoneType object has no attribute shape。pycocotools建议从源码编译安装避免预编译包的ABI不兼容问题git clone https://github.com/cocodataset/cocoapi.git cd cocoapi/PythonAPI python setup.py build_ext install4. 源码编译的生死时速终于来到最刺激的环节——编译detectron2。先克隆官方仓库git clone https://github.com/facebookresearch/detectron2.git cd detectron2关键步骤来了必须修改这个文件才能通过编译vim detectron2/layers/csrc/nms_rotated/nms_rotated_cuda.cu在第10行插入以下内容注意不是在文件末尾追加#define WITH_HIP这个修改是为了绕过HIP编译器检查否则会报Error: identifier THCDeviceAllocator is undefined。保存退出后执行安装python -m pip install -e .编译过程可能会持续5-15分钟取决于你的CPU性能。如果卡在Building wheel for detectron2...超过20分钟大概率是内存不足。我曾在AWS t2.micro实例上遇到过这个问题增加swap空间后解决sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile5. 验证安装的终极测试你以为看到Successfully installed就万事大吉了太天真我遇到过编译成功但运行时崩溃的情况。用这个测试脚本验证核心功能from detectron2 import model_zoo from detectron2.engine import DefaultPredictor from detectron2.config import get_cfg cfg get_cfg() cfg.merge_from_file(model_zoo.get_config_file(COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml)) cfg.MODEL.WEIGHTS model_zoo.get_checkpoint_url(COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml) predictor DefaultPredictor(cfg) # 这行不报错才算真正成功如果遇到ImportError: cannot import name image_ops from torchvision这样的错误说明torchvision版本不对。此时需要重新安装指定版本pip install --force-reinstall torchvision0.13.1cu1136. 常见报错急救手册Segmentation fault (core dumped)90%的情况是CUDA和PyTorch版本不匹配。彻底卸载后重装pip uninstall torch torchvision torchaudio pip cache purge # 然后重新安装指定版本undefined symbol: _ZN6caffe28TypeMeta21_typeMetaDataInstanceI...这是ABI兼容性问题需要完全重建环境。建议删除conda环境从头开始。CUDA out of memory不一定是显存真不够可能是CUDA上下文没释放。在代码开头添加import torch torch.cuda.empty_cache()7. 生产环境部署建议如果要在服务器集群上批量部署推荐使用Docker镜像。这是我验证过的Dockerfile模板FROM nvidia/cuda:11.3.1-cudnn8-runtime-ubuntu20.04 RUN apt update apt install -y git gcc-7 g-7 RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 COPY . /app WORKDIR /app RUN pip install torch1.12.1cu113 torchvision0.13.1cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html RUN pip install -e .对于需要长期运行的训练任务建议在代码中加入定期显存清理逻辑import gc def clean_memory(): gc.collect() torch.cuda.empty_cache()
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2521207.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!