我有一些数字运算工作,我在群集上并行运行。现在,我使用make -j
在一台计算机上运行多个作业,同时提供一些负载平衡 - 某些作业可能比另一个完成得更快。当扩展到多台机器时,我只是将作业数量均匀地划分为几个makefile,盲目地希望每个makefile大致相等的时间来完成。
现在,我的问题是 - 是否可以轻松地在M台机器上并行运行N个独立作业,而提供全局负载平衡?
我在安装了PBS的Linux(Bullx)集群上,并且还有GNU并行(虽然我从来没有使用过那个,但在我看来它不会在它之间进行负载平衡计算节点,通过阅读手册后)。
答案 0 :(得分:2)
假设您有N
个工作,M
个机器和K
核心M*K < N
。您可以将所有工作提交给PBS,并在旧工作完成后立即安排新工作。虽然如果N
很大(> 10000),PBS可能会带来很大的开销。
答案 1 :(得分:1)
听起来我需要像Jenkins和Multijob插件这样的东西。 它将有效地让你做你在那里要求的。
这里有一些额外信息:https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin
答案 2 :(得分:1)
GNU Parallel可以平衡异构集群上的作业:如果一个主机有4个核心而另一个有64个核心,GNU Parallel将默认在小型机器上生成4个作业,在大型机器上生成64个作业,并保留4个(和64个)在这些机器上运行的作业,直到所有作业都运行完毕。
这应该比简单地使用makefile好得多。