【问题标题】:Memory issue in dask with using local cluster使用本地集群的 dask 内存问题
【发布时间】:2021-08-07 15:28:46
【问题描述】:

我正在尝试使用 Dask 本地集群来管理系统范围的内存使用情况,

from dask.distributed import Client, LocalCluster
cluster = LocalCluster(scheduler_port=5272, dashboard_address=5273,memory_limit='4GB')

我与:

client = Client('tcp://127.0.0.1:5272')

我有 8 个内核和 32 GB。本地集群将 4GB * 4 = 16GB 内存(我有另一个需要大约 10GB 内存的任务)分配到本地集群。但是,以前有一些任务我可以在不调用client = Client('tcp://127.0.0.1:5272') 的情况下完成。在我调用client = Client('tcp://127.0.0.1:5272') 后,触发了内存错误。在这种情况下我能做什么?谢谢!

我在想是不是因为每个工作人员只分配了 4GB 内存……但是如果我分配 memory_limit='16GB'。如果它使用所有资源,则需要 64GB。我没有那么多记忆。我能做什么?

【问题讨论】:

    标签: memory dask dask-distributed


    【解决方案1】:

    目前尚不清楚您要达到什么目的,但您对记忆的观察是正确的。如果工作人员受到内存的限制,那么他们将无法完成任务。有什么办法解决这个问题?

    • 访问更多资源,如果您无法访问其他硬件,那么您可以查看 curled.io 或查看各种 dask 云选项

    • 优化你的代码,也许一些计算可以在更小的块中完成,数据可以被压缩(例如分类 dtype)或者有其他机会减少内存需求(实际上取决于函数,但假设一些内部计算可能是以更少的资源以更小的精度完成)

    • 通过非分布式代码使用所有可用资源(这会增加资源需求的一些开销)。

    【讨论】:

    • 感谢您的回答,所以实际上这个特定任务可能需要大约 5GB。对于本地集群,我实际上总共分配了 16GB,尽管每个工作人员只分配了 4GB。理论上还是可以完成任务的……如果将来我有一台96核256GB的机器,我想限制“max_dask_usage”为200GB,那么每个worker只有2GB内存…… .?您是否看到我可以立即使用任何方法来约束“max_dask_usage”并完成此任务?非常感谢您的帮助!
    • 内存使用很棘手,您可能需要一个内存分析器,例如对于 pandas,建议内存是数据帧大小的 4-5 倍...
    • 在我目前的情况下?是否可以将最大内存设置为总共 16GB 和最大核心 =8,同时允许 1 个工作人员占用所有 16GB 内存?
    • 一般来说是的,虽然我不知道让一名工人使用所有资源是否有优势......这可能是相关的:stackoverflow.com/a/49407253/10693596
    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多