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

2023-05-16

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中选择该虚拟环境,开始跑程序吧!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EDSR图像超分辨程序复现(踩坑及解决记录) 的相关文章

  • ModuleNotFoundError No module named ‘PIL‘问题解决

    原文链接 Python使用时出现报错 xff1a ModuleNotFoundError No module named PIL 该提示表示缺少pillow模块 xff0c 可以用以下命令安装 xff1a pip span class to
  • SpringBoot实现多线程

    原文链接 代码地址 xff1a https github com Snowstorm0 learn async 1 线程同步和异步 线程同步 xff1a A线程要请求某个资源 xff0c 但是此资源正在被B线程使用中 xff0c 因为同步机
  • pip安装报错:UnicodeDecodeError ‘utf-8‘ codec can‘t decode byte 0xc3 in position 4

    原文链接 使用pip命令安装模块时 xff0c 若出现报错 xff1a UnicodeDecodeError utf 8 codec can t decode byte 0xc3 in position 4 invalid continua
  • Prometheus的使用

    原文链接 Prometheus 是一个开放性的监控解决方案 xff0c 用户可以非常方便的安装和使用 Prometheus 并且能够非常方便的对其进行扩展 在Prometheus的架构设计中 xff0c Prometheus Server
  • Java中restTemplate携带Header请求

    原文链接 RestTemplate是Spring提供的用于发送HTTP请求的客户端工具 现在我们要在Java中使restTemplate携带Header请求 创建请求 创建请求头 xff1a span class token class n
  • SpringBoot整合ElasticSearch

    原文链接 ElasticSearch是个开源分布式搜索引擎 xff0c 提供搜集 分析 存储数据三大功能 它的特点有 xff1a 分布式 xff0c 零配置 xff0c 自动发现 xff0c 索引自动分片 xff0c 索引副本机制 xff0
  • Python将二维数组输出为图片

    原文链接 使用Python读取二维数组 xff0c 将二维数组输出为图片 xff0c 并保存在本地 代码如下 xff1a span class token comment coding 61 utf8 span span class tok
  • 如何使用Tin快速搭建Gitlab-ce?(史上最简单方法)

    GitLab是Git代码版本管理平台 xff0c 相比于GitHub xff0c GitLab还免费支持私人仓库 GitLab ce是gitlab的开源版本 目前网上Gitlab ce的安装方法有很多 xff0c 但大同小异都需要安装各种依
  • 堆叠降噪自动编码器 Stacked Denoising Auto Encoder(SDAE)

    原文链接 自动编码器 xff08 Auto Encoder xff0c AE xff09 自动编码器 xff08 Auto Encoder xff0c AE xff09 自编码器 xff08 autoencoder xff09 是神经网络的
  • PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法

    原文链接 1 通道数问题 xff1a 描述一个像素点 xff0c 如果是灰度 xff0c 那么只需要一个数值来描述它 xff0c 就是单通道 如果有RGB三种颜色来描述它 xff0c 就是三通道 最初输入的图片样本的 channels xf
  • Python中LSTM回归神经网络的时间序列预测

    原文链接 这个问题是国际航空乘客预测问题 xff0c 数据是1949年1月到1960年12月国际航空公司每个月的乘客数量 xff08 单位 xff1a 千人 xff09 xff0c 共有12年144个月的数据 网盘链接 提取码 xff1a
  • pip安装时 fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory

    原文链接 使用pip安装模块 xff0c 出现错误 xff1a c users anaconda3 include pyconfig h 68 fatal error C1083 无法打开包括文件 io h No such file or
  • linux 程序被Killed,查看原因

    原文链接 1 查看信息 xff1a 输入以下程序 xff1a dmesg egrep i B100 39 killed process 39 可以输出最近killed的信息 2 设定kill优先度 xff1a xff08 1 xff09 完
  • Kafka的幂等性与事务性理解

    最近在深入理解Flink的Exactly Once xff0c 发现Flink Checkpoint只能保障Flink程序内部的一致性 xff0c 无法保证Sink到外部系统的Exactly Once语义 但是Sink到外部如果实现了Two
  • 为什么不直接操作State,而是要额外定义一个变量

    最近浏览Flink文章的时候发现一个现象 xff0c 就是在操作State的时候 xff0c 很多文章里面并不会直接操作State xff0c 而是会定义一个相似的变量去操作 xff0c 在 snapshot 和 recover 的时候讲变
  • 了解下SparkSQL中的笛卡尔积

    虽然应该尽量避免使用笛卡尔积 xff0c 因为要全量匹配 xff0c 所以运算的效率十分低下 xff0c 但是有些业务有必须得用 xff0c 所以在此了解下SparkSQL中的笛卡尔积 SparkSQL中计算笛卡尔积时有两种Join方式 x
  • 在Redis集群模式下使用pipeline进行批量操作

    最近开始又接触到了Redis xff0c 之前在工作中使用Redis的时候 xff0c 由于QPS不高 xff0c 都是直接get set搞定了 这次遇到的业务数据量比较大 xff0c 更新也很频繁 xff0c Redis使用是集群模式 x
  • RDD计算时是把数据全部加载至内存么

    RDD的本质 RDD的本质是一个函数 而RDD的变换不过是函数的嵌套 RDD有两类 输入的RDD 典型如KafkaRDD JdbcRDD转换的RDD 如MapPartitionsRDD RDD的处理流程 以如下代码为例 sc textFil
  • mysql中limit用法详解

    Mysql中limit的用法详解 在我们使用查询语句的时候 xff0c 经常要返回前几条或者中间某几行数据 xff0c 这个时候怎么办呢 xff1f 不用担心 xff0c mysql 已经为我们提供了这样一个功能 xff0c 尽管语法逻辑很
  • 练习代码遇到的零碎知识

    一 xff0c c 43 43 中使用malloc 时 xff0c 出现error malloc was not declared in this scope 1 书写错误 2 没有引用相应的库 解决方法 xff1a 引入stdlib h库

随机推荐