每个节点或每个工作人员是否存在广播变量?
Do broadcasted variables exist per node or per worker?
上下文:
- 我们有大量计算都需要相同的大型不可变数据结构(矩阵)作为输入。
- 为了使这个数据结构跨节点可用,我广播矩阵使用:
matrix_future = client.scatter(matrix, broadcast=True)
并将matrix_future
传递给计算图中的延迟函数需要它。这些功能在不同的节点上独立执行。
- (为了这个问题)假设我们有 3 个计算节点:node1 运行s 调度程序,node2 和 node3 运行 每个 10 个工作节点。
问题:
- 在计算节点上 运行连接工作节点(node2 和 node3):广播的数据结构在每个节点的内存中只存在一次,还是每个工作节点有一个副本,因此相同数据的 10 倍在节点的内存中(每个工作人员 1 个)?
- 如果它是共享的,它驻留在节点上的什么位置?是否有一些对象存储可以从工作人员访问?
提前致谢。
数据将存在于每个 dask worker 进程中。您将在每个节点上拥有十个副本。
任务工作者完全独立运作。他们不知道可能在同一节点上的其他工作人员。
相反,您可以考虑在具有十个线程的每个节点上创建一个单一的 dask worker。这通常是正确的选择,尤其是在处理大量数字数据时。
上下文:
- 我们有大量计算都需要相同的大型不可变数据结构(矩阵)作为输入。
- 为了使这个数据结构跨节点可用,我广播矩阵使用:
matrix_future = client.scatter(matrix, broadcast=True)
并将matrix_future
传递给计算图中的延迟函数需要它。这些功能在不同的节点上独立执行。 - (为了这个问题)假设我们有 3 个计算节点:node1 运行s 调度程序,node2 和 node3 运行 每个 10 个工作节点。
问题:
- 在计算节点上 运行连接工作节点(node2 和 node3):广播的数据结构在每个节点的内存中只存在一次,还是每个工作节点有一个副本,因此相同数据的 10 倍在节点的内存中(每个工作人员 1 个)?
- 如果它是共享的,它驻留在节点上的什么位置?是否有一些对象存储可以从工作人员访问?
提前致谢。
数据将存在于每个 dask worker 进程中。您将在每个节点上拥有十个副本。
任务工作者完全独立运作。他们不知道可能在同一节点上的其他工作人员。
相反,您可以考虑在具有十个线程的每个节点上创建一个单一的 dask worker。这通常是正确的选择,尤其是在处理大量数字数据时。