我们如何在Dask分发中选择--threads和--nprocs每个工人?我有3个工作人员,4个核心,每个核心一个线程,2个工作人员和8个核心,1个工作者(根据每个工人的'lscpu'Linux命令的输出)
答案 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问题,但会增加由于进程间通信而产生的成本。如果您的计算需要大量的工作人员间沟通,您可能希望避免许多进程。