在Keras中使用2Gb gpu推断大图

时间:2019-04-24 07:44:31

标签: keras

我想使用Keras在2 Gb GPU上推断2D图像的3584x2796大小。可能吗?网络体系结构是一个Unet。

在推断过程中,总是会出现内存不足错误。即使是卷积,仅对于第一层也会失败。看来Keras并未针对大型图像卷积进行优化。在2 Gb GPU上进行推理时,即使是下面的网络也会失败。

Layer (type)                 Output Shape              Param #   
=================================================================
input_3 (InputLayer)         (None, 3584, 2796, 1)     0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 3584, 2796, 32)     80        
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 3584, 2796, 32)     584       
_________________________________________________________________
instance_normalization_3 (In (None, 3584, 2796, 32)     2         
_________________________________________________________________
activation_3 (Activation)    (None, 3584, 2796, 32)     0         
=================================================================
Total params: 666
Trainable params: 666
Non-trainable params: 0

我遇到以下错误:

OOM when allocating tensor with shape[1,32,3584,2796] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
     [[{{node conv2d_2/convolution}} = Conv2D[T=DT_FLOAT, data_format="NCHW", dilations=[1, 1, 1, 1], padding="SAME", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/device:GPU:0"](conv2d_2/convolution-0-TransposeNHWCToNCHW-LayoutOptimizer, conv2d_2/kernel/read)]]
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.

     [[{{node activation_2/Relu/_11}} = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_47_activation_2/Relu", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
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.

1 个答案:

答案 0 :(得分:0)

输入的图像很大。

即使11GB的Video Ram(例如GTX 1080 Ti)也不足以处理这种大小。

2GB GPU确实不足以进行深度学习,尤其是对于计算机视觉而言。

首先,请使用至少具有4GB VRAM的GPU。 6GB的VRAM是一个很好的起点,8GB的VRAM将更合适。

第二,尝试将初始图像尺寸(3584x2796)减小为(448x350)。实际上,您将高度和宽度都除以8。

这与Keras优化无关,而与GPU的内存大小和输入图像的巨大大小有关。