gpt4 book ai didi

dask - 设置 Dask Worker 数量的最佳实践

转载 作者:行者123 更新时间:2023-12-02 13:22:49 24 4
gpt4 key购买 nike

在集群上设置工作线程时,我对 dask 和 dask.distributed 中使用的不同术语感到有点困惑。

我遇到的术语是:线程、进程、处理器、节点、工作线程、调度程序。

我的问题是如何设置每个的数量,以及它们之间是否存在严格或推荐关系。例如:

  • 每个节点 1 个工作线程,节点上的 n 个核心有 n 个进程
  • 线程和进程是同一个概念吗?在 dask-mpi 中,我必须设置 nthreads,但它们在客户端中显示为进程

还有其他建议吗?

最佳答案

人们所说的“节点”通常是指物理机或虚拟机。该节点可以同时运行多个程序或进程(就像我的计算机可以同时运行网络浏览器和文本编辑器一样)。每个进程可以在其内部与多个线程并行。进程具有隔离的内存环境,这意味着在进程内共享数据是免费的,而在进程之间共享数据是昂贵的。

通常,如果将较大的节点(例如 36 个核心)分成几个进程,每个进程都有多个线程,那么在较大的节点(例如 36 个核心)上效果最好。您希望进程数乘以线程数等于核心数。例如,您可以对 36 核机器执行如下操作:

  • 四个进程,每个进程有九个线程
  • 十二个进程,每个进程三个线程
  • 一个进程有 36 个线程

通常,人们会根据工作负载在这些选择之间做出决定。这里的差异是由于 Python 的全局解释器锁造成的,它限制了某些类型数据的并行性。如果您主要使用 Numpy、Pandas、Scikit-Learn 或 Python 中的其他数值编程库,那么您无需担心 GIL,并且您可能更喜欢每个进程都有多个线程。这很有帮助,因为它允许数据在核心之间自由移动,因为它们都存在于同一个进程中。但是,如果您主要进行纯 Python 编程,例如处理文本数据、字典/列表/集合,以及在紧密的 Python for 循环中进行大部分计算,那么您会更喜欢拥有多个进程,每个进程只有几个线程。这会产生额外的通信成本,但可以让您绕过 GIL。

简而言之,如果您主要使用 numpy/pandas 风格的数据,请尝试在一个进程中获得至少八个线程左右。否则,也许一个进程中只使用两个线程。

关于dask - 设置 Dask Worker 数量的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51099685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com