Dask客户在工作期中更改员工人数

问题描述

我在使用dask读取的不同文件中有一个相当大的数据集,其后是一个我想使用dask作为并行后端的机器学习任务。 我注意到,使用工作人员数量更多的客户端(而不是具有多个线程的工作人员),读文件的速度要快得多。但是,它们各自的内存份额太小而无法处理ML任务。因此,我想将我的工作线程数更改为1,并为该新的唯一工作线程分配最大可能的线程数。有没有办法在不完全关闭并重新启动客户端的情况下完成此操作?

我调查了docs,但找不到任何用处。也很高兴能提示您下次是否需要查找此类信息。

这是我当前代码的示例:

from dask.distributed import Client
import dask.dataframe as dd
from sklearn.linear_model import LogisticRegression
from joblib import parallel_backend

client = Client(n_workers=4,threads_per_worker=2)
df = dd.read_hdf(path_to_file_dir,'/data')
feats = df['feats'].compute()
labels = df['labels'].compute()
dummy = LogisticRegression()
with parallel_backend('dask'):
    dummy.fit(feats,labels)  # FAILS bc of too high memory consumption

解决方法

您可以根据需要手动创建Worker / Nanny类,或使用SpecCluster类进行更细粒度的控制。但是,这些通常由开发人员使用,并且可能不那么用户友好。