Parallel processing Dask性能差

Parallel processing Dask性能差,parallel-processing,benchmarking,dask,Parallel Processing,Benchmarking,Dask,您认为这可能与网络流量或共享资源(如Lustre文件系统本身或高速互连)有关吗 问题是,在我的代码中,在我计算RMSD的函数中,没有其他操作。这意味着我真的不明白为什么一个进程在完成任务后要等待这么久(大约61秒)。此外,我希望看到的是,所有进程都有相同的时间,因为我的任务令人愉快地并行,所有进程都有相同的工作量要做。 我在想这可能是调度程序的开销?您认为调度程序会导致这种开销吗 另外,我使用三个节点,每个节点有24个核心。我通过在一个节点中创建Dask调度程序和每个节点24个Dask工作者来设

您认为这可能与网络流量或共享资源(如Lustre文件系统本身或高速互连)有关吗

问题是,在我的代码中,在我计算RMSD的函数中,没有其他操作。这意味着我真的不明白为什么一个进程在完成任务后要等待这么久(大约61秒)。此外,我希望看到的是,所有进程都有相同的时间,因为我的任务令人愉快地并行,所有进程都有相同的工作量要做。 我在想这可能是调度程序的开销?您认为调度程序会导致这种开销吗

另外,我使用三个节点,每个节点有24个核心。我通过在一个节点中创建Dask调度程序和每个节点24个Dask工作者来设置网络。然后在我的代码中,我有一个循环,在这个循环中我更改进程的数量(从1到72),并度量每个N_进程的性能。例如,如果我用54个进程运行代码,那么其余的进程都是空闲的(什么也不做)。 您认为这会导致问题或一些开销吗

提前感谢,

马扎德·霍什莱桑 研究助理 亚利桑那州立大学 生物物理中心和物理系


你好,马扎德

我不能告诉你为什么你的函数运行了不同的时间。Dask实际上与这些函数需要多长时间无关,它只是将您的函数发送给一个工作线程,在线程中运行,让它一直运行到完成,然后将所发生的事情通知其他人。也许您的代码中有一些不确定性?也许这取决于外部资源?也许有时候只是需要一段时间?我对MDAnalysis项目了解不多

然而,使自己对计算中的不确定性具有鲁棒性的一个有用方法是提交比核心多得多的任务。这将允许Dask适当地进行负载平衡,以覆盖某些任务花费的时间超过预期的时间

而且,这个邮件列表似乎不再被维护。对于Dask问题,我亲自检查github问题和堆栈溢出。看

最好的, -马修

2017年3月10日星期五下午2:27,Mahzad Khoshlessan写道:

全部,

我正在做一些基准测试,我使用了一个用Dask库实现的MapReduce并行化方案来并行化MDAnalysis库中的RMSD拟合函数。当我使用Dask.multiprocessing scheduler在单个节点上进行尝试时,我能够获得非常好的加速,但在3个节点上使用分布式调度器时,我无法获得加速。在这里,我将解释这个问题。我在代码中测量了RMSD函数的IO时间和计算时间。我还测量作业执行的总时间。查看使用分布式调度器计算的结果,我注意到在我的一些测试中,(计算时间+IO时间)和总作业执行时间存在差异。当我根据(计算时间+IO时间)计算加速时,我们得到了非常好的加速;然而,当我根据总作业执行时间计算它时,我得到了非常糟糕的加速。为了了解这种差异的根源,我使用Dask的Web界面在底层监控任务

我们的任务是并行的,所有的过程都有相同的工作量要做。另外,我每个进程使用一个线程。这里我展示了我们在SDSC Comet上分别对54个进程和30个进程进行的测试。第二列显示使用的进程数,第三列显示代码中测量的(计算时间+所有进程的平均IO时间),第四列显示代码中测量的最大值(计算时间+IO时间),该值显示最慢的进程,第六列显示最大值(计算时间+IO时间)使用web界面测量,最后一列是作业执行总时间

正如您在表中所看到的(附在此处),所有进程的平均值(计算时间+IO时间)与最大值(计算时间+IO时间)之间存在差异。我的问题是,为什么会这样,因为所有流程都有相同数量的工作要做。此外,对于54个进程的情况,web界面显示其中一个进程比其他进程慢得多(最大计算时间+IO时间=104.25),并且基于我们代码中的度量(最大计算时间+IO时间=43.58)。这意味着在进程完成其计算和IO后,它正在等待其他内容。我无法理解为什么这个过程与其他过程相比太慢。在Dask.distributed方面有更多经验的人知道原因是什么吗?为什么我的Dask表现不佳? 谢谢