【问题标题】:How to use TCMalloc on Google Cloud ML Engine如何在 Google Cloud ML Engine 上使用 TCMalloc
【发布时间】:2017-09-23 00:35:02
【问题描述】:

如何在 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个get请求后,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个get请求后,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个get请求后,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, loss = 0.11, lr = 0.087000 (278.7 examples/sec; 0.230 sec/batch)

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

09:13:34.740 PoolAllocator:329380055个get请求后,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, loss = 0.11, lr = 0.087250 (248.4 examples/sec; 0.258 sec/batch)

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 进行训练,但仍然存在内存泄漏,但少于不使用它。

【问题讨论】:

  • 你能提供更多关于你的问题的细节吗?特别是,您观察到哪些症状使您相信自己有内存泄漏?
  • @rhaertel80 我刚刚添加了训练内存利用率图和训练日志。我在 73 个 epoch 后出现内存不足错误。我使用 complex_model_m_gpu 进行机器配置。训练数据:257018张尺寸为128x128的png图片。谢谢。
  • 感谢您的更新。下面我直接回答了关于TCMalloc的问题,但是显然我们需要找到内存泄漏。如果您在使用finalize 时程序没有退出,那么您的内存泄漏可能在其他地方。您是否在 master 上做其他事情,例如执行评估?任何指向代码的指针都会有所帮助。

标签: tcmalloc google-cloud-ml-engine


【解决方案1】:

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

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

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

【讨论】:

  • 抱歉回复晚了。我已经尝试过此链接中提到的内容:stackoverflow.com/documentation/tensorflow/3883/…。在我改成 tcmalloc 之后,内存泄漏与 jemalloc 相比减少到了非常小的程度。
  • 但是我不能在 Google Cloud ML Engine 上使用 tcmalloc,所以内存泄漏对我来说仍然是个问题。有什么建议吗?
  • 可能相关:stackoverflow.com/q/44412820/1399222。我们目前正在调查。
猜你喜欢
  • 1970-01-01
  • 2018-07-12
  • 2017-09-05
  • 1970-01-01
  • 2023-03-20
  • 2018-09-19
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
相关资源
最近更新 更多