昨晚用VGG16訓練模型時,彈了個資源耗盡的錯誤,一臉懵逼,在VGG8跑得好好的,換了個網絡就不行了,報錯如下,還有很長一大段的,但關鍵是這段:
2019-05-06 10:54:24.400484: W tensorflow/core/framework/op_kernel.cc:1275] OP_REQUIRES failed at conv_ops.cc:398 : Resource exhausted: OOM when allocating tensor with shape[64,64,224,224] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
分析一下就可以看出問題了,我設置的batch_size 是64,圖片輸入大小爲224x224,通過卷積,已經拉伸到64維了,所以是tensor with shape[64,64,224,224]
,在細算下佔用內存的大小就知道爲什麼報錯了,數據類型是float32
,即4B存一個數據,計算一下所需內存大小:64*64*224*224*4=822083584B/1024/1024=784.0M
,所以算到這一層就需要784M的GPU顯存,我用的k40,11G顯存,就報錯了,說明緩存不足啊,其實我同時調用了2條k40,也不行。
解決方法也很簡單,兩個:
- 減少
batch_size
的大小,我設置的是64,我改爲16就可以跑了。 - 咬咬牙,換個顯存大一點的顯卡,完美解決問題