dask,joblib,ipyparallel和其他调度程序来解决令人尴尬的并行问题

时间:2019-01-31 21:02:19

标签: python ipython dask joblib dask-distributed

这是一个关于如何在科学环境中使用python“调度程序”运行“令人尴尬的并行”问题的更笼统的问题。

我有一个Python / Cython / C混合代码(在此示例中,我使用的是github.com/tardis-sn/tardis ..但是对于其他代码,我有更多此类问题),在内部将OpenMP并行化。它提供了一个函数,该函数需要一个参数字典,并且可以在数百个秒内在约8个内核上运行(result=fun(paramset, calibdata),其中paramset是字典,result是一个对象,然后对一个对象求值(基本上是熊猫和numpy数组的集合),而calibdata是预加载的熊猫数据帧/对象。它使用标准的Python日志记录功能进行记录。

我想要一个Python框架,可以在SLURM / TORQUE / ...集群环境中使用fun轻松评估约10-100k个参数集。 理想情况下,此框架将自动生成工作程序(具有多个核心的可用性)并在工作程序之间分配参数集(不同的参数集花费不同的时间)。很高兴看到每个参数集的状态(in_queue,运行中,完成,失败)以及日志(如果失败,完成或正在运行)。

如果它跟踪完成的事情和需要完成的事情,那将是很好的选择,以便在调度程序任务失败时可以重新启动它。如果将它无缝集成到jupyter笔记本中并在本地运行以进行测试,那就太好了。

我已经尝试过dask,但这似乎并不使任务排队,而是与client.map(fun, [list of parameter sets])一起一次运行它们。也许有更好的工具,或者这是一个非常特殊的问题。我也不清楚dask,joblib和ipyparallel之间有什么区别(已经在不同阶段快速尝试了这三个方法)。

如果事情不清楚,愿意提供其他信息。

更新:所以dask似乎提供了我所需要的某些功能-但是除了进行敏捷操作外,处理OpenMP并行化代码也不是一件容易的事-请参阅问题https://github.com/dask/dask-jobqueue/issues/181

0 个答案:

没有答案