我们如何选择--nthreads
and --nprocs
Dask 中每个工人的分布情况?我有 3 个工作线程,2 个工作线程有 4 个核心,每个核心有一个线程,1 个工作线程有 8 个核心(根据输出lscpu
每个worker上的Linux命令)。
这取决于你的工作量
默认情况下,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 全局解释器锁 (GIL) 的影响。
但是,如果您将大部分计算时间都花在操作纯 Python 对象(例如字符串或字典)上,那么您可能希望通过使用更多的进程(每个进程的线程数更少)来避免 GIL 问题
dask-worker ... --nprocs 8 --nthreads 1
根据基准测试,您可能会发现更平衡的分割更好
dask-worker ... --nprocs 4 --nthreads 2
使用更多进程可以避免 GIL 问题,但会因进程间通信而增加成本。如果您的计算需要大量的工作人员间通信,您会希望避免许多进程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)