MPI:将每个实例固定到每个节点上的某些核心

Posted

技术标签:

【中文标题】MPI:将每个实例固定到每个节点上的某些核心【英文标题】:MPI: Pin each instance to certain cores on each node 【发布时间】:2018-05-19 12:45:57 【问题描述】:

我想用 OpenMPI 2.11 执行我的程序的几个实例。每个实例都在我的集群上自己的节点 (-N 1) 上运行。这工作正常。我现在想将每个程序实例固定到其节点的前 2 个内核。为此,看起来我需要使用排名文件。这是我的排名文件:

rank 0=+n0 slot=0-1 
rank 1=+n1 slot=0-1

在我看来,这应该将每个程序实例限制在它运行的本地机器的核心 0 和 1 上。 我像这样执行 mpirun:

mpirun -np 2 -N 1 -rf /my/rank/file my_program

但是 mpirun 甚至没有执行我的程序就失败并出现此错误:

Conflicting directives for mapping policy are causing the policy
to be redefined:

  New policy:   RANK_FILE
  Prior policy:  UNKNOWN

Please check that only one policy is defined.

这是什么?我在排名文件中犯了错误吗?

【问题讨论】:

【参考方案1】:

不使用排名文件,只需使用主机文件:

n0 slots=n max_slots=n
n1 slots=n max_slots=n

然后告诉 Open MPI 为每个节点映射一个进程,每个进程使用两个内核:

mpiexec --hostfile hostfile --map-by ppr:1:node:PE=2 --bind-to core ...

ppr:1:node:PE=2 读作:每个资源 1 个进程;资源类型为节点;每个进程 2 个处理元素。您可以通过添加--report-bindings 选项来检查实际绑定。

【讨论】:

以上是关于MPI:将每个实例固定到每个节点上的某些核心的主要内容,如果未能解决你的问题,请参考以下文章

将负载分配到在集群的每个节点上运行的 perl 脚本实例

机器学习与人工智障:决策树与随机森林

将数据库从一个可用性组移动到另一个位于不同 SQL 实例上的可用性组

[仅在多个节点上的MPI分段故障

多个核心数据实例

是否可以将一个进程从一个节点的一个核心迁移到 MPI 中另一个节点的另一个核心?