微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

达到80%的内存限制时,Dask分布式工作人员将停止运行

如何解决达到80%的内存限制时,Dask分布式工作人员将停止运行

我对dask工作者的内存泄漏有麻烦。 每当其中一个工作人员达到其内存限制的80%时,他们就会停滞并且不再进行任何计算:

Three workers stalling at 6.0GB memory usage

在这里,您可以看到四个面板:“存储的字节数”,“任务流”,“进度”和“任务处理”。 “已存储的字节数”面板显示每个工作线程占用的内存量(x轴)(y轴)。 “任务流”面板是线程(y轴)和处理任务所需的运行时的可视化(x轴)。请注意,每个工作程序都有两个线程。 “任务处理”面板显示了跨工作人员的任务分布的可视化。 dask平衡了要做的工作量,即确保工人总是有相似数量的任务要处理。 “进度”面板仅显示处理阶段以及已完成/在内存中/正在等待计算的阶段中有多少任务。

Memory and cpu profile of workers

这是工作程序及其内存限制等类似top的简单概述。 如您所见,工作线程1、2和3的cpu使用率较低(约5%),并存储6GB的内存。即他们达到了80%的内存限制,并且不接受任何新任务。

设置lifetime="20 mintues",lifetime_restart=True会有所帮助,因为它会不时重新启动worker。 但是,当一个工作人员非常快地达到内存限制时,它会停顿约20分钟,直到重新启动为止。

有一些更好的方法可以更早地重新启动工作程序吗? 我不想降低寿命,因为长时间运行的任务可能无法完成。

最好的策略是恕我直言以下内容

  1. 工作人员完成(长时间运行)任务
  2. 工作人员检查存储项目的大小是否
  3. 工作人员正常重启自己

解决方法

您要查找的策略在此处进行了描述:https://distributed.dask.org/en/latest/worker.html#memory-management

您可以删除80%冻结限制,并通过更改配置使事情更快地重新启动。这些配置值在此处记录:https://docs.dask.org/en/latest/configuration-reference.html#distributed.worker.memory.target

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。