【问题标题】:How to stop mpirun allocating multiple jobs to the same cores without touching other cores如何停止 mpirun 将多个作业分配给同一个核心而不接触其他核心
【发布时间】:2021-02-08 23:48:54
【问题描述】:

我是 mpirun 的新手,我遇到了一个小问题。我有 n 个作业,我只想在机器的 2 个内核上运行,所以我打开 n 个终端窗口并使用通常的 mpirun -np 2 [program] 在每个终端窗口中,但不是用完 2*n 个内核,而是只使用其中的一小部分,而且应用程序非常慢,这让我相信 mpirun 正在同一内核上堆叠多个作业,而不会触及同一内核上的其他内核CPU,使工作变得难以忍受,并且总体上降低了工作流程效率...

我尝试过使用该选项 --bind-to core 在每次通话中,但这似乎并没有改变 mpirun 的行为...

什么可能导致这种行为,我该如何解决它,以便在没有足够的核心来满足需求之前,它不会在相同的核心上堆叠作业?

非常感谢!

【问题讨论】:

    标签: parallel-processing mpi


    【解决方案1】:

    在运行 2 个 MPI 任务作业时,Open MPI 的默认行为是 --bind-to core

    这里的问题是,从终端启动的 MPI 作业是独立的,它们都将任务 0 固定在 cpu 0 上,并将任务 1 固定在 cpu 1 上,因此它们最终会分时共享前两个内核。

    --bind-to none 阻止 Open MPI 绑定 MPI 任务,并让 Linux 调度程序使用所有可用的内核。您可以确保在任何给定时间运行的 MPI 任务不超过核心(否则您将返回到时间共享)。

    正确的解决方法是使用 SLURM 等作业调度程序,这将确保任何给定内核在任何给定时间运行的 MPI 任务不超过一个。

    手动解决方案是将每个 MPI 作业手动限制为两个核心

    $ taskset -c 0,1 mpirun -np 2 a.out
    $ taskset -c 2,3 mpirun -np 2 a.out
    ...
    

    但您可以决定不要在两个工作之间共享任何核心。

    【讨论】:

    • 非常感谢这似乎有效!我以前尝试过安装 SLURM 工作负载管理器(因为它已经在我用于工作的超级计算机上运行,​​所以我习惯于作为用户使用它们),但是在 VM 上安装它的任务对于某人来说太难了像我一样对工作调度员不熟悉哈哈哈!再次感谢您的帮助,当我有更多空闲时间时,我会再次尝试使用作业调度程序:)
    • 如果您正在运行 RedHat(like) 发行版,现在可以从 EPEL 获得 SLURM rpm。
    • 遗憾的是,我正在运行 Ubuntu 20.04 LTS!我找到的所有指南都是 18 岁或以上的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多