【问题标题】:Run independent jobs in parallel on multiple servers, with load balancing在多台服务器上并行运行独立作业,并具有负载平衡
【发布时间】:2015-01-23 13:57:02
【问题描述】:

我有一些在集群上并行运行的数字运算作业。现在,我正在使用make -j 在一台计算机上运行多个作业,同时提供一些负载平衡——一些作业可能比另一个更快地完成。当扩展到多台机器时,我只是将作业数量平均分配给几个 makefile,盲目地希望每个 makefile 花费大致相等的时间来完成。

现在,我的问题是 - 有没有一种简单的方法可以在 M 台机器上并行运行 N 个独立作业,同时提供全局负载平衡?

我在一个安装了 PBS 的 Linux (Bullx) 集群上,并且还有 GNU 并行(虽然我从未使用过那个,在我看来它不会在计算节点之间进行负载平衡,阅读手册后)。

【问题讨论】:

    标签: shell parallel-processing makefile pbs


    【解决方案1】:

    假设您有N 工作、M 机器和K 核心,其中M*K < N。您可以将所有作业提交给 PBS,并在旧作业完成后立即安排新作业。虽然如果N 很大(> 10000),PBS 可能会带来很大的开销。

    【讨论】:

    • 该死的,是的,这既聪明又简单。无法想象为什么我没有想到这一点。但是,我们的 PBS 有时需要一些时间来启动新任务(最多说 20 分钟;它是一个国家超级计算中心,所以我们有很多人使用它),并且每个用户限制为 1000 个计划任务,目前是少于我需要启动。但无论如何都很棒,我很惭愧我什至没有想到这一点。
    【解决方案2】:

    在我看来,您需要 Jenkins 和 Multijob 插件之类的东西。 它将有效地让你做你在那里要求的事情。

    这里有一些额外的信息:https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin

    【讨论】:

      【解决方案3】:

      GNU Parallel 可以平衡异构集群上的作业:如果一台主机有 4 核,另一台主机有 64 核,GNU Parallel 将默认在小型机器上生成 4 个作业,在大型机器上生成 64 个作业,并保留 4(和 64 ) 作业在这些机器上运行,直到所有作业都运行完毕。

      这应该比简单地使用 makefile 好得多。

      【讨论】:

      • 好的,那么您将如何使用 GNU 并行调度这样的作业?你能发布一个简短的例子吗?我以前从未使用过 GNU 并行。
      • 阅读示例gnu.org/software/parallel/… 并浏览教程gnu.org/software/parallel/parallel_tutorial.html 您的命令行会因此而爱上您。远程执行部分与您最相关。
      • 在发布我的问题之前,我已经阅读了这些教程。我真的不明白如何运行不同的工作。我知道如何在多台主机上运行相同的命令,但我不明白这将如何促进负载平衡?
      • parallel -S $SERVER1,$SERVER2 'sleep {};echo {}' ::: {1..1000}; 这将检测每台服务器上的 CPU 数量,并且只在每台服务器上运行那么多作业。如果您想运行完全不同的作业(而不仅仅是改变参数):cat commands | parallel -S $SERVER1,$SERVER2; 如果仍然不清楚,请编辑您的问题以显示至少 3 个您想要运行的作业。
      • 我会在集群上试一试,看看它是如何工作的。感谢您的努力。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      相关资源
      最近更新 更多