EDSR图像超分辨程序复现(踩坑及解决记录)

1.概述

最近在跑超分辨算法EDSR,中间经理了一些Bug和情况,浅浅记录一下,希望能给遇到相似问题的朋友们一些参考。在开头先说一下跑程序成功的配置:

  • 系统:Ubuntu20.04
  • 显卡情况:GeForce RTX 3090(驱动515.65.01),[CUDA11.0.2,cudnn8.0.5]后来发现没有这两项也可,非必要选项
  • EDSR程序版本:1.2.0版本
  • 虚拟环境:Pytorch1.7.0(对应CUDA11.0),cudatoolkit11.0.221 ,无cudnn
    【注:按照文中的Pytorch1.2.0/1.1.0(CUDA10.0)是不可以运行的】

2.EDSR程序在不同系统下的运行

2.1.Windows系统下运行系统

由于作者官方说了在Windows下不保证可以跑通,所以在这里知识浅浅测试一下,记录如下:

2.1.1.配置pytorch1.7.1(CUDA11.0)

根据Ubuntu运行成功的经验,也安装该版本的pytorch,运行出现以下结果:
报错ImportError: cannot import name ‘_DataLoaderIter’,猜测是版本Pytorch更新之后部分函数更新导致

2.1.2.配置pytorch1.2.0(CUDA10.0)

由于pytorch1.1.0最高支持到CUDA10.0,所以只能安装该版本,运行后出现以下结果:
运行了好长时间后,若不带–save_results,可以运行成功,带–save_results,则运行不成功,报错EOFError: Ran out of input。

综上所述,windows下跑该程序会出现一些比较诡异的错误,后期有时间再去一探究竟(待更新)!

2.2.Ubuntu系统下报错

2.2.1.配置pytorch1.2.0(CUDA10.0)

Making model…(经过漫长的等待,电脑排出滚滚热浪后……)
RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED

2.2.2.配置pytorch1.7.0(CUDA10.2)

warnings.warn(incompatible_device_warn.format(device_name, capability, " ".join(arch_list), device_name))
提示CUDA版本不匹配

2.2.3.配置pytorch1.7.0(CUDA11.0)

程序运行成功

2.2.4.配置pytorch1.8.0(CUDA11.1)

程序运行成功
可以初步下定结论,CUDA11.0及以上对应的pytorch版本才可以保证程序可以运行

2.2.5 新的尝试

上述操作都是在电脑没有安装CUDA的情况下运行的结果,后来我想“是不是因为系统没有安装低版本的CUDA,所以低版本CUDA对应的pytorch不能工作呢?”,于是我就进行了以下尝试:
Ubuntu20.04的编译环境为:gcc9.4.0,g++9.4.0。将gcc和g++的版本降至7.5.0,然后安装CUDA10.0(不带cudnn)

  • 环境配置为pytorch1.2.0(CUDA10.0),报错RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED
  • 环境配置为pytorch1.7.0(CUDA10.1), warnings.warn(incompatible_device_warn.format( device_name, capability, " ".join(arch_list), device_name))提示CUDA版本不匹配
  • 环境配置为pytorch1.7.0(CUDA11.0),运行成功

最终给出困扰我一开始跑程序的问题,RuntimeError: cuDNN error: CUDNN_STATUS_ EXECUTION_FAILED的问题确实是网上说的版本不匹配的问题,但是哪里不匹配网上几乎很少人说清楚,通过我的实验证明,原因可以归结为硬件系统算力支持的CUDA版本和pytorch对应的CUDA版本不对应。

综上所述,Ubuntu系统下跑程序不需要安装CUDA和cudnn,但是在配置环境时根据显卡的算力选择CUDA对应的pytorch版本(举例,3090显卡算力为8.0,只有CUDA11.0+支持该算力,在选择Pytorch版本的时候,需要选择选择CUDA11.0+对应的Pytorch,随后再和程序要求的版本尽量匹配!)

3.深度学习配置环境的心得

配置环境的一般步骤我在这里总结如下,朋友们有不同看法欢迎指出。

  1. 安装Pycharm编译器、Anaconda虚拟环境管理软件
  2. 根据显卡型号,更新至较新版本的驱动,同时查看显卡的算力并对应其支持的CUDA版本
在这里简单介绍一下Pytorch(CUDA)版本选择的问题
A.定义nvidia-smi显示的CUDA版本为CUDA Driver Version,定义Pytorch(CUDA)版本为CUDA Runtime Version
B.Pytorch(CUDA)版本的确定:CUDA Runtime Version≤CUDA Driver Version,且要与显卡硬件的算力匹配
  1. 根据待跑程序的需求,安装依赖库,一些小的依赖库无脑conda install/pip install即可,但是Pytorch的版本要根据步骤2中确定的显卡支持的CUDA版本以及程序中要求的版本合理确定,同时注意GPU/CPU版本
  2. 在pycharm中选择该虚拟环境,开始跑程序吧!

你可能感兴趣的:(EDSR图像超分辨程序复现(踩坑及解决记录))