装 detectron2[1],开头遇到 ninja
的报错,参考 [2],关掉 ninja
。然后又报了 nvcc
的错:
× python setup.py develop did not run successfully.
│ exit code: 1
╰─> [36 lines of output]
running develop
running egg_info
writing detectron2.egg-info/PKG-INFO
writing dependency_links to detectron2.egg-info/dependency_links.txt
writing requirements to detectron2.egg-info/requires.txt
writing top-level names to detectron2.egg-info/top_level.txt
reading manifest file 'detectron2.egg-info/SOURCES.txt'
adding license file 'LICENSE'
writing manifest file 'detectron2.egg-info/SOURCES.txt'
running build_ext
building 'detectron2._C' extension
creating build
creating build/temp.linux-x86_64-cpython-38
creating build/temp.linux-x86_64-cpython-38/home
creating build/temp.linux-x86_64-cpython-38/home/tianyou
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2/detectron2
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc/ROIAlignRotated
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc/box_iou_rotated
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc/cocoeval
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc/deformable
creating build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc/nms_rotated
gcc -pthread -B /data/tianyou/miniconda3/envs/detectron2/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DWITH_CUDA -I/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc -I/data/tianyou/miniconda3/envs/detectron2/lib/python3.8/site-packages/torch/include -I/data/tianyou/miniconda3/envs/detectron2/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/data/tianyou/miniconda3/envs/detectron2/lib/python3.8/site-packages/torch/include/TH -I/data/tianyou/miniconda3/envs/detectron2/lib/python3.8/site-packages/torch/include/THC -I/data/tianyou/miniconda3/envs/detectron2/include/python3.8 -c /home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc/ROIAlignRotated/ROIAlignRotated_cpu.cpp -o build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc/ROIAlignRotated/ROIAlignRotated_cpu.o -DTORCH_API_INCLUDE_EXTENSION_H -DPYBIND11_COMPILER_TYPE=\"_gcc\" -DPYBIND11_STDLIB=\"_libstdcpp\" -DPYBIND11_BUILD_ABI=\"_cxxabi1011\" -DTORCH_EXTENSION_NAME=_C -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
/usr/bin/nvcc -DWITH_CUDA -I/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc -I/data/tianyou/miniconda3/envs/detectron2/lib/python3.8/site-packages/torch/include -I/data/tianyou/miniconda3/envs/detectron2/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/data/tianyou/miniconda3/envs/detectron2/lib/python3.8/site-packages/torch/include/TH -I/data/tianyou/miniconda3/envs/detectron2/lib/python3.8/site-packages/torch/include/THC -I/data/tianyou/miniconda3/envs/detectron2/include/python3.8 -c /home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc/ROIAlignRotated/ROIAlignRotated_cuda.cu -o build/temp.linux-x86_64-cpython-38/home/tianyou/codes/data/MvImNet/detectron2/detectron2/layers/csrc/ROIAlignRotated/ROIAlignRotated_cuda.o -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options '-fPIC' -O3 -DCUDA_HAS_FP16=1 -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ -DTORCH_API_INCLUDE_EXTENSION_H -DPYBIND11_COMPILER_TYPE=\"_gcc\" -DPYBIND11_STDLIB=\"_libstdcpp\" -DPYBIND11_BUILD_ABI=\"_cxxabi1011\" -DTORCH_EXTENSION_NAME=_C -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_86,code=compute_86 -gencode=arch=compute_86,code=sm_86 -std=c++14
nvcc fatal : No input files specified; use option --help for more information
/data/tianyou/miniconda3/envs/detectron2/lib/python3.8/site-packages/setuptools/command/easy_install.py:144: EasyInstallDeprecationWarning: easy_install command is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
/data/tianyou/miniconda3/envs/detectron2/lib/python3.8/site-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
error: command '/usr/bin/nvcc' failed with exit code 1
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
官方的 FAQ[3,4]、issues 和博客都没找到解决方案。但在 [3,4] 看到一句测试:
python -c 'import torch; from torch.utils.cpp_extension import CUDA_HOME; print(torch.cuda.is_available(), CUDA_HOME)'
输出是:
True /usr
但 /usr 根本就不是 CUDA_HOME
啊喂!看 [5],CUDA_HOME
应该形如 /usr/local/cuda 或者 /usr/local/cuda-11.1 这样怼到具体 cuda 目录的才对。于是初步测试 nvcc
命令:
- 运行
nvcc -V
,报错:nvcc fatal : No input files specified; use option --help for more information
- 运行
nvcc --help
,也报这个错 ↑ \uparrow ↑。
有毒吧?看 whereis nvcc
:
nvcc: /usr/bin/nvcc /etc/nvcc.profile /usr/share/man/man1/nvcc.1.gz
而又在 detectron2/detectron2/utils/collect_env.py 中搜到一句:
nvcc = os.path.join(CUDA_HOME, "bin", "nvcc")
猜测可能是要用 /usr/local/cuda/bin/nvcc 来执行才行,而从上面报错来看,用的是裸的 nvcc
命令,并没有指定 cuda 目录下的 nvcc,再用 /usr/bin/nvcc -V
、/usr/bin/nvcc --help
可以复现前面的奇怪报错,确定安装的时候用的是 /usr/bin/nvcc。
把它改成用 /usr/local/cuda/bin/nvcc 试试:
# 让 shell 先搜到 /usr/local/cuda/nvcc
# 就可以避免使用 /usr/bin/nvcc
PATH=/usr/local/cuda/bin/:$PATH \
$CONDA_BIN/python -m pip install -e detectron2
结果就成功了。
installing script
我安装 detectron2 的脚本:
#!/bin/bash
# facebookresearch/detectron2
# - https://github.com/facebookresearch/detectron2
# installation
# - https://detectron2.readthedocs.io/en/latest/tutorials/install.html
CONDA_P=~/miniconda3
ENV=detectron2
if [ ! -d $CONDA_P/envs/$ENV ]; then
conda create --name $ENV python=3.8 -y
fi
CONDA_BIN=$CONDA_P/envs/$ENV/bin
$CONDA_BIN/pip install torch==1.8.2 torchvision==0.9.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu111
$CONDA_BIN/pip install opencv-python
# 从 github 下
# git clone https://github.com/facebookresearch/detectron2.git
echo 从 gitee 的公开中转仓下(加速)
git clone https://gitee.com/xoxleoxox/detectron2
# 停用 `ninja` 避坑:改 *detectron2/setup.py*
# ref: https://blog.csdn.net/jiankangyq/article/details/121879936
sed -i "s/BuildExtension\}/BuildExtension\.with_options\(use_ninja\=False\)\}/" detectron2/setup.py
if [ -d detectron2/build ]; then rm -rf detectron2/build/ **/*.so; fi
# BUG: 默认的 `nvcc -> /usr/bin/nvcc` 连 `nvcc -V`、`nvcc --help` 都会报错!
# 换用 */usr/local/cuda/bin/nvcc*
PATH=/usr/local/cuda/bin/:$PATH \
$CONDA_BIN/python -m pip install -e detectron2
if [ -d detectron2/build ]; then rm -rf detectron2/build/; fi