【问题标题】:HPC clusters running serial jobs运行串行作业的 HPC 集群
【发布时间】:2013-08-22 23:09:12
【问题描述】:

我有一个在集群的单个核心上运行的脚本。每个串行作业都是独立的。我用来运行的集群每次 qsub 时都会分配一个核心,因此它假定 ppn=1,然后其他人都可以使用其他核心。我只是通过循环 qsub 来提交我想要运行的串行作业的数量。

但是,我们使用的另一个集群会自动为每个用户分配一个节点(他们已将其设置为节点是最小的单元而不是核心)。每个节点有 16 个核心。如果我然后提交我的脚本,它被分配了所有 16 个内核,但它只运行一项工作。因此,我想知道如何运行脚本并使其使用所有 16 个内核?

我想到的一个想法是使用另一个循环我当前脚本的脚本来运行并发作业,如下所示:

对于 {1..16} 中的 i 做 ./[我的脚本] & 完毕 等等

然后我用nodes=1,ppn=16 qsub 这个。然后我认为这会产生 16 个进程,但我不知道它实际上是在使用所有 16 个内核还是一个试图运行所有 16 个进程的内核。哪个是对的?这样做也比我的旧方法慢了大约 40%(这两种方法都在旧集群上测试过)。有没有更好的方法?

提前致谢。

【问题讨论】:

    标签: concurrency cluster-computing


    【解决方案1】:

    当您说“16 个副本”方法运行速度慢 40% 时,您指的是从旧集群中获取的时间,即在一个核心上运行 16 个副本。它并不直接表明在 16 个内核上运行 16 个副本会更慢。

    您建议的脚本看起来不错,应该利用所有 16 个内核,当然,如果您的作业是可变运行时的(即 16 个中的 15 个可能在 5 分钟内完成,但 1 个运行几个小时)那么你仍然会有大量未使用的周期。如果这可能会产生影响,您将需要更加复杂,并有一些循环和生成过程,直到完成更大的工作集。或者您可以从 1 个脚本中启动 ALL 您想要的进程(因此您可能有 60 个或任何批次在 16 个处理器上同时运行)并让操作系统安排它们,这会减慢速度,也许不会很多,你上面的数字从 16 上 1 个核心只给出了 40% 的减速 建议 这仍然会让你 60% 以上的利用率达到 256 个工作。

    无论您做什么,请确保您使用集群监控软件来确保真实、已实现的 cpu 利用率符合您的预期。

    【讨论】:

    • 糟糕,抱歉,关于 40% 的减速,这与在旧集群上使用 ppn=16 发送我的脚本有关,因此它分配了 16 个核心,而不仅仅是一个分配给作业,然后我产生了 16 个进程,所以这就是它应该在新集群上的方式。我只是想测试这两种方法的速度,但由于我的旧方法在新集群上不起作用,我在旧集群上使用这两种方法。希望这是有道理的。你说的对,这些工作需要不同的时间,我需要考虑一下如何优化它。
    • 好的,您是否将核心 * 运行时间作为衡量标准?如果是这样,他们 40% 可能只是由于上述时间差异,即 16 核版本是 16 *longest_run vs (sum(runtimes) = 16*avg_run)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多