OOM when allocating tensor of shape [] and type float [[node conv2d_224/kernel/Initializer/random_uniform/min (defined at ./intances/utils.py:19) ]]

摘要:
更多解释是由于GPU内存不足。英伟达smi看不到它://www.tensorflow.org/guide/using _一开始,gpu没有看到官方网站的解释:释放视频内存的程序是否可以自动执行,因此放弃了通过程序释放视频内存。也许更好的方法是指定GPU的比例。这些指定的进程放在代码的开头,所以我的想法是将指定GPU视频内存的代码放在Flask的开头。

OOM when allocating tensor of shape [] and type float [[node conv2d_224/kernel/Initializer/random_uniform/min (defined at ./intances/utils.py:19) ]]第1张

当你们在用模型加载,tensorflow-gpu预测的时候,有没有出现这样的错误??

经过网上的资料查阅,更多的解释是GPU的显存不足造成的,于是乎,我查看了一下GPU显存:nvidia-smi

不看不知道,一看确实是那么回事:tensorflow-gpu执行默认将GPU显存占满,官网也做了解释说明:https://www.tensorflow.org/guide/using_gpu

OOM when allocating tensor of shape [] and type float [[node conv2d_224/kernel/Initializer/random_uniform/min (defined at ./intances/utils.py:19) ]]第2张

刚开始没有看到官网的解释,思路是当程序执行完成之后,能不能自动的执行释放显存的程序,网上这方面的代码不多,后来又看到上面官网的解释,显存不能释放,可能会有更严重的内存碎片,因此程序释放显存的想法就打消了。

在仔细看官网的解释,可能比较好的方法是指定GPU所占的比例,于是乎,我又多次的尝试:一般来说,这些指定的过程都放在代码的开始处,因为我用的框架是python的Flask框架,所以我的想法也是将这个指定GPU显存的代码放在Flask开始处,不执行不知道,一执行整个人都不好了,报了这个错:

could not retrieve CUDA device count: CUDA_ERROR_NOT_INITIALIZED: initialization error

What??这是什么错!在百度,Google,StackOverflow,Github等等网站查找相关问题解释,大多数解释是multiprocessing等等的解释,说实话我确实不是很明白,但我总觉得这个问题没有复杂到这个地步,因为几行代码应该是放在: 使用tensorflow之前! 

因为Flask接口用到这个tensorflow之前,我需要初始化一个类实例,在初始化类的时候也用到tensorflow,于是乎,我想把这几行代码放在初始化类实例的地方,心态崩了,还是不行!还是报:

could not retrieve CUDA device count: CUDA_ERROR_NOT_INITIALIZED: initialization error

相同的错误!这可怎么办,如果执行一次默认把显存占满,后面相同的操作就可能没办法执行了,所以必须分配GPU!

想了2天,今天上午,灵感来了,因为我是需要调用接口用到tensorflow,初始化类也是在这个接口里面,意思就是调用这个接口的时候,才会用到tensorflow,于是乎,我这个笨脑子也突然来了想法:直接在调用这个接口的时候,把这几行代码放进去,也就相当于初始化的时候执行了这几行代码,开始操作:

OOM when allocating tensor of shape [] and type float [[node conv2d_224/kernel/Initializer/random_uniform/min (defined at ./intances/utils.py:19) ]]第3张

如图,将这几行代码放在这个位置,在本地尝试了一下没有什么问题,于是乎,在服务器代码执行了相同的操作,开启服务,跑,跑,跑,没有报错!

查看nvidia-smi:GPU显存占用率果然只占了40%!!!解决了我心头大患!!

写这篇随笔没有什么其他想法,只是记录一下自己的坑!记录一下自己的知识盲点,如果有朋友遇到这样的问题,可以作为参考,不足的地方望指正批评!

免责声明:文章转载自《OOM when allocating tensor of shape [] and type float [[node conv2d_224/kernel/Initializer/random_uniform/min (defined at ./intances/utils.py:19) ]]》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Modbus库开发笔记之五:Modbus RTU Slave开发vs2022安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[原]SQLite的学习系列之获取数据库版本

  最先了解到SQLite是基于其作为移动客户端数据存储平台,以下是其官网(https://www.sqlite.org/)关于SQLite的一段介绍:      SQLite是遵守ACID的轻型数据库引擎,它包含在一个相对小的C库中。它是D.RichardHipp创建的公有领域项目。SQLite第一个Alpha版本诞生于2000年5月,至今已经有16个年...

vscode常用快捷键

  一、vs code 的常用快捷键列表 1、注释:   a) 单行注释:[ctrl+k,ctrl+c] 或 ctrl+/   b) 取消单行注释:[ctrl+k,ctrl+u] (按下ctrl不放,再按k + u)   c) 多行注释:[alt+shift+A]   d) 多行注释:/** 2、移动行:alt+up/down 3、显示/隐藏左侧目录栏 c...

angularJs学习笔记-入门

1.angularJs简介   angularJs是一个MV*的javascript框架(Model-View-Whatever,不管是MVVM还是MVC,统归MDV(model drive view)),其实是由google推出的SPA(single-page-application)应用框架。它的用于 数据在后端和前端之间的双向绑定。这就意味着你在后台...

23.2.2 使用bool类型进行判断

23.2.2 使用bool类型进行判断 使用非布尔型的数值可以直接参与逻辑判断和运算:   Code: int * ip = new int;    if(ip)    {        delete(ip);        ip = 0;    }   这样的代码很简洁漂亮,但是既然C++特意提出了bool类型,那么建议尽量使用bool类型...

使用SonarQube实现自动化代码扫描

  Sonar是一个用于代码质量管理的开源平台,通过插件机制,Sonar可与第三方工具进行集成。将Sonar引入到代码开发的过程中,提供静态源代码安全扫描能力,这无疑是安全左移的一次很好的尝试和探索。 1、安装Findbugs插件 Sonar有自己的默认的扫描规则,可通过安装Findbugs插件,来提升代码漏洞扫描能力。 (1)进入配置-->应用市场...

各种数据库的批量插入操作_Oracle

最近工作中需要优化以前各种的Excel批量导入功能,目前将能优化的方面做个记录。 选用技术:   目前.Net可以访问Oracle常用的Dll,有三种: 微软自带的 System.Data.OracleClient Oracle 公司提供的 Oracle.DataAccess System.Data.OleDb  通过比对以后,使用第二种,其原因如下:...