【问题标题】:What are some scenarios for which MPI is a better fit than MapReduce?MPI 比 MapReduce 更适合哪些场景?
【发布时间】:2010-12-04 13:38:27
【问题描述】:

据我了解,MPI 让我能够更好地控制集群中不同节点的通信方式。

在 MapReduce/Hadoop 中,每个节点进行一些计算,与其他节点交换数据,然后整理其分区结果。看起来很简单,但是由于您可以迭代该过程,因此即使是 K-means 或 PageRank 等算法也非常适合该模型。在具有调度局部性的分布式文件系统上,性能显然不错。相比之下,MPI 让我可以明确控制节点如何相互发送消息。

谁能描述一个集群编程场景,其中更通用的 MPI 模型比更简单的 MapReduce 模型具有明显优势?

【问题讨论】:

    标签: parallel-processing distributed mapreduce mpi


    【解决方案1】:

    几乎所有的科学代码——有限差分、有限元素等。哪种类型会导致循环答案,即任何不容易映射到 MapReduce 的分布式程序都可以使用更通用的 MPI 模型更好地实现。不确定这对您有多大帮助,我会在发布此答案后立即投反对票。

    【讨论】:

    • 谢谢,马克(无需反对)。你的意思是迭代算法在 MPI 中更有效,因为在 MapReduce 中它们必须通过一系列作业来实现?显然,至少对于某些迭代算法而言,MapReduce 具有可接受的性能。
    • 并非如此。我在考虑诸如有限差分求解器之类的计算,其中单个进程(在单个处理器上)计算整个域的一部分,然后交换光环信息,然后进行计算。我发现很难看出这将如何映射到 MapReduce。
    • 在 MapReduce 中,它是由多个作业实现的。每个 MapReduce 作业的形式是:计算结果,然后交换它们。多个作业可以实现多个“交换”。调度的局部性,调度下一次作业迭代,使每个任务读取上一个作业中的一个任务写入本地节点的数据,从而降低多轮作业的成本。
    • 嗯,我得再仔细看看 MapReduce。然而,使用 MapReduce 降低性能的一个原因可能是计算与通信的严格顺序。使用 MPI,我们非常努力(通常没有太大的成功)将它们重叠。
    • 与计算重叠的通信主要是一个神话。昂贵的网络可以做到这一点(它们使用 DMA),但通常 CPU 涉及打包缓冲区。我们还没有非阻塞集合体(尽管这可能会进入 MPI-3),这是可以有意义地执行大量计算的用例。 MPI 是一种更通用且性能更高的模型,MapReduce 提供了一种方便的抽象,对于算法的“并行”部分几乎微不足道的用例具有更好的容错能力。
    【解决方案2】:

    虽然这个问题已经回答了,但我想补充/重申一个非常重要的观点。

    MPI 最适合需要大量进程间通信的问题。

    当数据变得很大(PB 级,有人知道吗?)并且几乎没有进程间通信时,MPI 就会变得很痛苦。之所以如此,是因为进程将花费所有时间相互发送数据(带宽成为限制因素)并且您的 CPU 将保持空闲状态。也许更大的问题是读取所有数据。

    这是拥有像 Hadoop 这样的东西的根本原因。数据也必须是分布式的——Hadoop分布式文件系统!

    简而言之,MPI 适合任务并行,Hadoop 适合数据并行。

    【讨论】:

    • 这有点不准确。 MPI 的主要关注点是域分解算法,这是一个高度数据并行的域,但在子域之间有一些通信。数据也可以使用 MPI 存储在本地。当通信模式具有一定的局部性并且您需要降低低延迟时,MPI 非常有用。当容错比绝对性能更重要时,MapReduce/Hadoop 非常好。
    【解决方案3】:

    我能想到的最佳答案是 MPI 在以下两种情况下优于 MapReduce:

    1. 用于短任务而不是批处理。例如,MapReduce 不能用于响应单个查询 - 每个作业预计需要几分钟。我认为在 MPI 中,您可以构建一个查询响应系统,机器相互发送消息以路由查询并生成答案。

    2. 对于作业节点需要比迭代 MapReduce 作业支持的通信更多,但不要太多,以免通信开销使计算不切实际。不过,我不确定这种情况在实践中发生的频率。

    【讨论】:

    • map reduce 任务也可能需要几毫秒,没有要求一定要花几分钟
    【解决方案4】:

    我希望 MPI 在任务迭代与处理器缓存大小相当的数据集时轻松击败 MapReduce,并且经常需要与其他任务进行通信。许多科学领域分解并行化方法都适合这种模式。如果 MapReduce 需要顺序处理和通信,或者进程结束,那么处理缓存大小问题所带来的计算性能优势就会丧失。

    【讨论】:

      【解决方案5】:

      当您使用的计算和数据具有不规则行为时,通常会转化为对象之间的许多消息传递,或者当您需要低级别硬件级别访问时,例如RDMA 然后 MPI 更好。在您在这里看到的一些答案中,提到了任务延迟或内存一致性模型,Spark 之类的框架或 AKKA 之类的 Actor 模型已经表明它们可以与 MPI 竞争。最后,人们应该考虑到 MPI 多年来一直是开发科学计算所需库的主要基础(这是使用 DAG/MapReduce 模型的新框架中最重要的缺失部分)。

      总而言之,我认为 MapReduce/DAG 模型带来的好处,如动态资源管理器和容错计算,将使它们在科学计算组中变得可行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-08
        • 2013-08-25
        • 2012-01-15
        • 2011-05-19
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        • 2019-02-11
        相关资源
        最近更新 更多