【发布时间】:2021-05-10 07:09:17
【问题描述】:
我有一个分布式 Dask 集群,我通过 Dask 分布式客户端向它发送大量工作。
在发送一堆工作结束时,我很想得到一份报告或其他东西,告诉我每个工作人员的最大内存使用量是多少。
这可以通过现有的诊断工具实现吗? https://docs.dask.org/en/latest/diagnostics-distributed.html
谢谢! 最好的,
【问题讨论】:
标签: dask dask-distributed
我有一个分布式 Dask 集群,我通过 Dask 分布式客户端向它发送大量工作。
在发送一堆工作结束时,我很想得到一份报告或其他东西,告诉我每个工作人员的最大内存使用量是多少。
这可以通过现有的诊断工具实现吗? https://docs.dask.org/en/latest/diagnostics-distributed.html
谢谢! 最好的,
【问题讨论】:
标签: dask dask-distributed
特别是对于内存,可以使用client.scheduler_info()(可以转储为 json)从调度程序(在运行时)提取信息。对于峰值内存,必须有一个额外的函数,将当前使用情况与之前的使用情况进行比较并选择最大值。
对于许多其他有用的信息,但不是内存消耗峰值,有内置报告:
from dask.distributed import performance_report
with performance_report(filename="dask-report.html"):
## some dask computation
(文档中的代码:https://docs.dask.org/en/latest/diagnostics-distributed.html)
更新:还有一个用于 dask 的专用插件来记录每个任务的最小/最大内存使用量:https://github.com/itamarst/dask-memusage
更新 2:有一篇不错的博客文章,其中包含 dask 跟踪内存使用情况的代码:https://blog.dask.org/2021/03/11/dask_memory_usage
【讨论】:
scheduler_info() 更新性质的函数?
client.scheduler_info() 是一个包含每个工作人员的内存/任务的字典,所以我会不时将该字典转储为 json 行日志(稍后检查)或者创建一个新字典,将每个工作人员的内存设置为零,然后用每个工作人员的最高观察值更新该字典。是每 X 秒更新一次字典还是在特定调用函数后更新字典取决于您的具体情况...