我从同事那里得到了tensorflow代码,并试图在DGX-1上运行它。然而,代码抛出异常:
ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[1,256,1024,1021] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
[[{{node Optimizer/gradients/Decoder/Decoder/LeakyRelu_9_grad/Select_1}} = Select[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"](Optimizer/gradients/Decoder/Decoder/LeakyRelu_9_grad/GreaterEqual, Optimizer/gradients/Decoder/Decoder/LeakyRelu_9_grad/zeros, Optimizer/gradients/Decoder/Decoder/conv2d_5/Conv2D_grad/Conv2DBackpropInput)]]
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 is already set to 1.
Every time, exception is raised on different epoch number.
I have tried following settings (not working):
config.gpu_options.allocator_type ='BFC'
config.gpu_options.per_process_gpu_memory_fraction = 0.90
任何帮助都将不胜感激。
谢谢,
我尝试了不同的图像大小(其中一些大小要么导致代码异常,要么仍然存在内存问题(,幸运的是,其中一个大小解决了问题。
您的计算机内存不足。你可以做一些事情:
- 减少
Dense
、Conv2D
层中的神经元数量 - 输入使用较小的
float
数据类型,即np.float16
而不是np.float64
- 使用较小的
batch_size
(或增加steps_per_epoch
( - 使用灰度图像(因此1个通道而不是3个(
- 减少层数
- 使用更多
MaxPooling2D
层,并增加其池大小 - 在
Conv2D
层中使用较大的strides
- 缩小图像大小(可以使用
PIL
( - 应用丢弃