达到内存限制的 80% 时,Dask 分布式工作线程会停止
Dask distributed workers stall when reaching 80% of memory limit
我在 Dask worker 上遇到内存泄漏问题。
每当其中一个工作人员达到其内存限制的 80% 时,他们就会停止并且不再计算任何东西:
在这里您可以看到四个面板“已存储的字节数”、“任务流”、“进度”和“任务处理”。
“已存储的字节数”面板显示每个工作人员(y 轴)占用的内存量(x 轴)。
“任务流”面板是线程(y 轴)和处理任务所需的运行时(x 轴)的可视化。请注意,每个工人都有两个线程。
“任务处理”面板显示了跨工作人员的任务分配的可视化。 Dask 平衡要做的工作量,即它确保工作人员始终有相似数量的任务要处理。
“进度”面板仅显示处理阶段以及阶段任务中有多少已经 completed/in memory/waiting 需要计算。
这是对 worker 及其内存限制等的简单 top
式概述。
如您所见,worker 1、2 和 3 的使用率较低 CPU (~ 5%) 并存储 6GB 内存。 IE。他们达到了 80% 的内存限制并且不接受任何新任务。
设置 lifetime="20 mintues", lifetime_restart=True
会有所帮助,因为它会不时地重新启动 worker。
然而,当一个 worker 很快达到内存限制时,它只会停止大约 20 分钟,直到它重新启动。
有没有更好的方法可以更早地重启worker?
我不想过多地降低生命周期,因为长时间的 运行 任务可能无法完成。
恕我直言,最佳策略如下:
- 工人完成(long-运行)任务
- 工作人员检查存储项目的大小是否 << 总内存使用量
- Worker 优雅地自行重启
此处描述了您要查找的政策:https://distributed.dask.org/en/latest/worker.html#memory-management
您可以取消 80% 的冻结限制,并通过更改配置更快地重新启动。这些配置值记录在此处:https://docs.dask.org/en/latest/configuration-reference.html#distributed.worker.memory.target
我在 Dask worker 上遇到内存泄漏问题。 每当其中一个工作人员达到其内存限制的 80% 时,他们就会停止并且不再计算任何东西:
top
式概述。
如您所见,worker 1、2 和 3 的使用率较低 CPU (~ 5%) 并存储 6GB 内存。 IE。他们达到了 80% 的内存限制并且不接受任何新任务。
设置 lifetime="20 mintues", lifetime_restart=True
会有所帮助,因为它会不时地重新启动 worker。
然而,当一个 worker 很快达到内存限制时,它只会停止大约 20 分钟,直到它重新启动。
有没有更好的方法可以更早地重启worker? 我不想过多地降低生命周期,因为长时间的 运行 任务可能无法完成。
恕我直言,最佳策略如下:
- 工人完成(long-运行)任务
- 工作人员检查存储项目的大小是否 << 总内存使用量
- Worker 优雅地自行重启
此处描述了您要查找的政策:https://distributed.dask.org/en/latest/worker.html#memory-management
您可以取消 80% 的冻结限制,并通过更改配置更快地重新启动。这些配置值记录在此处:https://docs.dask.org/en/latest/configuration-reference.html#distributed.worker.memory.target