dask 分布式和工作窃取:如何整理具有 运行 两次的任务?
dask distributed and work stealing: how to tidy up tasks that have run twice?
Dask 分布式支持 work stealing,可以加快计算速度并使其更健壮,但是每个任务可以 运行 多次。
这里我要问的是"tidy up"工人的结果,他们对最终结果没有贡献。为了说明我的要求:
让我们假设,每个工作人员都在进行类似蒙特卡洛的模拟,并将 ~10GB 的模拟结果保存在结果文件夹中。在工作窃取的情况下,模拟结果将被存储多次,因此最好只保留其中一次。实现这一目标的最佳方法是什么? dask.distributed 能否在最终未对最终结果做出贡献的任务上自动调用一些 "tidy up" 过程?
编辑:
我目前使用以下代码开始模拟:
c = distributed.Client(myserver)
mytask.compute(get = c.get) #mytask is a delayed object
所以我猜,之后所有的数据都从集群中删除了,如果我"look at data that exists in multiple locations"在计算之后,我不能保证我能找到相应的任务?此外,我目前还不清楚如何将未来对象的 ID 映射到相应任务保存其结果的文件名。我目前依靠 tempfile 来避免名称冲突,考虑到 Monte Carlo 模拟的设置是迄今为止最简单的。
目前在 Dask 中被盗任务和未被盗任务之间没有区别。
如果需要,您可以查看存在于多个位置的数据,然后使用以下操作将命令直接发送给这些工作人员:
Dask 分布式支持 work stealing,可以加快计算速度并使其更健壮,但是每个任务可以 运行 多次。
这里我要问的是"tidy up"工人的结果,他们对最终结果没有贡献。为了说明我的要求:
让我们假设,每个工作人员都在进行类似蒙特卡洛的模拟,并将 ~10GB 的模拟结果保存在结果文件夹中。在工作窃取的情况下,模拟结果将被存储多次,因此最好只保留其中一次。实现这一目标的最佳方法是什么? dask.distributed 能否在最终未对最终结果做出贡献的任务上自动调用一些 "tidy up" 过程?
编辑: 我目前使用以下代码开始模拟:
c = distributed.Client(myserver)
mytask.compute(get = c.get) #mytask is a delayed object
所以我猜,之后所有的数据都从集群中删除了,如果我"look at data that exists in multiple locations"在计算之后,我不能保证我能找到相应的任务?此外,我目前还不清楚如何将未来对象的 ID 映射到相应任务保存其结果的文件名。我目前依靠 tempfile 来避免名称冲突,考虑到 Monte Carlo 模拟的设置是迄今为止最简单的。
目前在 Dask 中被盗任务和未被盗任务之间没有区别。
如果需要,您可以查看存在于多个位置的数据,然后使用以下操作将命令直接发送给这些工作人员: