资源耗尽错误:分配张量时的 OOM



我用一个少了一个全连接层来分类102类花朵,我自己实现了AlexNet。我的训练集由 11,000 张图像组成,而验证和训练集各有 3,000 张图像。我用HDF5格式编写了这三个数据集,并将它们存储在磁盘上。我重新加载了它们,并尝试使用 8 和 75 个纪元的批次通过网络传递图像。但是,发生了内存错误

我已经尝试将批量大小减小到 8 并将尺寸减小到 400x400(原始尺寸为 500x500),但没有使用

tensorflow/core/platform/cpu_feature_guard.cc:141] 您的 CPU 支持 此 TensorFlow 二进制文件未编译为使用的说明:AVX2 2019-08-23 00:19:47.336560:I 张量流/核心/common_runtime/gpu/gpu_device.cc:1433] 找到设备 0 具有属性: 名称: GeForce GTX 1050 Ti 大调: 6 小调: 1 内存时钟速率(GHz): 1.62 pciBusID: 0000:01:00.0 总计内存: 4.00GiB free内存:3.30GiB 2019-08-23 00:19:47.342432:I tensorflow/core/common_runtime/gpu/gpu_device.cc:1512] 添加可见 GPU设备:0 2019-08-23 00:19:47.900540:I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] Device 将流执行器与强度 1 边缘矩阵互连: 2019-08-23 00:19:47.904687:I Tensorflow/core/common_runtime/gpu/gpu_device.cc:990] 0 2019-08-23 00:19:47.907033:I Tensorflow/core/common_runtime/gpu/gpu_device.cc:1003] 0: N 2019-08-23 00:19:47.909380:I Tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 3007 MB 記憶體) -> 物理 GPU(裝置:0,名稱:GeForce GTX 1050 Ti, PCI 总线 ID:0000:01:00.0,计算能力:6.1) 2019-08-23 00:19:48.550001:W tensorflow/core/framework/allocator.cc:124] 分配822083584超过系统内存的 10%。2019-08-23 00:19:49.089904:W tensorflow/core/framework/allocator.cc:124] 分配822083584超过系统内存的 10%。2019-08-23 00:19:49.629533:W tensorflow/core/framework/allocator.cc:124] 分配822083584超过系统内存的 10%。2019-08-23 00:19:50.067994:W tensorflow/core/framework/allocator.cc:124] 分配822083584超过系统内存的 10%。2019-08-23 00:19:50.523258:W tensorflow/core/framework/allocator.cc:124] 分配822083584超过系统内存的 10%。纪元 1/75 2019-08-23 00:20:14.632764:I 张量流/stream_executor/dso_loader.cc:152] 成功打开 CUDA 本地库cublas64_100.dll 2019-08-23 00:20:16.325917:W 张量流/核心/common_runtime/bfc_allocator.cc:211] 分配器 (GPU_0_bfc) 尝试分配 3.14GiB 时内存不足。调用方 表示这不是失败,但可能意味着可能存在 如果有更多内存可用,性能会提高。2019-08-23 00:20:16.410374:W 张量流/核心/common_runtime/bfc_allocator.cc:211] 分配器 (GPU_0_bfc) 尝试分配 836.38MiB 时内存不足。调用方 表示这不是失败,但可能意味着可能存在 如果有更多内存可用,性能会提高。2019-08-23 00:20:16.650565:W 张量流/核心/common_runtime/bfc_allocator.cc:211] 分配器 (GPU_0_bfc) 尝试分配 429.27MiB 时内存不足。调用方 表示这不是失败,但可能意味着可能存在 如果有更多内存可用,性能会提高。2019-08-23 00:20:16.716695:W 张量流/核心/common_runtime/bfc_allocator.cc:211] 分配器 (GPU_0_bfc) 尝试分配 1.22GiB 时内存不足。调用方 表示这不是失败,但可能意味着可能存在 如果有更多内存可用,性能会提高。2019-08-23 00:20:16.733003:W 张量流/核心/common_runtime/bfc_allocator.cc:211] 分配器 (GPU_0_bfc) 尝试分配 637.52MiB 时内存不足。调用方 表示这不是失败,但可能意味着可能存在 如果有更多内存可用,性能会提高。2019-08-23 00:20:16.782250:W 张量流/核心/common_runtime/bfc_allocator.cc:211] 分配器 (GPU_0_bfc) 在尝试分配 844.88MiB 时内存不足。调用方 表示这不是失败,但可能意味着可能存在 如果有更多内存可用,性能会提高。2019-08-23 00:20:16.792756:W 张量流/核心/common_runtime/bfc_allocator.cc:211] 分配器 (GPU_0_bfc) 尝试分配 429.27MiB 时内存不足。调用方 表示这不是失败,但可能意味着可能存在 如果有更多内存可用,性能会提高。2019-08-23 00:20:25.135977:W 张量流/核心/common_runtime/bfc_allocator.cc:267] 分配器 (GPU_0_bfc) 尝试分配 784.00MiB 时内存不足。 当前 分配摘要如下。2019-08-23 00:20:25.143913:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (256):总块数:
104, 使用中的块数: 99. 为块分配 26.0KiB。24.8KiB 在垃圾箱中使用。452B 客户端请求在 bin 中使用。2019-08-23 00:20:25.150353:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (512):总块数:
16, 使用中的块数: 14. 为块分配 8.0KiB。 7.0KiB 在箱中使用。5.3KiB 客户端在 bin 中使用中请求。2019-08-23 00:20:25.160812:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (1024): 总区块数:49,使用中的区块数:49。为区块分配了 61.3KiB。 61.3KiB 在箱中使用。60.1KiB 客户端请求在 bin 中使用。2019-08-23 00:20:25.169944:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 垃圾桶 (2048): 总区块数: 4, 使用中的区块数: 4. 为区块分配的 13.0KiB。 13.0KiB 在箱中使用。12.8KiB 客户端请求在 bin 中使用。2019-08-23 00:20:25.182025:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (4096): 总区块数:1,使用中的区块数:0。 为区块分配的 6.3KiB。0B 英寸 在垃圾箱中使用。0B 客户端请求在垃圾箱中使用。2019-08-23 00:20:25.192454:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (8192): 总区块数:1,使用中的区块数:0。 分配给区块的 15.0KiB。0B 英寸 在垃圾箱中使用。0B 客户端请求在垃圾箱中使用。2019-08-23 00:20:25.200847:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (16384):总块数: 9
, 使用中的块数: 9. 为块分配的 144.8KiB。 144.8KiB 在箱中使用。在 bin 中使用 144.0KiB 客户端请求。2019-08-23 00:20:25.209817:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (32768):总块数:0,正在使用的
块数:0。 为区块分配的 0B。 0B 正在使用中 在垃圾箱中。0B 客户端请求在垃圾箱中使用。2019-08-23 00:20:25.219192: I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (65536):总块数:0
,正在使用的块数:0。 为块分配的 0B。 0B 正在使用中 在垃圾箱中。0B 客户端请求在垃圾箱中使用。2019-08-23 00:20:25.228194: I 张量流/核心/common_runtime/bfc_allocator.cc:597] 垃圾桶 (131072):总块数: 9
, 使用中的块数: 9. 为块分配的 1.17MiB。 1.17MiB 在垃圾箱中使用。1.16MiB 客户端请求在箱中使用。2019-08-23 00:20:25.236088:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (262144):总块数: 0
, 使用中的块数: 0. 为区块分配的 0B。 0B 正在使用中 在垃圾箱中。0B 客户端请求在垃圾箱中使用。2019-08-23 00:20:25.245435: I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (524288):总块数: 0
, 使用中的块数: 0. 为块分配的 0B。 0B 正在使用中 在垃圾箱中。0B 客户端请求在垃圾箱中使用。2019-08-23 00:20:25.254114: I tensorflow/core/common_runtime/bfc_allocator.cc:597] Bin (1048576): 总区块数: 8, 使用中的区块数: 7. 12.25MiB 分配给区块。 11.22MiB 在垃圾箱中使用。10.91MiB 客户端请求在 bin 中使用。2019-08-23 00:20:25.264209:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (2097152):总块数: 14
, 使用中的块数: 14. 为块分配了 42.09MiB。 42.09MiB 在垃圾箱中使用。42.09MiB 客户端请求在 bin 中使用。2019-08-23 00:20:25.273799:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (4194304):总块数: 13
, 使用中的块数: 13. 为块分配了 80.41MiB。 80.41MiB 在箱中使用。77.91MiB 客户端请求在箱中使用。2019-08-23 00:20:25.285089:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (8388608):总块数: 13
, 使用中的块数: 13. 为块分配的 141.14MiB。 141.14MiB 在箱中使用。136.45MiB 客户端请求在箱中使用。2019-08-23 00:20:25.298520:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (16777216):总块数: 4
, 使用中的块数: 4. 分配给块的 112.98MiB。 112.98MiB 在箱中使用。在 bin 中使用 112.98MiB 客户端请求。2019-08-23 00:20:25.306979:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (33554432):总块数: 4
, 使用中的块数: 4. 分配给块的 183.11MiB。 183.11MiB 在箱中使用。在 bin 中使用 183.11MiB 客户端请求。2019-08-23 00:20:25.315121:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (67108864):总块数:
1, 使用中的块数: 0. 82.18MiB 分配给块。 0B 在垃圾箱中使用。0B 客户端请求在垃圾箱中使用。2019-08-23 00:20:25.322194:I 张量流/核心/common_runtime/bfc_allocator.cc:597] 箱 (134217728): 总区块数:0,使用中的区块数:0。 为区块分配的 0B。0B 正在使用中 在垃圾箱中。0B 客户端请求在垃圾箱中使用。2019-08-23 00:20:25.331550: I 张量流/核心/common_runtime/bfc_allocator.cc:597] Bin (268435456): 总区块数: 3, 使用中的区块数: 3. 分配了 2.30GiB 对于块。2.30GiB 在垃圾箱中使用。2.30GiB 客户端请求在 .bin。2019-08-23 00:20:25.342419:I 张量流/核心/common_runtime/bfc_allocator.cc:613] 784.00MiB 的箱 为 256.00MiB,块状态: 张量流/核心/common_runtime/bfc_allocator.cc:645] 总和 使用中的块:2.87GiB 2019-08-23 00:20:50.049508:I张量流/核心/common_runtime/bfc_allocator.cc:647] 统计: 限制:3153697177 使用量:3086482944 最大使用量:3153574400 分配数量:388 最大分配大小:


822083584

2019-08-23 00:20:50.061236:W 张量流/核心/common_runtime/bfc_allocator.cc:271] __ 2019-08-23 00:20:50.066546:W Tensorflow/core/framework/op_kernel.cc:1401] OP_REQUIRES失败于 cwise_ops_common.cc:70 : 资源耗尽:分配时的 OOM 具有形状[50176,4096]和类型浮点的张量/作业:本地主机/副本:0/任务:0/设备:GPU:0 通过分配器GPU_0_bfc 回溯(最近一次调用):文件 "train.py",第 80 行,在 max_queue_size=8 * 2, verbose=1) 文件 "C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site-packages\tensorflow\python\keras\engine\training.py", 1426行,fit_generator initial_epoch=initial_epoch) 文件 "C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site-packages\tensorflow\python\keras\engine\training_generator.py", 191路,model_iteration batch_outs = batch_function(*batch_data) 文件 "C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site-packages\tensorflow\python\keras\engine\training.py", 1191号线,train_on_batch 输出 = self._fit_function(ins) # pylint:禁用 = 不可调用的文件 "C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site-packages\tensorflow\python\keras\backend.py", 第 3076 行,在调用中 run_metadata=self.run_metadata) 文件 "C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site-packages\tensorflow\python\client\session.py", 第 1439 行,在调用run_metadata_ptr) 文件中 "C:\Users\aleem\Anaconda3\envs\tensorflowf\lib\site-packages\tensorflow\python\framework\errors_impl.py", 528 号线,在 c_api号出口下。TF_GetCode(self.status.status)) tensorflow.python.framework.errors_impl.资源耗尽错误:OOM 分配具有 shape[50176,4096] 的张量并键入浮点数时/作业:本地主机/副本:0/任务:0/设备:GPU:0 通过分配器GPU_0_bfc [[{{node training/RMSprop/gradients/loss/kernel/Regularizer_5/Square_grad/Mul_1}}]] 提示:如果你想在 OOM 发生时查看分配张量的列表, 将report_tensor_allocations_upon_oom添加到当前"的运行选项 分配信息。

[[{{node ConstantFoldingCtrl/loss/activation_6_loss/broadcast_weights/assert_broadcastable/AssertGuard/Switch_0}}]]

提示:如果你想在 OOM 发生时查看分配张量的列表, 将report_tensor_allocations_upon_oom添加到当前"的运行选项 分配信息。

这是因为 GPU 内存不能自由分配用于训练,这可能是由于内存中的数据集(如果不成批)过载。但是您已经使用了fit_generator因此我们可以排除它,因为它为批量训练提供了数据,在并行运行时生成数据。

解决方案是检查哪个进程正在使用您的 GPU。如果您使用的是 nvidia GPU,您可以通过以下方式检查消耗 GPU 的进程nvidia-smi,或者您也可以尝试PS -fA | grep python.这将向您显示哪个进程正在运行并使用 GPU。只需从PID列获取进程ID,然后通过命令kill -9 PID杀死进程。重新运行训练,这次您的 GPU 是免费的。我遇到了同样的问题,清除 GPU 对我有帮助。

  • 注意 - 所有命令都在终端中运行。

最新更新