【问题标题】:Dask Distributed - Plugin for Monitoring Memory UsageDask Distributed - 用于监控内存使用的插件
【发布时间】:2021-05-10 07:09:17
【问题描述】:

我有一个分布式 Dask 集群,我通过 Dask 分布式客户端向它发送大量工作。

在发送一堆工作结束时,我很想得到一份报告或其他东西,告诉我每个工作人员的最大内存使用量是多少。

这可以通过现有的诊断工具实现吗? https://docs.dask.org/en/latest/diagnostics-distributed.html

谢谢! 最好的,

【问题讨论】:

    标签: dask dask-distributed


    【解决方案1】:

    特别是对于内存,可以使用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'吗?这会给任何给定的工人带来峰值记忆吗?您如何建议我编写一个持续监控scheduler_info() 更新性质的函数?
    • 啊,好的,所以client.scheduler_info() 是一个包含每个工作人员的内存/任务的字典,所以我会不时将该字典转储为 json 行日志(稍后检查)或者创建一个新字典,将每个工作人员的内存设置为零,然后用每个工作人员的最高观察值更新该字典。是每 X 秒更新一次字典还是在特定调用函数后更新字典取决于您的具体情况...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2011-04-30
    • 2011-07-10
    相关资源
    最近更新 更多