detectron2安裝出現Kernel not compiled with GPU support 報錯信息


在安裝使用 detectron2 的時候碰到**Kernel not compiled with GPU support **問題,前后拖了好久都沒解決,現總結一下以備以后查閱。

不想看心路歷程的可以直接跳到最后一小節,哈哈哈。

environment

因為我使用的是實驗室的服務器,所以很多東西沒法改,我的 cuda 環境如下:

  • ubuntu
  • nvcc默認版本是 9.2
  • nvidia-smi版本又是 10.0 的

我之前一直沒搞清楚這nvccnvidia-smi版本為什么可以不一樣,想了解原因的可以看一下我之前的文章顯卡,顯卡驅動,nvcc, cuda driver,cudatoolkit,cudnn 到底是什么?

reproduce

我一般都用 Anaconda 來安裝 pytorch,第一次安裝的時候使用的如下命令安裝的:

conda create -n myenv python=3.7
conda activate myenv
conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

按理說這個命令會給myenv環境安裝 cuda 編譯器和驅動等,但是在運行代碼的時候還是會出現標題中的報錯信息。我猜可能是因為 detectron2 在 build 的時候使用的是/usr/local路徑下的 cuda compiler(即 nvcc),而不是我的虛擬幻境下的 compiler。所以我重新安裝了 cuda-9.2 版本的 pytorch,

conda install pytorch torchvision cudatoolkit=9.2 -c pytorch

但是運行的時候還是出現同樣的錯誤,這更加說明 detectron2 的編譯使用的不是虛擬環境路徑下的編譯器,所以我在想是不是我沒有正確設置系統路徑下的 CUDA,於是我用官方提供的檢驗代碼查看 CUDA 路徑:

python -c 'import torch; from torch.utils.cpp_extension import CUDA_HOME; print(torch.cuda.is_available(), CUDA_HOME)'

輸出的結果是

true /usr/local

可以看到CUDA_HOME對應的輸出結果有問題,照理來說輸出結果應該是/usr/local/cuda或者/usr/local/cuda-9.2之類的,於是我又查看了~/.bashrc文件,找到與 CUDA 有關的代碼部分,發現我並沒有設置CUDA_HOME這個環境變量,於是我做了如下修改:

# vim ~/.bashrc
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/lib
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64

之后 souce 一下

source ~/.bashrc

再運行python -c 'import torch; from torch.utils.cpp_extension import CUDA_HOME; print(torch.cuda.is_available(), CUDA_HOME)'輸出的結果變為true /usr/local/cuda

此時Kernel not compiled with GPU support的問題就解決了,代碼正常運行了。

總結

步驟總結

  1. 安裝相關庫
conda create -n myenv python=3.7
conda activate myenv
conda install pytorch torchvision cudatoolkit=9.2 -c pytorch
pip install opencv-python
pip install 'git+https://github.com/facebookresearch/fvcore'
pip install cython; pip install 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'
  1. 編譯 detectron2
python setup.py build develop

可能出現的問題和解決辦法

出現標題中的錯誤的原因主要是因為你的 cuda 版本或者路徑除了問題,你可以按照如下幾個步驟排查可能是那個地方出了問題:

  1. 運行nvcc --version查看你的 cuda 編譯器版本,那么你的 pytorch-gpu 也建議安裝對應版本。當然如果你nvcc都沒安裝。。。那你就先找教程安裝。
  2. 如果安裝的 pytorch 版本和nvcc版本一致,你可以看一下你的 CUDA 路徑是否在~/.bashrc中設置正確,參考的配置路徑如下:
# vim ~/.bashrc
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/lib
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64

設置好后source ~/.bashrc,然后刪除detectron2/build文件夾(如果你之前已經編譯過一遍了),然后重新編譯dete2tron2

感謝xiedian一句話總結了上面的問題根本原因:

上述問題其實是因為 conda 安裝的 cudatools 只是一個子集,里面是沒有 nvcc 的,要用 nvcc 就必須用系統裝的

微信公眾號:AutoML機器學習
MARSGGBO原創
如有意合作或學術討論歡迎私戳聯系~
郵箱:marsggbo@foxmail.com

2019-11-23 10:52:25


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM