您认为它可能与网络流量或共享资源(如Lustre文件系统本身或高速互连)有关吗?
问题是在我的代码中,在我计算RMSD的函数中,没有其他任何事情可做。这意味着我真的没理由为什么一个进程在完成任务后应该等待这么多(大约61s)。此外,我期望看到所有进程都具有相同的时间,因为我的任务是愉快的并行,并且所有进程都有相同的工作量。 我在想这可能是调度程序的开销?你认为Scheduler会导致这种开销吗?
另外,我使用的是三个节点,每个节点有24个核心。我通过在一个节点中创建Dask-scheduler并在每个节点上创建24个Dask-workers来设置我的网络。然后在我的代码中,我有一个循环,我更改了进程数(从1-72)和每个N_processes的度量性能。例如,如果我使用54个进程运行我的代码,那么剩下的就是空闲(什么都不做)。 你认为这可能会导致问题或一些开销吗?
提前致谢,
Mahzad Khoshlessan 研究助理 亚利桑那州立大学 生物物理中心和物理系
Hello Mahzad,
我无法告诉你为什么你的功能在不同时间运行。 Dask实际上与这些函数需要多长时间无关,它只是将您的函数发送给一个worker,在一个线程中运行它,让它运行直到它完成,然后让事情通知事情。也许你的代码中有一些不确定性?也许这取决于一些外部资源?也许有时需要一段时间?我对MDAnalysis项目了解不多。
然而,让自己对计算中的不确定性具有鲁棒性的一种有用方法是提交比核心更多的任务。这将允许Dask适当地进行负载平衡,涵盖某些任务需要比预期更长的时间。
此外,这个邮件列表似乎还没有真正维护。对于Dask问题,我个人检查github问题和堆栈溢出。见http://dask.pydata.org/en/latest/support.html
最佳, 马修
2017年3月10日星期五下午2:27,Mahzad Khoshlessan写道:
所有
我正在做一些基准测试,我使用了一个用Dask库实现的MapReduce并行化方案来并行化MDAnalysis库中的RMSD拟合函数。当我使用Dask.multiprocessing调度程序在单个节点上尝试它时,我能够获得非常好的加速,但是我无法通过3个节点的分布式调度程序加速。在这里,我将解释这个问题。我在代码中测量了RMSD函数的IO时间和计算时间。我还测量了总的作业执行时间。查看使用分布式调度程序计算的结果,我注意到在我的一些测试中,(计算时间+ IO时间)和总作业执行时间存在差异。当我根据(计算时间+ IO时间)计算加速时,我们获得了非常好的加速;当我根据总的工作执行时间计算它时,我的速度非常快。为了了解这种差异的来源,我使用Dask的Web界面来监控低级别的任务。
我们的任务是愉快的并行,所有流程都有相同的工作量。此外,我每个进程使用一个线程。在这里,我展示了我们在SDSC Comet上分别为54个流程和30个流程做的测试。第二列显示使用的进程数,第三列显示在我们的代码中测量的(计算时间+所有进程平均的IO时间),第四列显示在我们的代码中测量的Max(计算时间+ IO时间),显示最慢的过程,第六列显示使用Web界面测量的最大值(计算时间+ IO时间),最后一列是总作业执行时间。
正如您在表中所见(此处附加),所有进程的平均值(计算时间+ IO时间)与最大值(计算时间+ IO时间)之间存在差异。我的问题是,为什么会出现这种情况,因为所有流程都有相同的工作量。此外,对于54个进程的情况,Web界面显示其中一个进程比其他进程慢得多(最大计算时间+ IO时间= 104.25)并且基于我们代码中的度量(最大计算时间+ IO时间= 43.58)。这意味着在进程完成其计算和IO之后,它正在等待其他内容。我无法理解为什么这个过程与其他过程相比太慢了。在Dask.distributed中有更多经验的人是否知道可能是什么原因?为什么我从Dask获得糟糕的表现? 谢谢,