zoukankan      html  css  js  c++  java
  • 【转载】 tf.ConfigProto和tf.GPUOptions用法总结

    原文地址:

    https://blog.csdn.net/C_chuxin/article/details/84990176

    ------------------------------------------------------------------------------------------

    【题目】tf.ConfigProto和tf.GPUOptions用法总结

    概述

    tf.ConfigProto一般用在创建session的时候,用来对session进行参数配置,而tf.GPUOptions可以作为设置tf.ConfigProto时的一个参数选项,一般用于限制GPU资源的使用。

    一、tf.ConfigProto

    tf.ConfigProto一般用在创建session的时候,用来对session进行参数配置。

    1.1 tf.ConfigProto()的参数

    log_device_placement=True : 是否打印设备分配日志
     
    allow_soft_placement=True : 如果你指定的设备不存在,允许TF自动分配设备

    1.2 tf.ConfigProto()使用参数的两种方法

    (1)第一种实在构造config对象时直接赋值,如下:

    tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)

    (2)第二种是先构造config对象,再对构造的config对象进行赋值,如下:

    config = tf.ConfigProto()
     
    config.log_device_placement= True
     
    config.allow_soft_placement=True

    PS:tf.ConfigProto()含有的部分参数(属性与方法,可使用dir(tf.ConfigProto())进行查看)如下:

    1.3 让参数设置生效的方法

    session = tf.Session(config=config)

    PS:在Keras中使用:

    from keras.backend.tensorflow_backend import set_session
     
    set_session(tf.Session(config=config))

    二、使用tf.GPUOptions限制GPU资源的使用

    参考链接:https://blog.csdn.net/dcrmg/article/details/79091941

    tf.GPUOptions可以作为设置tf.ConfigProto时的一个参数选项,一般用于限制GPU资源的使用。同样有两种方法实现。

    为了加快运行效率TensorFlow初始化时会尝试分配所有可用的GPU显存资源给自己,这在多人使用的服务器上工作就会导致GPU占用,别人无法使用GPU工作的情况。

    tf提供了两种控制GPU资源使用的方法,一是让TensorFlow在运行过程中动态申请显存,需要多少就申请多少;第二种方式就是限制GPU的使用率。

    2.1 动态申请显存

    方法一:

    config = tf.ConfigProto()
     
    config.gpu_options.allow_growth = True
     
    session = tf.Session(config=config)

    方法二:

    gpu_options=tf.GPUOptions(allow_growth = True)
     
    config=tf.ConfigProto(gpu_options=gpu_options)
     
    session = tf.Session(config=config)

    2.2 限制GPU的使用率

    方法一:

    config = tf.ConfigProto()
     
    config.gpu_options.per_process_gpu_memory_fraction = 0.85  #占用85%显存
     
    session = tf.Session(config=config)

    方法二:

    gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.85)
     
    config=tf.ConfigProto(gpu_options=gpu_options)
     
    session = tf.Session(config=config)

    【注意】当限制GPU使用率时,GPU所占的显存是一直占着的,哪怕你Ctrl+Z 终止了程序,这时你需要手动kill进程。(参考链接:https://blog.csdn.net/c20081052/article/details/82345454)具体如下:

    如果你在linux终端运行深度学习python脚本文件,运行中发现占用多个GPU和内存资源,可用下面的方法解决:

    (1)请先查看占用资源的进程归属方是谁,以及使用的是什么指令:

       ps -f PID号

    (2)然后确认该进程可以kill掉情况下直接杀掉:

        kill -9 PID号   #注意必须加-9,否则可能杀不掉进程

    ————————————————
    版权声明:本文为CSDN博主「C小C」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/C_chuxin/article/details/84990176

  • 相关阅读:
    OpenJDK源码研究笔记(十二):JDBC中的元数据,数据库元数据(DatabaseMetaData),参数元数据(ParameterMetaData),结果集元数据(ResultSetMetaDa
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 257 二叉树的所有路径
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
    Java实现 LeetCode 241 为运算表达式设计优先级
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/12034866.html
Copyright © 2011-2022 走看看