【转载】 TensorFlow学习——tf.GPUOptions和tf.ConfigProto用法解析
原文地址:
https://blog.csdn.net/c20081052/article/details/82345454
---------------------------------------------------------------------------------------------------
在服务器上用多GPU做训练时,由于想只用其中的一个GPU设备做训练,可使用深度学习代码运行时往往出现多个GPU显存被占满清理。出现该现象主要是tensorflow训练时默认占用所有GPU的显存。
查看你的源文件中是否有类似如下的代码片段:
with tf.Graph().as_default():
gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=args.gpu_memory_fraction)
sess=tf.Session(config=tf.ConfigProto(gpu_options=gpu_options,log_device_placement=False))
with sess.as_default():
上述代码片段主要是在创建session的时候,对session进行参数配置用的,
tf.ConfigProto() 的参数如下:
log_device_placement=True : 是否打印设备分配日志
allow_soft_placement=True : 如果你指定的设备不存在,允许TF自动分配设备
tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)
在构造tf.Session()时可通过tf.GPUOptions作为可选配置参数的一部分来显示地指定需要分配的显存比例。
per_process_gpu_memory_fraction 指定了每个GPU进程中使用显存的上限,但它只能均匀地作用于所有GPU,无法对不同GPU设置不同的上限。
示例代码如下:
#allow growth
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)
# 使用allow_growth option,刚一开始分配少量的GPU容量,然后按需慢慢的增加,由于不会释放
#内存,所以会导致碎片
# per_process_gpu_memory_fraction
gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.7)
config=tf.ConfigProto(gpu_options=gpu_options)
session = tf.Session(config=config, ...)
#设置每个GPU应该拿出多少容量给进程使用,0.4代表 40%
指定GPU设备号和个数
方法一:如果你在终端指定GPU个数和ID号,如果电脑有多个GPU,tensorflow默认全部使用。如果想只使用部分GPU,可以设置CUDA_VISIBLE_DEVICES。在调用python程序时,可以使用:
CUDA_VISIBLE_DEVICES=1 python your_script.py #在运行脚本前指定GPU的设备号 #常规设置有:
CUDA_VISIBLE_DEVICES=1 Only device 1 will be seen
CUDA_VISIBLE_DEVICES=0,1 Devices 0 and 1 will be visible
CUDA_VISIBLE_DEVICES="0,1" Same as above, quotation marks are optional
CUDA_VISIBLE_DEVICES=0,2,3 Devices 0, 2, 3 will be visible; device 1 is masked
CUDA_VISIBLE_DEVICES="" No GPU will be visible #你也可以使用
export CUDA_VISIBLE_DEVICES=2 #指定设备号
方法二:如果你在python原文件中作更改,在在文件开始处添加如下内容:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "" #指明了GPU ID号 #若多个GPU的话
os.environ["CUDA_VISIBLE_DEVICES"] = "1,2" #指明了两个GPU ID号,注意这里不区分双引号和单引号
实用技巧:
如果你在linux终端运行深度学习python脚本文件,运行中发现占用多个GPU和内存资源,则请先查看占用资源的进程归属方是谁:
$ps -f PID号
然后确认该进程可以kill掉情况下建议:
$kill -9 PID号
ctrl+Z指令只能强制结束当前流程,无法退出进程,所以发现有问题后用ctrl+Z后还需要kill进程。
---------------------------------------------------------------------------------------------------
————————————————
版权声明:本文为CSDN博主「ciky奇」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/c20081052/article/details/82345454
-------------------------------------------------------
【转载】 TensorFlow学习——tf.GPUOptions和tf.ConfigProto用法解析的更多相关文章
- Tensorflow学习笔记(2):tf.nn.dropout 与 tf.layers.dropout
A quick glance through tensorflow/python/layers/core.py and tensorflow/python/ops/nn_ops.pyreveals t ...
- TensorFlow学习笔记 速记1——tf.nn.dropout
tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None,name=None) 上面方法中常用的是前两个参数: 第一个参数 x:指输入: 第二个 ...
- TensorFlow 学习(十三)—— tf.app.flags
flags = tf.app.flags FLAGS = flags.FLAGS flags.DEFINE_integer('num_hidden_layers', 3, 'number of hid ...
- 【转载】 tf.ConfigProto和tf.GPUOptions用法总结
原文地址: https://blog.csdn.net/C_chuxin/article/details/84990176 -------------------------------------- ...
- [转载]tensorflow中使用tf.ConfigProto()配置Session运行参数&&GPU设备指定
tf.ConfigProto()函数用在创建session的时候,用来对session进行参数配置: config = tf.ConfigProto(allow_soft_placement=True ...
- TensorFlow 学习(七) — 常用函数 api、tf.nn 库
0. 四则运算 平方:tf.square(),开方:tf.sqrt() tf.add().tf.sub().tf.mul().tf.div().tf.mod().tf.abs().tf.neg() 1 ...
- tensorflow学习之tf.assign
tf.assign(ref, value, validate_shape=None, use_locking=None, name=None), 函数功能是将value赋值给ref ref必须是tf. ...
- tensorflow学习之tf.truncated_normal和tf.random_noraml的区别
tf版本1.13.1,CPU 最近在tf里新学了一个函数,一查发现和tf.random_normal差不多,于是记录一下.. 1.首先是tf.truncated_normal函数 tf.truncat ...
- tensorflow学习之tf.placeholder
placeholder函数相当于一个占位符,tf.placeholder(dtype, shape=None, name=None) dtype:数据类型.常用的是tf.float32,tf.floa ...
随机推荐
- python统计两个字符串从首字符开始最大连续相同的字符数
在python中统计两个字符串从首字符开始最大连续相同的字符数,函数如下: def get_num(s1, s2): num = 0 len_s1 = len(s1) list_s1 = [] for ...
- linux设备驱动程序--sysfs用户接口的使用
linux sysfs文件系统 本文部分内容参考自官方文档 自2.6版本开始,linux内核开始使用sysfs文件系统,它的作用是将设备和驱动程序的信息导出到用户空间,方便了用户读取设备信息,同时支持 ...
- LoarRunner脚本录制-Port Mapping
使用LR录制脚本时经常会因为内外网访问限制,或浏览器兼容等问题,导致无法正常录制脚本. 这里简单介绍一下使用LR端口映射的方式进行脚本录制,与之前介绍的<Jmeter脚本录制--HTTP代理服务 ...
- PAT 乙级 1012.数字分类 C++/Java
题目来源 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 整除的数字中所有偶数的和: A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和, ...
- w5500驱动使用方法调试笔记
1.w5500有两种方式可以运行的,server端一般用中断的方式,效率比较高,client使用查询的模式,本身自带2k的发送缓存和2k的接收缓存.2.查询模式:有数据的时候,查询模式可以每隔一段时间 ...
- DSL的概念
DSL:以极其高效的方式描述特定领域的对象.规则和运行方式的语言. 需要有特定的解释器与其配合. 高效简洁的领域语言,与通用语言相比能极大降级理解和使用难度,同时极大提高开发效率的语言. 能够描述特定 ...
- SpringBoot 之Spring Boot Starter依赖包及作用(自己还没有看)
spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. spring-boot-starter-amqp 通过spring-rabbit来支持 ...
- Ferguson游戏&&Ua12293——打表找规律
题意 有两个盒子分别有m颗糖果和n颗糖果,每次移动是将一个盒子清空而把另一个盒子里得一些糖果拿到被清空的盒子,使得两个盒子至少各有一个.无法移动者输. 分析 设初始状态为(m, n),显然(1, 1) ...
- 第5章 Spring的事务管理
5.1 Spring事务管理概述 5.11 事务管理的核心接口 在Spring的所有jar包中,有一个名spring-tx-4.3.6RELEAS的jar包,是提供事务管理的依赖包.在该包的org.s ...
- Boggle Game
Description Given a board which is a 2D matrix includes a-z and dictionary dict, find the largest co ...