我们如何在dask分布中选择--threads和--nprocs每个worker?

时间:2018-03-21 12:59:18

标签: distributed-computing dask dask-distributed

我们如何在Dask分发中选择--threads和--nprocs每个工人?我有3个工作人员,4个核心,每个核心一个线程,2个工作人员和8个核心,1个工作者(根据每个工人的'lscpu'Linux命令的输出)

1 个答案:

答案 0 :(得分:9)

这取决于您的工作量

默认情况下,Dask会创建一个单个进程,其中包含与计算机上具有逻辑核心数一样多的线程(由multiprocessing.cpu_count()确定)。

dask-worker ... --nprocs 1 --nthreads 8  # assuming you have eight cores
dask-worker ...                          # this is actually the default setting

如果您主要使用 numeric 工作负载,那么每个进程使用少量进程和多个线程是很好的,例如在Numpy,Pandas和Scikit-Learn代码中很常见,这些代码不受Python的影响&# 39;全球口译员锁(GIL)。

但是,如果您花费大部分计算时间来操作纯Python对象(如字符串或字典),那么您可能希望通过使用更多线程来处理GIL问题

dask-worker ... --nprocs 8 --nthreads 1

根据基准测试,您可能会发现更平衡的拆分更好

dask-worker ... --nprocs 4 --nthreads 2

使用更多流程可以避免GIL问题,但会增加由于进程间通信而产生的成本。如果您的计算需要大量的工作人员间沟通,您可能希望避免许多进程。