在Dask分布式系统中,我们如何选择每个工作进程的“--nthreads”和“--nprocs”参数?

28
在 Dask 分布式中,如何选择每个 worker 的 --nthreads--nprocs?我有 3 个 workers,其中 2 个 workers 每个有 4 个核心和一个线程,1 个 worker 有 8 个核心(根据每个 worker 上 lscpu Linux 命令的输出)。请帮我解决这个问题。
1个回答

37

这取决于您的工作负载

默认情况下,Dask会创建一个单进程,并使用您的机器上的逻辑核心数(由multiprocessing.cpu_count()确定)来创建多个线程。

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

如果您主要进行数字工作负载(例如在Numpy、Pandas和Scikit-Learn代码中常见的)并且不受Python全局解释器锁(GIL)的影响,则使用较少的进程和多个线程每个进程是有好处的。

然而,如果您大部分计算时间都在操作纯Python对象(如字符串或字典),那么为避免GIL问题应使用更多进程,每个进程少一些线程。

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

根据基准测试,您可能会发现更平衡的分割效果更好。

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

使用更多的进程可以避免GIL问题,但会增加由于进程间通信而产生的成本。如果你的计算需要大量的进程间通信,那么你应该避免使用过多的进程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接