Tensorflow与Keras自适应使用显存方式


Posted in Python onJune 22, 2020

Tensorflow支持基于cuda内核与cudnn的GPU加速,Keras出现较晚,为Tensorflow的高层框架,由于Keras使用的方便性与很好的延展性,之后更是作为Tensorflow的官方指定第三方支持开源框架。

但两者在使用GPU时都有一个特点,就是默认为全占满模式。在训练的情况下,特别是分步训练时会导致显存溢出,导致程序崩溃。

可以使用自适应配置来调整显存的使用情况。

一、Tensorflow

1、指定显卡

代码中加入

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

或者在运行代码前,在终端

export CUDA_VISIBLE_DEVICES=0

2、为显存分配使用比例

在建立tf.Session加入设置数据(显存使用比例为1/3),但有时你虽然设置了使用上限,在程序需要更高显存时还是会越过该限制

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

3、自适应分配

会自适应分配显存,不会将显存全部分配导致资源浪费

config = tf.ConfigProto() 
config.gpu_options.allow_growth=True 
sess = tf.Session(config=config)

二、Keras

与tensorflow大差不差,就是将tf.Session配置转置Keras配置

1、指定显卡

代码中加入

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

或者在运行代码前,在终端

export CUDA_VISIBLE_DEVICES=0

2、为显存分配使用比例

import tensorflow as tf
import keras.backend.tensorflow_backend as KTF

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.333
session = tf.Session(config=config)
KTF.set_session(session)

3、自适应分配

import keras.backend.tensorflow_backend as KTF

config = tf.ConfigProto() 
config.gpu_options.allow_growth=True 
session = tf.Session(config=config)
KTF.set_session(session)

4、如有设置fit_generator

将多线程关闭

#可将
use_multiprocessing=True
#改为
use_multiprocessing=False

补充知识:Keras 自动分配显存,不占用所有显存

自动分配显存,不占用所有显存

import keras.backend.tensorflow_backend as KTF
import tensorflow as tf
import os
 
os.environ["CUDA_VISIBLE_DEVICES"] = "1"
config = tf.ConfigProto()
config.gpu_options.allow_growth=True #不全部占满显存, 按需分配
sess = tf.Session(config=config)
KTF.set_session(sess)

以上这篇Tensorflow与Keras自适应使用显存方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python GAE、Django导出Excel的方法
Nov 24 Python
利用Python实现网络测试的脚本分享
May 26 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
python实现列表的排序方法分享
Jul 01 Python
Python字符串格式化输出代码实例
Nov 22 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
什么是python的必选参数
Jun 21 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
pip install命令安装扩展库整理
Mar 02 Python
Python IO文件管理的具体使用
Mar 20 Python
python数据类型强制转换实例详解
Jun 22 #Python
keras 指定程序在某块卡上训练实例
Jun 22 #Python
python Socket网络编程实现C/S模式和P2P
Jun 22 #Python
Python手动或自动协程操作方法解析
Jun 22 #Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 #Python
Python socket服务常用操作代码实例
Jun 22 #Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 #Python
You might like
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
php跨站攻击实例分析
2014/10/28 PHP
php通过strpos查找字符串出现位置的方法
2015/03/17 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
简单的自定义php模板引擎
2016/08/26 PHP
javascript cookie解码函数(兼容ff)
2008/03/17 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
JavaScript生成图形验证码
2020/08/24 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
vuex 的简单使用
2018/03/22 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
python删除过期文件的方法
2015/05/29 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
护理专业自我鉴定
2014/01/30 职场文书
国家助学金获奖感言
2014/01/31 职场文书
信用卡工作证明模板
2014/09/14 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis