在服务器上用多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用法解析相关推荐

  1. TensorFlow学习笔记02:使用tf.data读取和保存数据文件

    TensorFlow学习笔记02:使用tf.data读取和保存数据文件 使用`tf.data`读取和写入数据文件 读取和写入csv文件 写入csv文件 读取csv文件 读取和保存TFRecord文件 ...

  2. TensorFlow 学习(二)—— tf.Graph、tf.Session() 与 tf.Session().run()

    session: with tf.Session() as sess:/ tf.InteractiveSession() 初始化: tf.global_variables_initializer() ...

  3. TensorFlow 学习(一)—— tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()

    scope 命名方法 对于一个复杂的 tensorflow 模型会有很多个变量, tf.variable_scope() :提供了简单的命名空间技术以避免冲突: tf.get_variable():从 ...

  4. TensorFlow 学习(一)—— tf get variable vs tf Variable ,tf nam

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! scop ...

  5. TensorFlow 学习(十三)—— tf.app.flags

    flags = tf.app.flags FLAGS = flags.FLAGSflags.DEFINE_integer('num_hidden_layers', 3, 'number of hidd ...

  6. tensorflow学习笔记:tf.data.Dataset,from_tensor_slices(),shuffle(),batch()的用法

    tf.data.Dataset.from_tensor_slices: 它的作用是切分传入Tensor的第一个维度,生成相应的dataset. 例1: dataset = tf.data.Datase ...

  7. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  8. TF学习——TF之API:TensorFlow的高级机器学习API—tf.contrib.learn的简介、使用方法、案例应用之详细攻略

    TF学习--TF之API:TensorFlow的高级机器学习API-tf.contrib.learn的简介.使用方法.案例应用之详细攻略 目录 tf.contrib.learn的简介 tf.contr ...

  9. TensorFlow学习笔记(十七)tf.nn.conv2d

    在给定的4D input与filter下计算2D卷积输入shape为[batch, height, width, in_channels] TensorFlow的CNN代码中有 tf.nn.conv2 ...

最新文章

  1. java6特性_Java6的新特性
  2. CV之IS:计算机视觉之图像分割(Image Segmentation)/语义分割算法的简介、使用方法、案例应用之详细攻略
  3. Java多线程编程 — 锁优化
  4. inputdstream mysql_【sparkStreaming】将DStream保存在MySQL
  5. 【四】Java流程控制
  6. 阿里联合学界开源大型3D场景数据集,6813个户型,几何与纹理细节丰富
  7. Precedence Problems of C Operators
  8. 如何开始rails项目
  9. 资源---2020考研---考研经验(总结:踏踏实实跟着汤家凤老师)
  10. Oracle报998,无法加载oracle in oradb10g_home2 odbc驱动程序,系统错误代码998解决方法(转载+部分原创)...
  11. Appium安装手册详解
  12. 各种坐标之间的转换方法汇总
  13. 创建室内导航地图的9个步骤
  14. 计算机辅助教学属于多媒体技术应用吗,多媒体技术在计算机辅助教学中的应用...
  15. 利用计算机实现排列组合公式,计算机算法基础 ——数学(排列组合函数)
  16. 用STM32CubeIDE速攻FreeRTOS
  17. 在线学习算法FTRL基本原理
  18. 别问上海配眼镜去哪里好,这几家上海老店你必须知晓!
  19. matlab:曲线拟合
  20. 福彩3d开奖结果接口文档及示例分享

热门文章

  1. 可编程直流电源的特点都有哪些呢?
  2. nginx-负载均衡反向代理
  3. uname命令 linux,Linux系统下使用uname命令显示系统和硬件信息
  4. EHCI主机控制器--队列元素传输描述符(qTD)
  5. 编译原理 | 语法分析(LL(1)分析法/算符优先分析法OPG)学习笔记及例子详解
  6. 独家视频专访|Ultra 区块链游戏平台的创始人竟然是小霸王游戏机的“操盘手”!
  7. 很多网站被挂马确找不到代码,arp挂马原理剖析
  8. dpdk 程序绑核失败问题:EAL: pthread_setaffinity_np failed
  9. 系统检测到IP地址和网络硬件地址发生地址冲突
  10. Axure 的第一个作品——线框图