Dask、Joblib、ipyparallel 和其他任务调度器用于并行问题

2024-06-01 13:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个Python/Cython/C混合代码(对于本例,我使用github.com/tardis-序列号/塔迪斯。。但是对于其他代码,我有更多这样的问题),这是内部OpenMP视差化的。它提供了一个函数,它接受一个参数字典,并在几百秒内计算出一个运行在~8个核心上的对象(result=fun(paramset, calibdata),其中paramset是dict,result是一个对象(基本上是pandas和numpy数组的集合),calibdata是预加载的pandas数据帧/对象)。它使用标准的Python日志记录功能进行日志记录。在

我想要一个python框架,它可以在SLURM/TORQUE/上使用fun轻松计算~10-100k个参数集。。。群集环境。 理想情况下,该框架将自动生成worker(给定每个工作线程有几个内核的可用性)并在worker之间分配参数集(不同的参数集需要不同的时间)。最好能看到每个参数集和日志(如果失败、完成或正在运行)的状态(in_queue,running,finished,failed)。在

如果它能跟踪完成的内容和需要完成的任务,以便在调度程序任务失败时重新启动它,那就更好了。如果这看起来像是集成到jupyter笔记本中并在本地运行以进行测试,那就太好了。在

我尝试过dask,但这似乎不会使任务排队,而是使用client.map(fun, [list of parameter sets])同时运行它们。也许有更好的工具,或者这是一个非常利基的问题。我也不清楚dask、joblib和ipyparallel之间的区别(在不同的阶段很快尝试了这三种方法)。在

如果事情不清楚,很乐意提供更多信息。在

更新:所以dask似乎提供了我所需要的一些功能,但是除了dask之外,处理OpenMP并行化代码并不简单-请参阅问题https://github.com/dask/dask-jobqueue/issues/181


Tags: 对象代码githubcompandas参数环境记录