dask:memory_limit 控制什么?

dask: What does memory_limit control?

在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 吗?两个工人在一起?还是针对每个线程?

我的问题的部分原因是 运行 a LocalCluster with n_workers=1 and memory_limit=32GB,但它被 Slurm Out-Of-Memory killer 杀死了使用内存太大。

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