在安装 detectron2、mask2former中的 MSDeformAttn 模块遇到问题。无法使用 sh make.sh 通过编译。这里遇到了一些解决方法,可以都尝试一下。
来源:
detectron2: Installation — detectron2 0.6 documentation
mask2former: GitHub - facebookresearch/Mask2Former: Code release for "Masked-attention Mask Transformer for Universal Image Segmentation"
MSDeformAttn (Deformable-DETR): GitHub - fundamentalvision/Deformable-DETR: Deformable DETR: Deformable Transformers for End-to-End Object Detection.
可以先尝试确定的部分,如果不行,再尝试不确定的部分。
一:查看 gcc g++ 版本是否一致(不确定)
可以使用
gcc -v
g++ -v
来查看对应的版本。网络上有说可能编译不通过是因为版本不对齐,如果安装相同的版本可能可以通过编译。
二:gcc g++ 版本太新的问题(我是这么解决的)
我原先使用的 gcc g++ 版本是 11,过于新了,我安装了 gcc g++ 9 的版本,能够通过编译
错误提示:unsupported GNU version
注意,安装好之后,需要设置环境变量:
export CC=/usr/bin/gcc-9
export CXX=/usr/bin/g++-9
三:是否有设置 CUDA_HOME
我使用 conda 安装的 cudatoolkit,我设置如下
export CUDA_HOME=<YOUR_CONDA_ROOT>/env/<YOUR_ENV_NAME>/pkgs/cuda-toolkit
四:是否安装了 cudatoolkit-dev (不确定)
有说法称需要使用对应版本的 nvcc,可以使用 dev 版本的来进行安装
五:是否有将 cudatoolkit 的路径加入到 PATH
export PATH=<YOUR_CONDA_ROOT>/env/<YOUR_ENV_NAME>/pkgs/cuda-toolkit/bin:$PATH
六:没有把 cc1plus 所在的位置加入 PATH
先找到对应的 cc1plus 的位置,我的位置在 /usr/bin/gcc/x86_64-linux-gnu/11 (11 是版本号,版本太大了,见二)
错误提示:error trying to exec 'cc1plus': execvp: No such file or directory
解决:export PATH=/usr/lib/gcc/x86_64-linux-gnu/11:$PATH
七:设置环境变量(不确定)
有说需要设置 torch cuda arch list 为 8.0,存疑
export TORCH_CUDA_ARCH_LIST="8.0"
八:需要先安装 torch 才能安装 MSDefAttn
最好使用 conda 进行安装,我是这样子的:
conda install conda install pytorch=1.9.0 -c pytorch