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解决鸡兔同笼问题的方法
Dec 20 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
python 调用HBase的简单实例
Dec 18 Python
Pycharm远程调试openstack的方法
Nov 21 Python
Django 路由控制的实现代码
Nov 08 Python
python多任务之协程的使用详解
Aug 26 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
Python中的特殊方法以及应用详解
Sep 20 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
Python实现socket库网络通信套接字
Jun 04 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 set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
PHP中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
PHP制作万年历
2015/01/07 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
JS实现拼图游戏
2021/01/29 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
中职应届生会计求职信
2013/10/23 职场文书
生产车间主任的个人自我鉴定
2013/10/25 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS