【转载】 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 ...
随机推荐
- php workerman定时任务
一.下载workerman https://www.workerman.net/download 二.下载workerman/mysql http://doc3.workerman.net/64020 ...
- mysql 触发器、流程控制、事务等
视图 触发器 事务 存储过程 内置函数 流程控制 索引 视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁使用一张虚拟表,可以 ...
- windows + SQL Server环境,创建ArcSDE服务
ArcGIS for Server启用FeatureService需要ArcSDE和Geodatabase. 使用ArcSDE需要创建windows服务,ArcSDE只有命令行,所以只好阅读文档,找合 ...
- 软件测试之Monkey 初步了解(入门级II)
1. 先熟悉monkey基本命令: cls 清除 首先测试设备是否连接成功,在命令行中输入:adb devices 查看adb版本: adb version 查看虚拟机版本:nox_adb ver ...
- Linux 系统结构,nglinx
Linux 系统结构 Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统. N ...
- spark调优——数据倾斜
Spark中的数据倾斜问题主要指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导致的不同task所处理的数据量不同的问题. 例如,reduce点一共要处理100万条数据,第 ...
- Spark常规性能调优
1.1.1 常规性能调优一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行 ...
- MapReduce如何调优
Map阶段优化 1.在代码书写时优化,如尽量避免在map端创建变量等,因为map端是循环调用的,创建变量会增加内存的消耗,尽量将创建变量放到setup方法中 2.配置调优,可以在集群配置和任务运行时进 ...
- reactNative 获取组件高、宽、位置等信息
import {findNodeHandle, UIManager} from 'react-native' layout(ref) { const handle = findNodeHandle(r ...
- MIME Type介绍 Content-Type 各种定义
多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符.二进制格式附件等多种格 ...