zoukankan      html  css  js  c++  java
  • 【转载】 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"] = "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进程。

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

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

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

  • 相关阅读:
    CSS中的小知识
    网络基础 中的osi七层 协议
    pickle的使用
    max()的key的运用
    read,readline,readlines的区别
    print()控制台输出带颜色的方法
    写项目时bin目录下的start中的细节(路径问题的解决)
    使用hashlib密文存储实例
    固态硬盘使用f2fs作为根分区安装linux
    工厂方法(Factory Method)
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/12035678.html
Copyright © 2011-2022 走看看