0

如何在 Google Cloud ML Engine 上使用 TCMalloc?或者除了 TCMalloc 之外,还有没有其他方法可以解决 ML Engine 上的内存泄漏问题?

完成图表似乎没有帮助。


内存利用率图: 在此处输入图像描述

训练 73 个 epoch 后,我出现了内存不足错误。这是训练日志的一部分:

11:26:33.707 作业失败。

11:26:20.949 完成拆除 TensorFlow。

11:25:18.568 副本 master 0 内存不足并以非零状态 247 退出。要了解有关您的作业退出原因的更多信息,请查看日志

11:25:07.785 清理完毕。

11:25:07.785 模块完成;打扫干净。

11:25:07.783 模块因未能调用子进程命令而引发异常命令 '['python', '-m', u'trainer.main', u'--data=gs://', u'-- train_log_dir=gs://tfoutput/joboutput', u'--model=trainer.crisp_model', u'--num_threads=32', u'--memory_usage=0.8', u'--max_out_norm=1', u '--train_batch_size=64', u'--sample_size=112', u'--num_gpus=4', u'--allow_growth=True', u'--weight_loss_by_train_size=True', u'-x',返回非零退出状态 -9。

11:23:08.853 PNG 警告:扩展块时超出大小限制

11:18:18.474 纪元 58.0:准确度 = 0.9109

11:17:14.851 2017-05-17 10:17:14.851024: epoch 58, loss = 0.12, lr = 0.085500 (228.9 examples/sec; 0.280 sec/batch)

11:15:39.532 PNG 警告:扩展块时超出大小限制

11:10:23.855 PoolAllocator:372618242个get请求后,put_count=372618151 evicted_count=475000 eviction_rate=0.00127476,不满足分配率=0.00127518

11:05:32.928 PNG 警告:扩展块时超出大小限制

10:59:26.006 纪元 57.0:准确度 = 0.8868

10:58:24.117 2017-05-17 09:58:24.117444: epoch 57, loss = 0.23, lr = 0.085750 (282.2 examples/sec; 0.227 sec/batch)

10:54:37.440 PNG 警告:扩展块时超出大小限制

10:53:30.323 PoolAllocator:366350973个get请求后,put_count=366350992 evicted_count=465000 eviction_rate=0.00126927和不满足分配率=0.0012694

10:51:51.417 PNG 警告:扩展块时超出大小限制

10:40:43.811 纪元 56.0:准确度 = 0.7897

10:39:41.308 2017-05-17 09:39:41.308624: epoch 56, loss = 0.06, lr = 0.086000 (273.8 examples/sec; 0.234 sec/batch)

10:38:14.522 PoolAllocator: 360630699 次获取请求后,put_count=360630659 evicted_count=455000 eviction_rate=0.00126168 和不满足分配率=0.00126197

10:36:10.480 PNG 警告:扩展块时超出大小限制

10:21:50.715 纪元 55.0:准确度 = 0.9175

10:20:51.801 PoolAllocator:354197216个get请求后,put_count=354197255 evicted_count=445000 eviction_rate=0.00125636和不满足分配率=0.00125644

10:20:49.815 2017-05-17 09:20:49.815251: epoch 55, loss = 0.25, lr = 0.086250 (285.6 examples/sec; 0.224 sec/batch)

10:02:56.637 纪元 54.0:准确度 = 0.9191

10:01:57.367 2017-05-17 09:01:57.367369: epoch 54, loss = 0.09, lr = 0.086500 (256.5 examples/sec; 0.249 sec/batch)

10:01:42.365 PoolAllocator:347107694个get请求后,put_count=347107646 evicted_count=435000 eviction_rate=0.00125321和不满足分配率=0.00125354

09:45:56.116 PNG 警告:扩展块时超出大小限制

09:44:12.698 纪元 53.0:准确度 = 0.9039

09:43:09.888 2017-05-17 08:43:09.888202: epoch 53, loss = 0.10, lr = 0.086750 (307.0 examples/sec; 0.208 sec/batch)

09:41:48.672 PoolAllocator:339747205 次获取请求后,put_count=339747210 evicted_count=425000 eviction_rate=0.00125093 和不满意的分配率=0.00125111

09:36:14.085 PNG 警告:扩展块时超出大小限制

09:35:11.686 PNG 警告:扩展块时超出大小限制

09:34:45.011 PNG 警告:扩展块时超出大小限制

09:31:03.212 PNG 警告:扩展块时超出大小限制

09:28:40.116 PoolAllocator:335014430 次获取请求后,put_count=335014342 evicted_count=415000 eviction_rate=0.00123875 和不满足分配率=0.00123921

09:27:38.374 PNG 警告:扩展块时超出大小限制

09:25:23.913 PNG 警告:扩展块时超出大小限制

09:25:16.065 纪元 52.0:准确度 = 0.9313

09:24:16.963 2017-05-17 08:24:16.962930: epoch 52,损失 = 0.11,lr = 0.087000(278.7 示例/秒;0.230 秒/批次)

09:17:48.417 PNG 警告:扩展块时超出大小限制

09:13:34.740 PoolAllocator: 329380055 次获取请求后,put_count=329379978 evicted_count=405000 eviction_rate=0.00122958 和不满足分配率=0.00123001

09:06:09.948 更新纪元 51.0:准确度 = 0.9357

09:06:09.948 纪元 51.0:准确度 = 0.9357

09:05:09.575 2017-05-17 08:05:09.575641: epoch 51,损失 = 0.11,lr = 0.087250(248.4 示例/秒;0.258 秒/批次)

08:59:17.735 PNG 警告:扩展块时超出大小限制

08:55:58.605 PoolAllocator:322904781个get请求后,put_count=322904714 evicted_count=395000 eviction_rate=0.00122327和不满足分配率=0.00122368

08:48:46.322 PNG 警告:扩展块时超出大小限制

08:47:27.936 纪元 50.0:准确度 = 0.9197

08:46:29.370 2017-05-17 07:46:29.370135: epoch 50, loss = 0.20, lr = 0.087500 (253.2 examples/sec; 0.253 sec/batch)

我已经尝试在本地机器上使用 TCMalloc 进行培训,但仍然存在内存泄漏,但少于不使用它。

4

1 回答 1

0

TensorFlow 默认使用jemalloc,这也是 CloudML Engine 上使用的:

jemalloc 是一个通用的 malloc(3) 实现,它强调避免碎片和可扩展的并发支持。

因此,碎片不太可能是内存问题的根本原因。

于 2017-05-18T16:25:47.330 回答