【问题标题】:How to run binary executables in multi-thread HPC cluster?如何在多线程 HPC 集群中运行二进制可执行文件?
【发布时间】:2015-12-21 13:46:12
【问题描述】:

我有一个名为 cgatools 的工具,来自 complete genomics (http://cgatools.sourceforge.net/docs/1.8.0/)。我需要在高性能计算集群中运行一些基因组分析。我尝试运行分配超过 50 个内核和 250GB 内存的作业,但它只使用一个内核并将内存限制为小于 2GB。在这种情况下,我最好的选择是什么?有没有办法在 HPC 集群中运行二进制可执行文件,使其使用所有分配的内存?

【问题讨论】:

  • AFAICT,根据其文档,您的工具没有并行化。那你怎么提交呢?是什么让您期望它应该使用您分配给批处理作业的所有内核和内存?

标签: multithreading cluster-computing bioinformatics hpc pbs


【解决方案1】:

调度程序只是在分配的第一个节点上运行您提供的二进制文件。拆分作业并并行运行它的责任在于二进制文件。因此,您看到您正在使用分配的 50 个核心中的一个。

代码级别的并行化

您需要确保您作为作业提交到集群的二进制文件具有某种机制来理解分配的节点(与作业调度程序交互)和利用分配资源的机制(MPI、 PGAS 等)。

如果是并行化的,通过作业提交脚本(通过 mpirun/mpiexec 之类的包装器)提交二进制文件应该会利用所有分配的资源。

并行运行黑盒串行二进制文件

如果不是,唯一可能的跨资源的工作负载分配机制是数据并行模式,其中,您使用集群为同一个二进制文件提供多个输入并并行运行进程以有效减少解决所需的时间问题。

您可以根据每次运行所需的内存设置粒度。例如,如果每个进程需要 1GB 内存,则每个节点可以运行 16 个进程(假设 16 核和 16GB 内存等)

可以通过工具Parallel在单个节点上并行提交多个输入。然后,您可以向集群提交多个作业,每个作业请求 1 个节点(独占访问和并行工具)并分别处理不同的输入元素。

如果您不想启动“n”个单独的作业,您可以使用调度程序提供的机制(如blaunch)来指定应该动态运行作业的机器。您可以解析调度程序分配的机器的名称,并进一步使用类似 blaunch 的脚本来模拟从第一个节点提交 n 个作业。

注意:这类应用程序最好在类似设置的云上运行,而不是在典型的 HPC 系统上运行[在所有可用并行度(集群、线程和 SIMD)级别上有效利用集群是 HPC 的关键部分.]

【讨论】:

    猜你喜欢
    • 2016-12-29
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多