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


免責聲明!

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



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