(转)tensorflow使用GPU训练时的显存占用问题

https://blog.csdn.net/sunwuhuang1/article/details/53946462

        最近用GoogleNet (inception-v3)做fine-tune训练时,遇到了一个问题。当我选择单个GPU训练时候,服务器中所有的GPU显存都会被占满,如下图所示:


    出现以上问题的原因是tensorflow在训练时默认占用所有GPU的显存。

    可以通过以下方式解决该问题:

1、在构造tf.Session()时候通过传递tf.GPUOptions作为可选配置参数的一部分来显式地指定需要分配的显存比例,如下所示:


  
  
  1. # 假如有12GB的显存并使用其中的4GB:
  2. gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction= 0.333)
  3. sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))

per_process_gpu_memory_fraction指定了每个GPU进程中使用显存的上限,但它只能均匀作用于所有GPU,无法对不同GPU设置不同的上限

2、尝试如下设置:


  
  
  1. config = tf.ConfigProto()
  2. config.gpu_options.allow_growth= True
  3. sess = tf.Session(config=config)
当allow_growth设置为True时,分配器将不会指定所有的GPU内存,而是根据需求增长

3、在执行训练脚本前使用:

export CUDA_VISIBLE_DEVICES=1
  
  
来限制可见的GPU数目

猜你喜欢

转载自blog.csdn.net/zyb418/article/details/88071721