带有Tensorflow的Keras:predict_generator抛出ResourceExhaustedError

时间:2018-01-28 19:13:54

标签: tensorflow keras

功能

Docker容器在16 GB Ram,1x GTX1070,8GB,Ubuntu 16.04.3 LTS的机器上运行。 Keras设置为使用GPU。

我想做什么

我想计算一组79726图像245x245(RGB)的卷积输出,这样我就可以通过已经训练的辅助模型得到预测。我正在使用Keras.applications附带的VGG16模型。

代码

ValueType

问题

预测生成器运行一段时间,然后抛出

  

ResourceExhaustedError:分配形状的张量时的OOM [200,64,245,245]        [[节点:block1_conv2 / convolution = Conv2D [T = DT_FLOAT,data_format =" NHWC",padding =" SAME",strides = [1,1,1,1],use_cudnn_on_gpu = true,_device =" / job:localhost / replica:0 / task:0 / device:GPU:0"](block1_conv1 / Relu,block1_conv2 / kernel / read)]]        [[节点:block5_pool / MaxPool / _159 = _Revvclient_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_127_block5_pool / MaxPool",tensor_type = DT_FLOAT,_device =" / job:本地主机/复制:0 /任务:0 /装置:CPU:0"]]

使用较小批次更新<10>

预测过程仍然停止,但这次出现内部错误:

  

InternalError:未初始化Dst张量。        [[节点:block5_pool / MaxPool / _159 = _Revvclient_terminated = false,recv_device =&#34; / job:localhost / replica:0 / task:0 / device:CPU:0&#34;,send_device =&#34; / job :localhost / replica:0 / task:0 / device:GPU:0&#34;,send_device_incarnation = 1,tensor_name =&#34; edge_127_block5_pool / MaxPool&#34;,tensor_type = DT_FLOAT,_device =&#34; / job:本地主机/复制:0 /任务:0 /装置:CPU:0&#34;]]

没有其他使用GPU的进程。

谢谢

3 个答案:

答案 0 :(得分:0)

您使用的GPU内存过多。尝试使用较小的批处理大小或确保没有其他进程在同一GPU上运行。

答案 1 :(得分:0)

您遇到的第一个错误是因为GPU内存无法处理由神经网络生成的缓冲区。

第二个原因是因为Keras难以发布Tensorflow会话。您可以明确地释放会话:

tf.keras.backend.clear_session()

您还可以通过在外壳中执行nvidia-smi来检查GPU的使用过程。您将看到一个使用GPU整个内存的过程。然后只需“ kill -9”该过程,您就可以再次执行您的张量流代码。

答案 2 :(得分:0)

据我所知,batchsize不会影响推理结果。因此,只要您的gpu可以处理,您就可以尝试使用较小的近似批处理大小,而不必担心较小的批处理大小是否会引起任何问题。