1. 程式人生 > 其它 >pytorch runtime error: CUDNN_STATUS_MAPPING_ERROR

pytorch runtime error: CUDNN_STATUS_MAPPING_ERROR

pytorch runtime error: CUDNN_STATUS_MAPPING_ERROR

Python 基礎教程--pytorch 報錯

以建立Pytorch為例

======================================================================

(For more information, please go to Alan D. Chen , upgrading~~)

Anaconda與conda區別
conda可以理解為一個工具,也是一個可執行命令,其核心功能是包管理與環境管理。包管理與pip的使用類似,環境管理則允許使用者方便地安裝不同版本的python並可以快速切換。 conda的設計理念——conda將幾乎所有的工具、第三方包都當做package對待,甚至包括python和conda自身 Anaconda則是一個打包的集合,裡面預裝好了conda、某個版本的python、眾多packages、科學計算工具等等。

======================================================================

這個問題的出現的原因有很多:

RuntimeError: CUDNN_STATUS_MAPPING_ERROR
這是一份非常重要的參考資料!

1.深度學習的batchsize選取過大。

錯誤的提示資訊如下:

https://img-blog.csdnimg.cn/20200531104843333.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xiajIzaGFvMQ==,size_16,color_FFFFFF,t_70

先說解決方法:
1.將batchsize繼續調小,直到不出現問題
2.新增如下程式碼:

torch.backends.cudnn.enabled = False

原因分析:
可能是cudnn的一個bug,由Conv3d layer引起的。

參考文獻:

https://github.com/pytorch/pytorch/issues/27588

TIPS:

pytorch torch.backends.cudnn設定作用

cuDNN使用非確定性演算法,並且可以使用torch.backends.cudnn.enabled = False來進行禁用

如果設定為torch.backends.cudnn.enabled =True,說明設定為使用使用非確定性演算法

然後再設定:

torch.backends.cudnn.benchmark = true

那麼cuDNN使用的非確定性演算法就會自動尋找最適合當前配置的高效演算法,來達到優化執行效率的問題

一般來講,應該遵循以下準則:

  1. 如果網路的輸入資料維度或型別上變化不大,設定 torch.backends.cudnn.benchmark = true 可以增加執行效率;
  2. 如果網路的輸入資料在每次 iteration 都變化的話,會導致 cnDNN 每次都會去尋找一遍最優配置,這樣反而會降低執行效率。

所以我們經常看見在程式碼開始出兩者同時設定:

torch.backends.cudnn.enabled = True
torch.backends.cudnn.benchmark = True

這句話的意思是不用 cudnn 加速了。

GPU,CUDA,cudnn 的關係是:

  • CUDA 是 NVIDIA 推出的用於自家 GPU 的平行計算框架,只能在 NVIDIA 的GPU 上執行,而且只有當要解決的計算問題是可以大量平行計算的時候才能發揮 CUDA 的作用。
  • cuDNN 是 NVIDIA 打造的針對深度神經網路的加速庫,是一個用於深層神經網路的 GPU 加速庫。如果你要用 GPU 訓練模型,cuDNN 不是必須的,但是一般會採用這個加速庫。

參考:GPU,CUDA,cuDNN的理解

cudnn 預設會使用,既然目前解決不了匹配問題,就先不用了。這樣 gpu 照樣能工作,但可能沒有用上 cudnn 那麼快。

2.並沒有將構建的model放置在cuda(),GPU 上來跑。

將訓好的模型的引數賦值給另外一個網路,
在測試賦值是否正確的時候,在

output = model(input)
1
一直報錯:

runtime error: CUDNN_STATUS_MAPPING_ERROR
1
多方除錯無果。
參考failed to enqueue CUDNN_STATUS_MAPPING_ERROR

In Cudnn documentation about this particular error:
CUDNN_STATUS_MAPPING_ERROR
An access to GPU memory space failed, which is usually caused by a failure to bind a texture.
To correct: prior to the function call, unbind any previously bound textures.
Otherwise, this may indicate an internal error/bug in the library.

參考RuntimeError: CUDNN_STATUS_MAPPING_ERROR,
才發現是model沒有放在 gpu上,而Input在 gpu上。增加

model = model.cuda()

.cuda() 一定放在model確定的最後一步,後面直接就是,model 的應用。

3.pytorch 、torchvision、 CUDA(和cudatoolkits)版本不匹配

首先,要知道自己的伺服器安裝的CUDA的版本:

兩條命令二選一:

1.cat /usr/local/cuda/version.txt

2.或者 nvcc -V(V大寫)

CUDA版本的選擇適合GPU硬體有關係的,這個沒什麼好說的。

其次根據CUDA的版本選擇pytorch 、torchvision(cudatoolkits)的版本。

你可以選擇一勞永逸的辦法:https://pytorch.org/

INSTALL PYTORCH 模組中選擇對應的版本,然後執行 Run this Command語句。當實際情況是,我們因為程式適配的問題,不得不使用不同版本的pytorch 、torchvision、 CUDA,當然在推薦版本的附近可以浮動選擇版本,但是版本差別過大,就會報錯。

Pytorch版本、CUDA版本與顯示卡驅動版本的對應關係

參考連結:INSTALLING PREVIOUS VERSIONS OF PYTORCH
解決PyTorch與CUDA版本不匹配

1.CUDA驅動和CUDAToolkit對應版本


注:驅動是向下相容的,其決定了可安裝的CUDA和CUDAToolkit的最高版本。

2.CUDA及其可用PyTorch對應版本(參考官網,歡迎評論區補充)

注:雖然有的卡CUDA版本可更新至新版本,且PyTorch也可對應更新至新版本。但有的對應安裝包無法使用,有可能是由於卡太舊的原因。

3.安裝指導

(1)指定安裝PyTorch版本
當已知CUDA版本時,可根據表2直接查詢到對應版本PyTorch,執行conda install pytorch=X.X.X -c pytorch即可安裝指定版本PyTorch。此命令由conda決定與PyTorch對應的CUDAToolkit。但不能保證PyTorch可正常使用,CUDAToolkit版本不適配顯示卡驅動,即可能導致CUDAToolkit版本高於CUDA驅動。
(2)指定CUDAToolkit版本
首先執行nvidia-smi查詢CUDA驅動版本,再根據1查詢到對應CUDAToolkit版本,再執行conda install pytorch cudatoolkit=X.X -c pytorch即可安裝指定CUDAToolkit版本的PyTorch。
(3)同時指定PyTorch和CUDAToolkit版本
如果你十分確定CUDA版本以及對應PyTorch和CUDAToolkit對應版本可執行conda install pytorch=X.X.X cudatoolkit=X.X -c pytorch

安裝完成後可使用python檢視

import torch
print(torch.__version__)
print(torch.cuda.is_available())

————————————————

原文連結:https://blog.csdn.net/kellyroslyn/article/details/109668001

Tongji University Lab songfaxing->efficientdet-AlanNets:

pip install torch===1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio===0.7.1 -f https://download.pytorch.org/whl/torch_stable.html