【问题标题】:dask: What does memory_limit control?dask:memory_limit 控制什么?
【发布时间】:2021-11-24 12:32:33
【问题描述】:

在dask的LocalCluster中,有一个参数memory_limit。我在文档 (https://distributed.dask.org/en/latest/worker.html#memory-management) 中找不到有关限制是针对每个工作人员、每个线程还是针对整个集群的详细信息。这可能至少部分是因为我无法理解关键字是如何传递的。

例如,在这段代码中:

cluster = LocalCluster(n_workers=2,
                       threads_per_worker=4,
                       memory_target_fraction=0.95,
                       memory_limit='32GB')

每个工作人员需要 32 GB 吗?对于两个工人一起?还是针对每个线程?

我的问题的部分原因是运行 LocalClustern_workers=1memory_limit=32GB,但它因使用过多内存而被 Slurm Out-Of-Memory 杀手杀死。

【问题讨论】:

  • 您发布的链接明确表示这是每个工作人员的限制$ dask-worker tcp://scheduler:port --memory-limit="4 GiB" # four gigabytes per worker process. 如果您达到 95% 的 RAM 使用率,您将终止该进程。
  • 您链接到的文档讨论了command-line options for dask-worker。您的代码 sn-p 使用关键字参数memory_limit,我认为这是不同的。你也对这不在list of parameters for LocalCluster 中是正确的。 FWIW,看起来这个关键字参数设置了整个集群的内存限制。使用 client = Client(cluster); client 显示每个工作人员有 16GB 的总内存
  • rpanai,感谢您指出这一点-您是对的,该评论表明内存限制是每个工人的,但 Pavithra 的评论表明该评论不适用于关键字参数-因此我的困惑。另外,我相信memory_target_fraction 不是杀死任务的分数;那是distributed.workers.memory.terminate(不能作为关键字参数访问)
  • 您评论的第二部分,围绕memory_target_fraction 与此问题没有直接关系。我建议为那个打开一个单独的问题:)
  • 仅供参考,我在这里创建了一个问题:github.com/dask/dask/issues/8224,确认后我会分享这个问题的答案!

标签: python dask dask-distributed


【解决方案1】:

LocalCluster 的 memory_limit 关键字参数设置每个工作人员的限制。

相关文档:https://github.com/dask/distributed/blob/7bf884b941363242c3884b598205c75373287190/distributed/deploy/local.py#L76-L78

注意,如果给定的 memory_limit 大于可用内存,则会为每个 worker 设置总可用内存。尚未记录此行为,但此处存在相关问题:https://github.com/dask/dask/issues/8224

带有代码的集群截图:

from dask.distributed import LocalCluster, Client
cluster = LocalCluster(n_workers=2,
                       threads_per_worker=4,
                       memory_target_fraction=0.95,
                       memory_limit='8GB')
client = Client(cluster)
client

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多