
Detectron2 運行時出現 invalid device function 錯誤怎么排查【免費下載鏈接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.項目地址: https://gitcode.com/GitHub_Trending/de/detectron2在 Detectron2 中訓練或推理時如果程序在調用 GPU 算子時報出invalid device function或no kernel image is available for execution通常不是代碼寫錯而是 CUDA 編譯/運行環境不匹配。項目文檔 INSTALL.md 的 Common Installation Issues 一節把這類錯誤歸為兩種可能一是 Detectron2 用的一個 CUDA 版本編譯、卻用另一個 CUDA 版本運行二是 PyTorch/torchvision/Detectron2 沒有為你這塊 GPU 的 SM 架構compute capability即計算能力生成內核。兩種情況的排查都從同一條環境檢查命令開始。第一步運行環境檢查命令在項目已安裝的 Python 環境中執行python -m detectron2.utils.collect_env這條命令會打印 Python、Detectron2、CUDA 編譯器、PyTorch、GPU 等完整環境信息。后續所有判斷都基于它的輸出。該腳本的實現在 detectron2/utils/collect_env.py它會分別檢查版本一致性和編譯產物支持的 GPU 架構通過cuobjdump解析.so中的sm_目標并在 GPU 列表中直接標注每塊顯卡的名稱和arch計算能力。可能一編譯與運行使用了不同版本的 CUDA按文檔的說法先確認 detectron2 是不是在一個 CUDA 版本下編譯、又在另一個版本下運行。檢查方法是看python -m detectron2.utils.collect_env輸出中的以下三項Detectron2 CUDA CompilerCUDA_HOMEPyTorch built with - CUDA文檔要求這三處指向的應該是同一版本的 CUDA 庫。如果發現版本不一致解決辦法是二選一換裝一個與你本地 CUDA 安裝匹配的 PyTorch 版本或自行編譯 PyTorch或者換一個與 PyTorch 匹配的 CUDA 版本。修復后重新運行python -m detectron2.utils.collect_env確認上述三項版本一致再回到原來的訓練/推理命令驗證invalid device function是否消失。可能二編譯產物不包含你 GPU 的 SM 架構如果 CUDA 版本一致但仍報這個錯檢查 GPU 計算能力問題在collect_env輸出中找到architecture flags文檔原文的措辭當前 collect_env.py 源碼中該條目的標簽輸出為detectron2 arch flags這里列出的是編譯產物實際支持的 GPU 架構列表。查你 GPU 的 compute capabilityNVIDIA 有官方的 CUDA GPU 計算能力查詢表INSTALL.md 中給出了對應鏈接。判斷標準第 1 步的架構列表必須包含你 GPU 的架構否則運行時就會出現 no kernel image is available for execution / invalid device function。文檔還給出了兩條判斷線索如果你用的是預編譯的 PyTorch/torchvision/Detectron2它們已經包含了大多數主流 GPU 的架構支持如果連預編譯版本都不支持只能改為從源碼構建。如果你是從源碼構建 detectron2/torchvision構建時只會檢測當前機器上的 GPU 設備、只為該設備編譯。這意味著這份編譯產物換一塊不同架構的 GPU 就可能失效——把源碼構建的 detectron2 拷到別的機器上使用時要特別注意這一點。修復設置 TORCH_CUDA_ARCH_LIST 后重新編譯確認是架構缺失后按文檔操作刪除所有已安裝/已編譯的文件并在設置TORCH_CUDA_ARCH_LIST環境變量的情況下重新編譯。文檔給出的示例export TORCH_CUDA_ARCH_LIST6.0;7.0這個取值會讓 detectron2 同時為 P100 和 V100 編譯文檔示例。請根據你自己的 GPU 計算能力填入對應的值多個架構用分號分隔。對于本地源碼克隆安裝的 detectron2INSTALL.md 給出的清理舊構建的命令是rm -rf build/ **/*.so注意該命令會刪除構建產物目錄和編譯出的.so文件執行后必須重新安裝例如python -m pip install -e detectron2否則環境中的 detectron2 擴展不可用。文檔同時提醒重裝 PyTorch 之后通常也需要用同樣的方式清理并重建 detectron2。如果之前安裝過預編譯的 detectron2/torchvision 或 PyTorch需要先卸載對應包再重新安裝/編譯確保新編譯產物真正生效。修復后的驗證再次運行python -m detectron2.utils.collect_envDetectron2 CUDA Compiler、CUDA_HOME、PyTorch built with - CUDA指向同一版本的 CUDA 庫架構 flags 列表包含你 GPU 的 compute capabilityGPU 列表中的arch標注可以直接對照。回到最初報錯的訓練/推理流程跑一次確認invalid device function與no kernel image is available for execution不再出現。邊界說明本文只覆蓋invalid device function/no kernel image is available for execution這一類錯誤。nvcc not found、Undefined symbols (TH.., at::Tensor..)、Cannot open libcudart.so 等屬于 INSTALL.md 中其他條目的安裝問題排查路徑不同不要混用本節的結論。版本一致性問題的兩個修法換 PyTorch 或換 CUDA文檔沒有指定優先級按你環境里改哪個成本更低來選即可。【免費下載鏈接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.項目地址: https://gitcode.com/GitHub_Trending/de/detectron2創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考