安装¶
需求¶
Linux 或 macOS,Python ≥ 3.7
PyTorch ≥ 1.8 和 torchvision 与 PyTorch 安装匹配。 在 pytorch.org 处一起安装它们,以确保这一点。
OpenCV 可选,但演示和可视化需要。
从源代码构建 Detectron2¶
需要 gcc & g++ ≥ 5.4。 ninja 可选,但推荐使用,可以加快构建速度。 在拥有它们之后,运行
python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'
# (add --user if you don't have permission)
# Or, to install it from a local clone:
git clone https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2
# On macOS, you may need to prepend the above commands with a few environment variables:
CC=clang CXX=clang++ ARCHFLAGS="-arch x86_64" python -m pip install ...
要重新构建从本地克隆构建的 detectron2,请使用 rm -rf build/ **/*.so
首先清除旧的构建。 您通常需要在重新安装 PyTorch 后重新构建 detectron2。
安装预构建的 Detectron2(仅限 Linux)¶
从下表中选择要安装的版本 v0.6(2021 年 10 月)
CUDA | torch 1.10 | torch 1.9 | torch 1.8 |
---|---|---|---|
11.3 | 安装 | ||
11.1 | 安装 | 安装 | 安装 |
10.2 | 安装 | 安装 | 安装 |
10.1 | 安装 | ||
cpu | 安装 | 安装 | 安装 |
请注意
预构建的软件包必须与相应版本的 CUDA 和 PyTorch 的官方软件包一起使用。 否则,请从源代码构建 detectron2。
每隔几个月就会发布新软件包。 因此,软件包可能不包含主分支中的最新功能,并且可能与使用 detectron2 的研究项目的开发分支不兼容(例如,那些在 projects 中的项目)。
常见安装问题¶
点击每个问题以查看解决方案
类似于“TH..”、“at::Tensor...”、“torch...”的未定义符号
这通常发生在 detectron2 或 torchvision 没有用您正在运行的 PyTorch 版本编译时。
如果错误来自预构建的 torchvision,请卸载 torchvision 和 pytorch,然后按照 pytorch.org 中的说明重新安装它们。 这样版本就会匹配。
如果错误来自预构建的 detectron2,请查看 发布说明,卸载并重新安装与 pytorch 版本匹配的正确预构建 detectron2。
如果错误来自您从源代码手动构建的 detectron2 或 torchvision,请删除您构建的文件(build/
,**/*.so
)并重新构建它,以便它可以获取您环境中当前版本的 pytorch。
如果以上说明不能解决此问题,请提供一个可以重现此问题的环境(例如 Dockerfile)。
缺少 torch 动态库,或者使用 detectron2 时立即出现段错误。
这通常发生在 detectron2 或 torchvision 没有用您正在运行的 PyTorch 版本编译时。 请查看前面的常见问题以了解解决方案。未定义的 C++ 符号(例如“GLIBCXX..”)或找不到 C++ 符号。
通常是因为库是用更新的 C++ 编译器编译的,但用旧的 C++ 运行时运行。
这经常发生在旧的 anaconda 上。 运行 conda update libgcc
升级其运行时可能会有所帮助。
根本的解决方案是避免不匹配,要么使用旧版本的 C++ 编译器编译,要么使用适当的 C++ 运行时运行代码。 要使用特定的 C++ 运行时运行代码,可以使用环境变量 LD_PRELOAD=/path/to/libstdc++.so
。
“找不到 nvcc”或“没有用 GPU 支持编译”或“Detectron2 CUDA 编译器:不可用”。
构建 detectron2 时找不到 CUDA。 您应该确保
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 支持的情况下运行推理(但不能训练)。 要使用 CPU,请在配置中设置 MODEL.DEVICE='cpu'
。
“无效的设备函数”或“没有可用于执行的内核映像”。
两种可能性
您使用一个版本的 CUDA 构建 detectron2,但使用另一个版本运行它。
要检查是否是这样,请使用
python -m detectron2.utils.collect_env
找出不一致的 CUDA 版本。 在此命令的输出中,您应该期望“Detectron2 CUDA 编译器”、“CUDA_HOME”、“PyTorch 使用 - CUDA 构建”包含相同版本的 cuda 库。当它们不一致时,您需要要么安装不同的 PyTorch 构建(或自己构建)以匹配您本地的 CUDA 安装,要么安装不同的 CUDA 版本以匹配 PyTorch。
PyTorch/torchvision/Detectron2 没有为正确的 GPU SM 架构(也称为计算能力)构建。
PyTorch/detectron2/torchvision 包含的架构在
python -m detectron2.utils.collect_env
中的“架构标志”中可用。 它必须包含您 GPU 的架构,可以在 developer.nvidia.com/cuda-gpus 上找到。如果您使用预构建的 PyTorch/detectron2/torchvision,它们已经包含了对大多数流行 GPU 的支持。 如果不支持,您需要从源代码构建它们。
从源代码构建 detectron2/torchvision 时,它们会检测 GPU 设备并仅为该设备构建。 这意味着编译后的代码可能无法在不同的 GPU 设备上运行。 要为正确的架构重新编译它们,请删除所有已安装/编译的文件,并使用
TORCH_CUDA_ARCH_LIST
环境变量正确设置重新构建它们。 例如,export TORCH_CUDA_ARCH_LIST="6.0;7.0"
使它为 P100 和 V100 都进行编译。
未定义的 CUDA 符号;无法打开 libcudart.so
用于构建 detectron2 或 torchvision 的 NVCC 版本与您正在运行的 CUDA 版本不匹配。 这经常发生在使用 anaconda 的 CUDA 运行时时。
使用 python -m detectron2.utils.collect_env
找出不一致的 CUDA 版本。 在此命令的输出中,您应该期望“Detectron2 CUDA 编译器”、“CUDA_HOME”、“PyTorch 使用 - CUDA 构建”包含相同版本的 cuda 库。
当它们不一致时,您需要要么安装不同的 PyTorch 构建(或自己构建)以匹配您本地的 CUDA 安装,要么安装不同的 CUDA 版本以匹配 PyTorch。
来自 NVCC / NVRTC 的 C++ 编译错误,或者“不支持的 gpu 架构”。
一些可能性
本地的 CUDA/NVCC 版本必须与 PyTorch 的 CUDA 版本匹配。 两者都可以在
python collect_env.py
中找到(从 这里 下载)。 当它们不一致时,您需要要么安装不同的 PyTorch 构建(或自己构建)以匹配您本地的 CUDA 安装,要么安装不同的 CUDA 版本以匹配 PyTorch。本地的 CUDA/NVCC 版本应支持您 GPU 的 SM 架构(也称为计算能力)。 您 GPU 的能力可以在 developer.nvidia.com/cuda-gpus 上找到。 NVCC 支持的能力在 这里 列出。 如果您的 NVCC 版本太旧,可以通过设置环境变量
TORCH_CUDA_ARCH_LIST
为更低的、支持的能力来解决此问题。您使用的 NVCC 和 GCC 的组合不兼容。 您需要更改其中一个的版本。 有关一些有效组合,请参阅 这里。 值得注意的是,CUDA<=10.1.105 不支持 GCC>7.3。
PyTorch 使用的 CUDA/GCC 版本可以通过
print(torch.__config__.show())
找到。
“ImportError:无法导入名称 '_C'”。
请按照上述说明构建并安装 detectron2。
或者,如果您正在从 detectron2 的根目录运行代码,请 cd
到另一个目录。 否则,您可能无法导入您安装的代码。
在一些“TraceWarning”之后,ONNX 转换出现段错误。
ONNX 软件包是用过时的编译器编译的。
请使用与 PyTorch 使用的版本更接近的编译器从源代码构建并安装 ONNX(在 torch.__config__.show()
中可用)。
在特定环境中安装:¶
Colab:请参阅我们的 Colab 教程,其中包含分步说明。
Docker:官方的 Dockerfile 使用几个简单的命令安装 detectron2。