tensorflow 运行效率 GPU memory leak 问题解决
问题描述:
Tensorflow 训练时运行越来越慢,重启后又变好。
用的是Tensorflow-GPU 1.2版本,在GPU上跑,大概就是才开始训练的时候每个batch的时间很低,然后随着训练的推进,每个batch的耗时越来越长,但是当我重启后,又一切正常了?
问题查找:
一开始查到的原因是batch_size 和 batch_num的问题,通过python yield 数据生成器解决,确保内存每次处理的数据确定是batch_size大小,但是发现运行效率还是不高,所以查阅google的一些资料找到如下解决办法。
问题解决:
因为在运行时的session里定义了tf的op导致的。这样每一次迭代都会在graph里增加新的节点,导致memory leak,程序越来越慢,最后强行退出。至于在运行时程序有没有增加节点,可以在session里定义graph.finalize()锁定graph,如果跑的时候报错就证明程序在动态添加节点导致的越来越慢。
修改前代码如下:
def one_hot(labels):
labels_num = [strnum_convert(i) for i in labels ]
batch_size = tf.size(labels_num)
labels = tf.expand_dims(labels_num, 1)
indices = tf.expand_dims(tf.range(0, batch_size, 1), 1)
concated = tf.concat([indices, labels],1)
onehot_labels = tf.sparse_to_dense(concated, tf.stack([batch_size, 8]), 1, 0)
#all_hot_labels = tf.reshape(onehot_labels,(1,612))
return onehot_labels
修改后代码如下:
def one_hot(labels):
one_hot_label = np.array([int(i == int(labels)) for i in range(8)])
... ...
return one_hot_label
大家可以看到罪魁祸首就是就是这个tf版本的one_hot操作,修改成numpy版本完美解决运行效率问题。
思考:
方法二:
上面问题的原因是GPU memory leak,我们也可以用的是一种曲线救国的方法;每隔1000个batch,当速度明显变慢的时候,就reset graph,然后才重新build模型,再load之前储存的参数tf.reset_default_graph()self.build_model();
方法三:
我们在用tensorflow进行数据集制作的时候,发现当我运行eval()函数的时候,程序会越跑越跑慢,eval()生成的数值没有删除,然后会越占越多内存,解决办法是使用del命令就行,一般写成。
data=Var.eval()
#save data to file
del data
tensorflow 运行效率 GPU memory leak 问题解决的更多相关文章
- tomcat报错:This is very likely to create a memory leak问题解决
		tomcat memory leak解决方案 这种问题在开发中经常会碰到的,看看前辈的总结经验 Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一 ... 
- 大神的---解决tomcat内存溢出问题----tomcat报错:This is very likely to create a memory leak问题解决
		tomcat memory leak解决方案 这种问题在开发中经常会碰到的,看看前辈的总结经验 Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一 ... 
- Reducing and Profiling GPU Memory Usage in Keras with TensorFlow Backend
		keras 自适应分配显存 & 清理不用的变量释放 GPU 显存 Intro Are you running out of GPU memory when using keras or ten ... 
- 一则JVM memory leak解决的过程
		起因是我们的集群应用(3台机器)新版本测试过程中,一般的JVM内存占用 都在1G左右, 但在运行了一段时间后,慢慢升到了4G, 这是一个明显不正常的现象. 定位 过程: 1.先在该机器上按照步骤尝试重 ... 
- Setup Tensorflow with GPU on Mac OSX 10.11
		Setup Tensorflow with GPU on OSX 10.11 环境描述 电脑:MacBook Pro 15.6 CPU: 2.7GHz 显卡: GT 650m 系统:OSX 10.11 ... 
- The web application registered the JDBC driver * but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
		最近使用了最新版的tomcat9,使用jdbc链接mysql数据库.关闭tomcat过程中出现警告 13-Sep-2017 22:22:54.369 WARNING [main] org.apache ... 
- Tensorflow检验GPU是否安装成功 及 使用GPU训练注意事项
		1. 已经安装cuda但是tensorflow仍然使用cpu加速的问题 电脑上同时安装了GPU和CPU版本的TensorFlow,本来想用下面代码测试一下GPU程序,但无奈老是没有调用GPU. imp ... 
- Allowing GPU memory growth
		By default, TensorFlow maps nearly all of the GPU memory of all GPUs (subject to CUDA_VISIBLE_DEVICE ... 
- [开发技巧]·TensorFlow&Keras GPU使用技巧
		[开发技巧]·TensorFlow&Keras GPU使用技巧  1.问题描述 在使用TensorFlow&Keras通过GPU进行加速训练时,有时在训练一个任务的时候需要去测试结果 ... 
随机推荐
- websocket 函数
			函数名 描述 socket_accept() 接受一个Socket连接 socket_bind() 把socket绑定在一个IP地址和端口上 socket_clear_error() 清除socket ... 
- 【LEETCODE】55、数组分类,适中级别,题目:79、611、950
			第950题,这题我是真的没想到居然会说使用队列去做,大神的答案,拿过来瞻仰一下 package y2019.Algorithm.array; import java.util.HashMap; imp ... 
- fastjson框架如何处理boolean?CURRENT_TIMESTAMP使用报错?什么是 ONLINE DDL 及 pt-online-schema-change ? getBytes引起的乱码问题?
			一.使用fastjson框架进行序列化时,若莫个参数为Boolean类型,而json里的值是其它类型时,框架如何处理? 1.true, false,正常赋值2.int类型,若为1,则为true,否则为 ... 
- PKUSC2019题解
			$D1T1$:$n$个村庄,第$i$个村庄的人要去第$p_i$个村庄(保证$p_i$为排列),每次可以将相邻两个村庄的人位置交换直到所有人都到达目的地.再给定一个长为$n-1$的排列$a$,表示第$i ... 
- SQL Server 索引优化-----数据库引擎优化顾问
			本文将根据“数据库引擎优化顾问”(DTA)来发现无用或缺失的索引. 要使用“数据库引擎优化顾问”,首先需要对数据库负载进行监控,为数据库负载分析准备数据.从SSMS的工具中,打开SQL Server ... 
- 关于python、pip、anaconda安装的一些记录
			写这篇博客是因为自己这段时间总是倒腾python的环境,其间倒腾崩了好几次.....无奈之下还是梳理一下. PYTHON 首在安装python3.6的之后,我安装了anaconda3,这样我的电脑上p ... 
- Java身份证处理工具
			身份证处理工具 /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p> * & ... 
- IdentityServer4实现OAuth2.0四种模式之授权码模式
			接上一篇:IdentityServer4实现OAuth2.0四种模式之隐藏模式 授权码模式隐藏码模式最大不同是授权码模式不直接返回token,而是先返回一个授权码,然后再根据这个授权码去请求token ... 
- Libev库学习
			Libev库学习 https://www.cnblogs.com/wunaozai/p/3950249.html Libev库学习(1)https://www.cnblogs.com/wunaozai ... 
- 【转载】关于SimpleDateFormat安全的时间格式化线程安全问题
			想必大家对SimpleDateFormat并不陌生.SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调 ... 
