我们如何在 dask 分布式中为每个工作人员选择 --nthreads 和 --nprocs?
Posted
技术标签:
【中文标题】我们如何在 dask 分布式中为每个工作人员选择 --nthreads 和 --nprocs?【英文标题】:how do we choose --nthreads and --nprocs per worker in dask distributed? 【发布时间】:2018-08-30 14:40:42 【问题描述】:我们如何在 Dask 分布式中为每个工作人员选择 --nthreads
和 --nprocs
?我有 3 名工人,2 名工人有 4 个核心,每个核心有一个线程,1 个工人有 8 个核心(根据每个工人的lscpu
Linux 命令的输出)。
【问题讨论】:
【参考方案1】:这取决于你的工作量
默认情况下,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 的 Global解释器锁 (GIL)。
但是,如果您将大部分计算时间花费在处理纯 Python 对象(如字符串或字典)上,那么您可能希望通过拥有更多进程和更少线程来避免 GIL 问题
dask-worker ... --nprocs 8 --nthreads 1
基于基准测试,您可能会发现更平衡的拆分更好
dask-worker ... --nprocs 4 --nthreads 2
使用更多进程可以避免 GIL 问题,但会因进程间通信而增加成本。如果您的计算需要大量的工作间通信,您可能希望避免许多进程。
【讨论】:
以上是关于我们如何在 dask 分布式中为每个工作人员选择 --nthreads 和 --nprocs?的主要内容,如果未能解决你的问题,请参考以下文章