tensorflow-gpu版本使用问题和方法汇总

tensorflow-gpu版本使用问题和方法汇总

  • 训练内存溢出问题
    • 问题描述
    • 解决方法
    • keras和tensorflow混合使用的条件下发生内存溢出的问题
  • batch_size设置导致tensorflow-gpu显存超出
    • Tensorflow-GPU显存错误
    • 解决方法
  • 忽略训练过程中产生的警告和设备信息

训练内存溢出问题

问题描述

使用显卡为1660ti-6G,系统为Ubuntu16.04,使用的tensorflow版本为1.14.
在进行网络的训练的时,tensorflow会默认将显卡的显存占满,然后训练网络有时会出现如下错误:
Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.

解决方法

针对这种问题,需要人为的对程序所需要的显存进行限制
下面是针对两种显存限制方式(显存自适应增长和显存固定限制)实现的代码

def gpu_memory_config(mode,ratio=1):

    '''
    # gpu config function for memory overflow
    '''
    config = tf.ConfigProto()

    if(mode == "adaption"):
        config.gpu_options.allow_growth = True 
    if(mode == "ratio"):
        config.gpu_options.peper_process_gpu_memory_fraction = ratio

    return config

通过以上代码完成对显存配置方式的选择,启动Session的时候来进行设定:

config = gpu_memory_config(adaption)
with tf.Session(config = config) as :
......

keras和tensorflow混合使用的条件下发生内存溢出的问题

import tensorflow as tf
from tensorflow import keras
import keras.backend.tensorflow_backend as KTF

// 显存自适应(adaption)和显存固定限额(ratio)
model = *******
config = gpu_memory_config(mode)
session = tf.Session(config=config)
KTF.set_session(session)

通过tensorflow的后端来进行keras的显存超出问题的设置

batch_size设置导致tensorflow-gpu显存超出

Tensorflow-GPU显存错误

Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info.

解决方法

减小网络的batch_size的值

忽略训练过程中产生的警告和设备信息

import os
import logging
import warnings

# TF_CPP_MIN_LOG_LEVEL = 1         //默认设置,为显示所有信息                
# TF_CPP_MIN_LOG_LEVEL = 2         //只显示error和warining信息                
# TF_CPP_MIN_LOG_LEVEL = 3         //只显示error信息


os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"
warnings.filterwarnings("ignore")
logging.getLogger('tensorflow').setLevel(logging.ERROR)

你可能感兴趣的:(tensorflow学习总结)