每个节点或每个工作者是否存在广播变量?

时间:2018-05-03 13:26:42

标签: dask dask-distributed

上下文

  • 我们有大量的计算都需要相同的大的不可变数据结构(矩阵)作为输入。
  • 为了在节点之间提供此数据结构,我使用:matrix_future = client.scatter(matrix, broadcast=True) 广播矩阵,并将matrix_future传递给需要它的计算图中的延迟函数。这些功能在不同的节点上独立执行。
  • (为了问题)让我们假设我们有3个计算节点:node1运行调度程序,node2和node3每个运行10个工作程序。

问题:

  • 在运行工作者的计算节点上(node2和node3):广播的数据结构在每个节点的内存中只存在一次,或者每个工作者是否有一个副本,因此节点中的数据是相同数据的10倍记忆(每个工人1个)?
  • 如果共享,它在哪里驻留在节点上?是否存在可以从工作人员那里访问的对象存储库?

提前致谢。

1 个答案:

答案 0 :(得分:1)

数据将存在于每个dask工作进程中。每个节点上有10个副本。

Dask工作人员完全独立运作。他们不知道可能在同一节点上的其他工作人员。

相反,您可以考虑在每个具有十个线程的节点上创建一个dask worker。这通常是正确的选择,特别是如果您正在处理大型数字数据。