TensorFlow学习——tf.GPUOptions和tf.ConfigProto用法解析
在服务器上用多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"] = "2" #指明了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进程。
TensorFlow学习——tf.GPUOptions和tf.ConfigProto用法解析相关推荐
- TensorFlow学习笔记02:使用tf.data读取和保存数据文件
TensorFlow学习笔记02:使用tf.data读取和保存数据文件 使用`tf.data`读取和写入数据文件 读取和写入csv文件 写入csv文件 读取csv文件 读取和保存TFRecord文件 ...
- TensorFlow 学习(二)—— tf.Graph、tf.Session() 与 tf.Session().run()
session: with tf.Session() as sess:/ tf.InteractiveSession() 初始化: tf.global_variables_initializer() ...
- TensorFlow 学习(一)—— tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()
scope 命名方法 对于一个复杂的 tensorflow 模型会有很多个变量, tf.variable_scope() :提供了简单的命名空间技术以避免冲突: tf.get_variable():从 ...
- TensorFlow 学习(一)—— tf get variable vs tf Variable ,tf nam
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! scop ...
- TensorFlow 学习(十三)—— tf.app.flags
flags = tf.app.flags FLAGS = flags.FLAGSflags.DEFINE_integer('num_hidden_layers', 3, 'number of hidd ...
- tensorflow学习笔记:tf.data.Dataset,from_tensor_slices(),shuffle(),batch()的用法
tf.data.Dataset.from_tensor_slices: 它的作用是切分传入Tensor的第一个维度,生成相应的dataset. 例1: dataset = tf.data.Datase ...
- TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...
- TF学习——TF之API:TensorFlow的高级机器学习API—tf.contrib.learn的简介、使用方法、案例应用之详细攻略
TF学习--TF之API:TensorFlow的高级机器学习API-tf.contrib.learn的简介.使用方法.案例应用之详细攻略 目录 tf.contrib.learn的简介 tf.contr ...
- TensorFlow学习笔记(十七)tf.nn.conv2d
在给定的4D input与filter下计算2D卷积输入shape为[batch, height, width, in_channels] TensorFlow的CNN代码中有 tf.nn.conv2 ...
最新文章
- java6特性_Java6的新特性
- CV之IS:计算机视觉之图像分割(Image Segmentation)/语义分割算法的简介、使用方法、案例应用之详细攻略
- Java多线程编程 — 锁优化
- inputdstream mysql_【sparkStreaming】将DStream保存在MySQL
- 【四】Java流程控制
- 阿里联合学界开源大型3D场景数据集,6813个户型,几何与纹理细节丰富
- Precedence Problems of C Operators
- 如何开始rails项目
- 资源---2020考研---考研经验(总结:踏踏实实跟着汤家凤老师)
- Oracle报998,无法加载oracle in oradb10g_home2 odbc驱动程序,系统错误代码998解决方法(转载+部分原创)...
- Appium安装手册详解
- 各种坐标之间的转换方法汇总
- 创建室内导航地图的9个步骤
- 计算机辅助教学属于多媒体技术应用吗,多媒体技术在计算机辅助教学中的应用...
- 利用计算机实现排列组合公式,计算机算法基础 ——数学(排列组合函数)
- 用STM32CubeIDE速攻FreeRTOS
- 在线学习算法FTRL基本原理
- 别问上海配眼镜去哪里好,这几家上海老店你必须知晓!
- matlab:曲线拟合
- 福彩3d开奖结果接口文档及示例分享
热门文章
- 可编程直流电源的特点都有哪些呢?
- nginx-负载均衡反向代理
- uname命令 linux,Linux系统下使用uname命令显示系统和硬件信息
- EHCI主机控制器--队列元素传输描述符(qTD)
- 编译原理 | 语法分析(LL(1)分析法/算符优先分析法OPG)学习笔记及例子详解
- 独家视频专访|Ultra 区块链游戏平台的创始人竟然是小霸王游戏机的“操盘手”!
- 很多网站被挂马确找不到代码,arp挂马原理剖析
- dpdk 程序绑核失败问题:EAL: pthread_setaffinity_np failed
- 系统检测到IP地址和网络硬件地址发生地址冲突
- Axure 的第一个作品——线框图