首页 > 解决方案 > 管理 dask localcluster 上的 worker 内存

问题描述

我正在尝试使用 dask 加载数据集,但是当需要计算我的数据集时,我不断遇到这样的问题:

警告 - Worker 超出了 95% 的内存预算。重新启动。

我只是在我的本地机器上工作,启动 dask 如下:

if __name__ == '__main__':
    libmarket.config.client = Client()  # use dask.distributed by default

现在,在我的错误消息中,我不断看到对“memory_limit=”关键字参数的引用。但是,我已经彻底搜索了 dask 文档,但我无法弄清楚如何在单机配置中增加血腥的工人内存限制。我有 256GB 的 RAM,在将其转换回 pandas 数据帧之前,我将删除大部分未来的列(一个 20GB 的 csv 文件),所以我知道它会适合内存。我只需要从我的代码中增加每个工作人员的内存限制(不使用 dask-worker),以便我可以处理它。

请有人帮助我。

标签: pythonpandasdask

解决方案


参数memory_limit可以提供给 和的__init()__函数。ClientLocalCluster

一般说明

只是调用Client()是第一次调用的快捷方式LocalCluster(),然后Client是创建的集群(Dask:Single Machine)。在Client没有 的实例的情况下LocalCluster调用时,可以将 的所有可能参数LocalCluster.__init()__提供给 的初始化调用Client。因此,该参数memory_limit(以及其他参数,例如n_workers)未记录在Client该类的 API 文档中。

但是,该论点memory_limit似乎没有正确记录在LocalCluster(请参阅 Dask GitHub 问题#4118)的 API 文档中。

解决方案

一个工作示例如下。我添加了更多参数,这可能对人们找到这个问题/答案很有用。

# load/import classes
from dask.distributed import Client, LocalCluster

# set up cluster and workers
cluster = LocalCluster(n_workers=4, 
                       threads_per_worker=1,
                       memory_limit='64GB')
client = Client(cluster)

# have a look at your workers
client

# do some work
## ... 

# close workers and cluster
client.close()
cluster.close()

捷径是

# load/import classes
from dask.distributed import Client

# set up cluster and workers
client = Client(n_workers=4, 
                threads_per_worker=1,
                memory_limit='64GB')

# have a look at your workers
client

# do some work
## ... 

# close workers and cluster
client.close()

进一步阅读


推荐阅读