功能
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的进程。
谢谢
答案 0 :(得分:0)
您使用的GPU内存过多。尝试使用较小的批处理大小或确保没有其他进程在同一GPU上运行。
答案 1 :(得分:0)
您遇到的第一个错误是因为GPU内存无法处理由神经网络生成的缓冲区。
第二个原因是因为Keras难以发布Tensorflow会话。您可以明确地释放会话:
tf.keras.backend.clear_session()
您还可以通过在外壳中执行nvidia-smi来检查GPU的使用过程。您将看到一个使用GPU整个内存的过程。然后只需“ kill -9”该过程,您就可以再次执行您的张量流代码。
答案 2 :(得分:0)
据我所知,batchsize不会影响推理结果。因此,只要您的gpu可以处理,您就可以尝试使用较小的近似批处理大小,而不必担心较小的批处理大小是否会引起任何问题。