显存充足却提示out of memory

2023-10-28 14:28
文章标签 memory 提示 显存 充足

本文主要是介绍显存充足却提示out of memory,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 问题描述

用Pytorch进行模型训练时出现以下OOM提示:

RuntimeError: CUDA out of memory. Tried to allocate 98.00 MiB (GPU 0; 12.00 GiB total capacity; 3.19 GiB already allocated; 6.40 GiB free; 9.60 GiB allowed; 3.33 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

CUDA尝试分配98MB显存,但失败了。GPU的显存为12G,其中已分配显存3.19G(允许分配上限为9.6G),仍有6.4G的显存空闲。

简言之,显存有一半以上的空间都是闲置的,却连区区98MB都挤不出来,这显然不对劲!

2 解决方案

先说结论:通过降低num_workers解决。 具体方法见2.3节。

根据网络上相关问题的经验贴,本人进行了一系列的尝试,现将相关解决方法记录如下。

2.1 确认是否因找不到GPU资源引起

参考:找不到GPU资源——显存充足,但是却出现CUDA error:out of memory错误_gpu out of memory-CSDN博客

尝试手工指定GPU资源:

1、通过python代码配置

import os
os.environ['CUDA_VISIBLE_DEVICES']='0'

2、通过设置环境配置

  • Linux:export CUDA_VISIBLE_DEVICES=0
  • Windows:setx CUDA_VISIBLE_DEVICES=0

进行如上配置后问题依旧存在。

2.2 调整max_split_size_mb参数

参考:CUDA oom 通过设置PYTORCH_CUDA_ALLOC_CONF中的max_split_size_mb解决Pytorch的显存碎片化导致的CUDA:Out Of Memory - 知乎 (zhihu.com)

pytoch的显存管理中,分配显存请求必须是连续的,max_split_size_mb设置的是可分割最大的空闲block,小于该值的空闲block可能由于被分割而无法连续使用,大于该值的空闲block将不会被分割。比如max_split_size_mb 设置为4000时,所有小于4000MB空闲block都可能被分割开,当需要连续4g的空间时,就不存在可分配的4g的连续空闲block,而报OOM错误。

最优设置策略:将max_split_size_mb设置为小于OOM发生时的显存请求大小最小值的最大整数值

基于以上理论,本人尝试根据OOM提示将max_split_size_mb参数设置为98:

1、方法一

import os 
os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:98"

2、方法二

  • Linux:export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:98
  • windows:setx PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:98

配置后问题依旧存在,也就是说目前显卡内存已经有能力切分出98MB大小的存储空间,却无法提供。

想了半天没搞明白究竟是怎么回事,于是想着检查下配置看看,打开配置文件,目光立即被那行num_workers=6吸引,顿时恍然大悟,请见下一节。

2.3 调整锁页配置

关于锁页的介绍可以看这篇文章:Pytorch DataLoader pin_memory 理解 - 知乎 (zhihu.com)。

简言之,锁页是一种允许GPU直接访问CPU存储空间的机制,通过提前锁定一部分存储空间来解决分页存储频繁换入换出的问题,从而提升访问速度。

之前为了提升模型的训练速度,开启了锁页机制,并设置num_workers=8

合理猜测,显卡之所以无法提供模型需要的98MB空间,是因为空闲内存被锁定造成的。

通过缩小num_workers的数值,问题解决:

pin_memory = True
num_workers = 6

这篇关于显存充足却提示out of memory的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/293827

相关文章

Mybatis提示Tag name expected的问题及解决

《Mybatis提示Tagnameexpected的问题及解决》MyBatis是一个开源的Java持久层框架,用于将Java对象与数据库表进行映射,它提供了一种简单、灵活的方式来访问数据库,同时也... 目录概念说明MyBATis特点发现问题解决问题第一种方式第二种方式问题总结概念说明MyBatis(原名

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

提示:Decompiled.class file,bytecode version如何解决

《提示:Decompiled.classfile,bytecodeversion如何解决》在处理Decompiled.classfile和bytecodeversion问题时,通过修改Maven配... 目录问题原因总结问题1、提示:Decompiled .class file,China编程 bytecode

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

HTML提示属性的使用

1、placeholder。属性规定描述文本区域预期值的简短提示,该提示会在文本区域为空时显示,当字段获得焦点时消失。 代码如下图所示: 显示效果如下图所示: 2、title。该属性规定关于元素的额外提示信息,这些信息通常会在鼠标移到元素上时显示一段工具提示文本(tooltip text)。 代码如下图所示: 显示效果如下图所示:

Typora配置PicGo时,提示Failed to fetch

Typora配置PicGo时,提示Failed to fetch 两者配置的端口不一致造成的 打开Typora,选择文件-偏好设置-图像-验证图片上传选项,点击验证图片上传选项 会提示错误:Failed to fetch,此时可以发现typora中设置的上传端口为36677 打开PigGo,选择PicGo设置-设置server,会发现监听端口为36678 修改监听接口为366

企业网银登录提示请确认您已插入工商银行U盾证书的解决方法

昨天受人之托帮小企业财务解决上网银的问题 因为不是专业做这个的,所以只能安装“常识”行事,但结果实在是令人意想不到。 排错的步骤: 同一台电脑上尝试不同浏览器,发现360浏览器的接受度相当普遍;给U盾换不同的连接线;在不同的电脑上安装银行的插件,再重复上面的步骤1和步骤2;最终的结果,在一台电脑上可以走到下一步,但时好时坏,无法解决问题;到知乎上找答案,在一篇说明里有提到定制的qq浏览器,最后

Windows11上使用WSL2,提示:系统尚未使用systemd作为初始化系统(PID 1)启动

前言 略 报错信息 System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down 解决方法 使用如下命令 # windows终端,执行如下命令wsl --update# 登录ubuntu系统,执行如下命令s

一次性解决 | 网站被提示“不安全 ”

当网站被提示“不安全”时,这通常意味着用户的个人信息、登录凭证和其他数据可能面临风险。为了一次性解决这个问题,可以从一下方面入手。 一、检查并启用HTTPS协议 检查URL:确保网站地址以“https”开头,而非“http”。HTTPS协议通过SSL/TLS对数据进行加密,从而保护数据在传输过程中的安全。 部署SSL证书:如果网站尚未部署SSL证书,需要获取一个由权威证书颁发机构(CA)签