【发布时间】: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 吗?对于两个工人一起?还是针对每个线程?
我的问题的部分原因是运行 LocalCluster 与 n_workers=1 和 memory_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