Detectron2 构建时提示 "nvcc not found" 怎么解决
【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2
从源码构建 Detectron2 时,如果构建日志里出现"nvcc not found"、"Not compiled with GPU support"或"Detectron2 CUDA Compiler: not available",INSTALL.md 给出的解释只有一句话:构建 detectron2 时没有找到 CUDA。这篇文章按官方 FAQ 的路径,说明如何确认构建环境能否被 PyTorch 看到 CUDA、如何清理旧的构建产物并重建,以及构建后如何核对结果。适用于在 Linux 或 macOS 上、Python ≥ 3.7、PyTorch ≥ 1.8 的环境里从源码安装 detectron2 的读者。
先理解这个报错的触发条件
setup.py 里的get_extensions()决定了构建走哪条编译路径:只有当torch.cuda.is_available()为真且torch.utils.cpp_extension.CUDA_HOME不为None时(或者显式设置了环境变量FORCE_CUDA=1),才会使用CUDAExtension去编译.cu源码,也就需要调用 nvcc。换句话说,出现nvcc not found说明构建时 PyTorch 认为“要用 CUDA 编译”,但系统里找不到 nvcc 可执行文件。
所以解决方向只有两条,且都必须以 INSTALL.md 的官方判定标准为准:让构建时的 PyTorch 环境能看到一个有效的 CUDA 目录;如果环境里根本没有 GPU,就退回到纯 CPU 的使用方式(后面单独说明)。
第一步:确认构建环境能否看到 CUDA
在准备构建 detectron2 的那个 Python 环境里运行 INSTALL.md 给出的检查命令:
python -c 'import torch; from torch.utils.cpp_extension import CUDA_HOME; print(torch.cuda.is_available(), CUDA_HOME)'官方要求:在构建 detectron2 的时刻,这条命令应打印(True, a directory with cuda),即 GPU 可用且CUDA_HOME指向一个真实存在的 CUDA 目录。注意 INSTALL.md 特别强调是 “at the time you build detectron2”——如果你平时用 venv/conda 环境,构建时必须激活同一个环境再跑这条命令。
如果输出不符合预期(GPU 不可用,或CUDA_HOME为None),说明当前 PyTorch 装的就是不带 CUDA 的构建,或系统里没装 PyTorch 能识别的 CUDA。INSTALL.md 的“Common Installation Issues”中多个相邻条目(如"invalid device function"、"Undefined CUDA symbols")给出了同一类修复方向,二选一:
- 安装一个与你本地 CUDA 版本匹配的 PyTorch 构建(或自行编译 PyTorch);
- 安装一个与你当前 PyTorch 匹配的 CUDA 版本。
INSTALL.md 的 Requirements 部分还要求 PyTorch ≥ 1.8 与 torchvision 版本互相匹配,建议从 PyTorch 官网一并安装,并保证 gcc & g++ ≥ 5.4。
第二步:清理旧构建产物并重建
改好环境(重装 PyTorch 或补装 CUDA)之后,必须清掉旧的构建产物再重新构建。INSTALL.md 原文:
# 对本地 clone 构建的 detectron2,先清理旧的 build 产物 rm -rf build/ **/*.so这条命令会删除 detectron2 源码目录下的build/目录和所有.so编译产物,只影响当前这个源码目录,不会影响已安装的其它 Python 包。INSTALL.md 同时指出:“You often need to rebuild detectron2 after reinstalling PyTorch.”——重装过 PyTorch 就应重建,否则二进制扩展还是按旧环境编译的。
清理后重新执行构建(二选一,均来自 INSTALL.md):
# 本地 clone 后安装 python -m pip install -e detectron2 # 或直接从 git 仓库安装 python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' # 没有写权限时可加 --user在 macOS 上,INSTALL.md 建议给上面的安装命令加前缀环境变量:
CC=clang CXX=clang++ ARCHFLAGS="-arch x86_64" python -m pip install ...第三步:构建后核对 CUDA 版本是否一致
构建完成后,用python -m detectron2.utils.collect_env检查环境汇总。该命令的实现见 collect_env.py,输出中包含几项直接相关的信息:
CUDA_HOME:如果该目录不存在,输出会额外标注- invalid!;CUDA compiler:即 nvcc 的版本;- 如果
_C扩展没构建好,会打印detectron2._C: not built correctly: ...。
INSTALL.md 对 CUDA 相关故障的统一判据是:在collect_env的输出里,"Detectron2 CUDA Compiler"、"CUDA_HOME"、"PyTorch built with - CUDA"三处应指向相同版本的 CUDA 库;不一致时,就需要按第一步的两种方式让 PyTorch 与本地 CUDA 匹配。
没有 GPU 时的替代路径
如果你只是想跑推理、机器上没有可用 GPU,INSTALL.md 明确说明:大多数模型可以在没有 GPU 支持的情况下运行推理(但不能训练),做法是在 config 里设置MODEL.DEVICE='cpu'。对应地,由 setup.py 的判定逻辑可知,当torch.cuda.is_available()为假且CUDA_HOME为None时,构建本身就走CppExtension纯 CPU 路径,不再需要 nvcc。反过来要留意:FORCE_CUDA=1会强制进入 CUDA 编译路径,在 CUDA 不可见的环境里设置它只会让报错更直接,不是解决方案。
小结:排查顺序
- 在构建所用的同一环境里运行检查命令,确认输出为
(True, a directory with cuda); - 不符合就调整 PyTorch/CUDA 的匹配关系,按 INSTALL.md 建议从官方渠道安装匹配版本;
rm -rf build/ **/*.so清理后重新pip install;- 用
python -m detectron2.utils.collect_env核对CUDA_HOME、CUDA compiler等字段,确认没有- invalid!或not built correctly。
文档边界:INSTALL.md 只针对 “nvcc not found” 给出上述检查与清理重建流程,没有给出具体某版本 CUDA 的安装命令;不同 CUDA 与 PyTorch 构建的对应关系需要以 PyTorch 官方发布渠道的说明为准。
【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考