首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >RuntimeError:带有预训练模型的CUDA内存不足

RuntimeError:带有预训练模型的CUDA内存不足
EN

Stack Overflow用户
提问于 2021-05-14 13:18:36
回答 1查看 211关注 0票数 0

我正在使用一个预先训练好的模型来改善图像。

https://github.com/swz30/MIRNet.

我创建了一个demo.py (下面的代码)文件,以便为提供的预训练模板测试我的图像集。对于我的第一组图像,它们都具有非常高的分辨率,我总是得到相同的错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RuntimeError: CUDA out of memory. Tried to allocate 5.38 GiB (GPU 0; 3.95 GiB total capacity; 379.90 MiB already allocated; 2.89 GiB free; 16.10 MiB cached)

当我只测试一个分辨率较低的图像时,错误仍然存在,但以一种奇怪的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RuntimeError: CUDA out of memory. Tried to allocate 1014.00 MiB (GPU 0; 3.95 GiB total capacity; 2.61 GiB already allocated; 527.44 MiB free; 23.25 MiB cached)

我对另一个存储库中的demo.py文件进行了必要的更改,以便在我的图像集上测试MIRNet。在这个过程中,我不得不做一些与图形兼容性相关的配置,但一切都解决了。

你有什么建议来解决我的问题吗?我使用的是在linux环境中提供的预训练模型,该模型具有anaconda和显卡-> NVIDIA GEFORCE GTX 960m 4 4gb的所有正确规格。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision.transforms.functional as TF
from PIL import Image
import os
from runpy import run_path
from skimage import img_as_ubyte
from collections import OrderedDict
from natsort import natsorted
from glob import glob
import cv2
import argparse

parser = argparse.ArgumentParser(description='Demo MIRNet')
parser.add_argument('--input_dir', default='./samples/', type=str, help='Input images')
parser.add_argument('--result_dir', default='./samples/output/', type=str, help='Directory for results')
parser.add_argument('--task', required=True, type=str, help='Task to run',
                    choices=['fivek', 'Denoising', 'SR_x3'])

args = parser.parse_args()


def save_img(filepath, img):
    cv2.imwrite(filepath, cv2.cvtColor(img, cv2.COLOR_RGB2BGR))


def load_checkpoint(model, weights):
    checkpoint = torch.load(weights)
    try:
        model.load_state_dict(checkpoint["state_dict"])
    except:
        state_dict = checkpoint["state_dict"]
        new_state_dict = OrderedDict()
        for k, v in state_dict.items():
            name = k[7:]  # remove `module.`
            new_state_dict[name] = v
        model.load_state_dict(new_state_dict)


task = args.task
inp_dir = args.input_dir
out_dir = args.result_dir

os.makedirs(out_dir, exist_ok=True)

files = natsorted(glob(os.path.join(inp_dir, '*.jpg'))
                  + glob(os.path.join(inp_dir, '*.JPG'))
                  + glob(os.path.join(inp_dir, '*.png'))
                  + glob(os.path.join(inp_dir, '*.PNG')))

if len(files) == 0:
    raise Exception(f"No files found at {inp_dir}")

# Load corresponding model architecture and weights
load_file = run_path(os.path.join("networks", "MIRNet_model.py"))
model = load_file['MIRNet']()
model.cuda()

weights = os.path.join("pretrained_models/denoising", "model_" + task.lower() + ".pth")
load_checkpoint(model, weights)
model.eval()

img_multiple_of = 8

for file_ in files:
    img = Image.open(file_).convert('RGB')
    input_ = TF.to_tensor(img).unsqueeze(0).cuda()

    # Pad the input if not_multiple_of 8
    h, w = input_.shape[2], input_.shape[3]
    H, W = ((h + img_multiple_of) // img_multiple_of) * img_multiple_of, (
                (w + img_multiple_of) // img_multiple_of) * img_multiple_of
    padh = H - h if h % img_multiple_of != 0 else 0
    padw = W - w if w % img_multiple_of != 0 else 0
    input_ = F.pad(input_, (0, padw, 0, padh), 'reflect')

    with torch.no_grad():
        restored = model(input_)
    restored = restored[0]
    restored = torch.clamp(restored, 0, 1)

    # Unpad the output
    restored = restored[:, :, :h, :w]

    restored = restored.permute(0, 2, 3, 1).cpu().detach().numpy()
    restored = img_as_ubyte(restored[0])

    f = os.path.splitext(os.path.split(file_)[-1])[0]
    save_img((os.path.join(out_dir, f + '.png')), restored)

print(f"Files saved at {out_dir}")

  [1]: https://github.com/swz30/MIRNet.
EN

回答 1

Stack Overflow用户

发布于 2021-05-15 21:34:53

这听起来可能很愚蠢,但请尝试在终端中执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pkill -9 python

不过要小心,这个命令会杀死所有的python进程。也许其中一个进程在你尝试你的代码时卡住了,占用了GPU内存。如果此命令不能解决您的问题,请尝试在Google Colab上运行代码,看看问题是否仍然存在: Colab应该为您提供10-12 of内存的gpus。让我们保持最新状态

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67535027

复制
相关文章
PowerBI中的切片器可以带个度量值吗
2.如果我还有其他切片器,能否随着其他切片器变化呢?比如西北地区销售”桌子“的城市有15个,能否在产品类型选择”桌子“时,地区切片器中西北后的括号里显示15呢?
陈学谦
2020/07/07
2.5K0
如何在DAX Stadio和Excel中返回表和度量值?
通常我们在DAX Studio中书写的时候,要使用到evaluate申明,也就是在DAX Studio中进行书写公式,我们可以得到函数中间返回的表格,以便于我们查看。
逍遥之
2020/03/24
2.6K0
如何在DAX Stadio和Excel中返回表和度量值?
PowerBI DAX 度量值管理 - 驾驭度量值依赖关系,删除无效
很多小伙伴说跟着罗叔已经学习到了很多,一个报告写了几百个度量值了,现在想查找和删除没用的,怎么办呢。
BI佐罗
2020/07/24
1.4K0
PowerBI DAX 度量值管理 - 驾驭度量值依赖关系,删除无效
如何用 PowerBI DAX 度量值控制筛选
用一段 Power BI 以后,就会发现有个特点:用切片器可以筛选某个表列。但有时候,需要用度量值来控制筛选。
BI佐罗
2021/12/02
3.8K0
如何用 PowerBI DAX 度量值控制筛选
《DAX进阶指南》-第6章 动态可视化
开始本章翻译时,是5月初。当时并不知道平平无奇的5月Power BI会带来一大波更新,尤其是大杀器“字段参数”(字段参数参考文章)。
陈学谦
2022/10/30
5.7K0
《DAX进阶指南》-第6章 动态可视化
基于看板的价值度量
又到了每本周总结和预告的时候,在上周的课程中,我们聊到了看板及度量,那么用好看板的三个要素是什么呢?
TestOps
2022/04/07
4640
基于看板的价值度量
PowerBI DAX MVC 设计模式 导论 续 - 案例:竞争交叉分析(深度购物篮)
继 PowerBI DAX MVC 设计模式 导论 引发了很多会员伙伴的询问,希望罗叔给出一个相对完整和复杂的案例来体会 MVC 架构和设计模式的作用。
BI佐罗
2019/09/23
1.5K0
PowerBI DAX MVC 设计模式 导论 续 - 案例:竞争交叉分析(深度购物篮)
一个度量,是怎样炼成的? | DAX重要思路
前面,我在文章《DAX的核心,其实只有4个字!》里提到,DAX核心思想,就是“筛选、计算”四个字,当然,这个总结非常抽象,接下来,我会用一个又一个的例子来给大家具体讲,大家将慢慢体会到,几乎所有的度量都紧紧围绕这个思想而展开。
大海Power
2022/04/11
6780
一个度量,是怎样炼成的? | DAX重要思路
PowerBI DAX 度量值管理 - 基本编写到高级管理
我们会用几篇文章来描述这些问题如何在当前的 PowerBI 中实现。很多问题的解决并不是能用 PowerBI 内置功能解决,这也算是一个痛点,按照微软的表述,微软会比较接纳社区的第三方插件与 PowerBI 的结合,一方面可以不必重复劳动,一方面很多社区插件已经注入很多心血,值得复用。
BI佐罗
2020/06/24
2.3K0
PowerBI DAX 度量值管理 - 基本编写到高级管理
Extreme DAX-第5章 基于DAX的安全性
本章介绍的是如何在PowerBI模型中实现各类安全性保障。除了我们所熟知的行级别安全性RLS,本文更是介绍了对象级别安全性、表级别安全性、列级别安全性、值级别安全性等。有待大家根据自己的实际业务场景,实现更加符合要求的安全性要求。
陈学谦
2022/10/30
4.9K0
Extreme DAX-第5章 基于DAX的安全性
Power BI: 理解VALUES和FILTERS函数的区别
文章背景: 最近在学习DAX权威指南第10章,使用筛选上下文。其中提到,FILTERS是一个类似于VALUES的函数,但二者有一个重要的区别——VALUES返回筛选上下文中的可见值;FILTERS返回被当前上下文筛选的值。
Exploring
2023/08/17
8110
Power BI: 理解VALUES和FILTERS函数的区别
将Power Pivot模型数据取值到单元格中(第2节)
Excel Power Pivot俗称超级透视表,具有强大的建模能力。一般情况下,Power Pivot的模型在Excel界面以数据透视表或数据透视图展现。但是,这种展现方式比较单一,无法实现复杂结构报表提取模型数据的需求。
wujunmin
2021/09/07
1.3K0
将Power Pivot模型数据取值到单元格中(第2节)
Power BI 计算组理解(一)
有时为了节省页面空间,让当前报表提供更多的信息,经常会有这样的设计,即提供一些选项给报表使用人,当报表使用人选定某个项目时,当前报表才显示该项目的信息,如下:
公众号PowerBI大师
2021/05/11
2.4K0
Power BI 计算组理解(一)
大数据分析工具Power BI(八):动态TOPN统计
在一些数据分析场景中我们经常遇到获取topN统计的问题,例如统计销量topN的店铺对应的总销售额、统计订单量TopN的门店总销售额等等。针对这种TopN问题的分析,在Power BI中我们需要使用TOPN函数,TOPN函数可以返回指定表的前N行数据。之前我们学习过RANKX函数,RANKX可以根据指定的度量值表达式来对数据进行排名没有办法获取前几名数据,TOPN可以获取前几名数据,但是不会对数据进行排名。
Lansonli
2023/04/10
2.7K0
大数据分析工具Power BI(八):动态TOPN统计
Meta Learning 1: 基于度量的方法
普通的机器学习目前在学习具体任务的问题上可以达到很好的效果,比如车载场景的意图分类任务(导航,听音乐,查天气,打电话)。如果有足够的高质量的标注数据,可以训练出一个很强的分类模型。 在实际项目中,意图的类别经常会随着需求的变动发生改变,比如在车载场景中新增了【设置日程】的意图。为了保持意图分类的准确率,理想状态下,我们需要新意图类别【设置日程】的大量标注数据来重新训练模型;然而现实情况是,获取大量的标注数据成本很高,当需求频繁变更时,这甚至可以说是不可能完成的任务。
朴素人工智能
2021/01/27
2K0
Meta Learning 1: 基于度量的方法
【大招预热】—— DAX优化20招!!!
—— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —
btharp
2021/08/31
4.1K0
DAX学习分享:十条经验
很多人说国内的学习资料太少,在学习的过程中坎坷不断,我与大多数PowerBI学习者一样,一边读外文的博客摸索一边铺路,在不断尝试和与人分享的过程中,总结了个人认为最宝贵的十条DAX学习经验,分享给读者。
公众号PowerBI大师
2019/08/07
3.4K0
DAX学习分享:十条经验
DAX中的基础表函数
👆点击“博文视点Broadview”,获取更多书讯 本文将介绍DAX中的基础表函数。 表函数是DAX中的一种常规函数,它返回的结果不是一个标量值,而是一个表。当需要编写DAX查询和迭代表的高级计算时,表函数非常有用。本文会介绍相关的计算示例。 本文的目标是介绍表函数的概念,而并非提供所有DAX表函数的详细说明。 《DAX权威指南》一书的第12章和第13章中介绍了更多的表函数。本文将解释DAX中最常见和重要的表函数的作用,以及如何在常见的场景中,包括标量表达式中使用它们。 01 表函数介绍 到目前为止,你
博文视点Broadview
2023/05/06
2.7K0
DAX中的基础表函数
Power BI字段参数的分组与引用
Power BI 2022年5月更新的字段参数功能业务使用价值巨大,以至于本号连续更新相关内容,以下是前情提要:
wujunmin
2022/07/13
3.3K0
Power BI字段参数的分组与引用
一个模糊匹配的度量,是怎么写出来的? | DAX案例及思路
前些天,我做了个小调查,让我比较意外的是,调查结果中,大家最想学习的竟然是DAX:
大海Power
2022/05/25
1.2K1
一个模糊匹配的度量,是怎么写出来的? | DAX案例及思路

相似问题

如何基于当前行和切片器上下文编写DAX度量?

11

根据切片器值选择DAX度量

111

Dax度量值-无法使用日期切片

115

允许切片器在使用DAX计算度量时

13

如何编写DAX以使用切片器日期过滤度量

114
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文