---
title: 运行MPI作业
description: "本文介绍运行MPI作业的方法。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/userg_huaweimpi_0018.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/userg_huaweimpi_0018.html
indexId: 15ec1f1271269d7e0616cdf243508c8e2a49f348a84898cac3af67124547080a60
---
# 运行MPI作业

本文介绍运行MPI作业的方法。

#### 背景信息

Hyper MPI支持的集合操作包含Allreduce、Bcast、Barrier、Alltoallv、Allgatherv、Gatherv和Scatterv。Hyper MPI支持如下算法模式。

- 默认算法模式：使用coll-ucg模块运行MPI作业，在运行作业时不需要添加“--mca coll ^ucg”参数。
- 指定算法模式：使用Open MPI原有的集合通信方式运行MPI作业，在运行作业时需要添加“--mca coll ^ucg”参数。

指定算法模式的示例如下：

mpirun -np 16 -N 2 --hostfile hf --mca coll ^ucg test_case

- -np：表示所有节点总进程数，计算方式为单节点的进程数量（N）*节点数量。

- -N：表示每个节点的进程数。

- --hostfile：表示进程运行节点的配置文件。

- test_case：表示mpicc编译后的二进制文件。


Hyper MPI默认对业务进程按照core的策略进行绑核，如果业务进程为多线程程序，为保障线程的正常调度，需要根据业务线程规模手动修改绑核配置，例如：

- 可以通过指定rankfile文件的方式实现细粒度绑核，rankfile文件的编写规则为：
  rank 0={ip1} slot=0-7

  rank 1={ip2} slot=0-7

  上述规则表示将MPI的0号任务绑定在ip1节点的0-7号CPU核上；将MPI的1号任务绑定在ip2节点的0-7号CPU核上。

  运行命令示例如下：

  mpirun --rankfile rf test_case


--rankfile配置项无法与--hostfile或-N选项同时使用。


- 可以通过配置--bind-to core或--bind-tonuma或--bind-tosocket实现粗粒度绑核。运行命令示例如下：
  mpirun -np 2 -N 1 --hostfile hf --bind-to numa test_case


#### 通过默认算法运行MPI作业

Hyper MPI在默认情况下根据包长、每个节点的进程数（PPN）和节点数三个参数选择算法，在使用时直接运行mpirun命令即可，无需添加额外参数。

- Allreduce、Bcast和Allgatherv集合操作默认算法根据包长、PPN和节点数三个参数进行选择。
- Barrier、Gatherv和Scatterv集合操作默认算法根据PPN和节点数进行选择。
- Alltoallv集合操作默认算法是Ladd。

运行命令示例如下：

mpirun -np 16 -N 2 --hostfile hf test_case

Hyper MPI中并非每一个算法都支持所有的场景，在一些不支持场景下，会回退至支持的算法，详情请参见特性支持与功能回退说明。


#### 通过指定算法运行MPI作业

以Allreduce的算法参数UCG_PLANC_UCX_ALLREDUCE_ATTR为例进行介绍。通过指定算法运行MPI作业的命令参数请参见指定算法支持的命令参数。

- 方法一：通过命令行参数指定算法

  1. 使用PuTTY工具，以Hyper MPI普通用户（例如“hmpi_user”）登录至作业执行节点。
  2. 在mpirun命令中增加如下参数。
    -x UCG_PLANC_UCX_ALLREDUCE_ATTR=I:id[S:scoreR:start-end]

- 方法二：通过设置环境变量的方式来选择对应的算法

  1. 使用PuTTY工具，以Hyper MPI普通用户（例如“hmpi_user”）登录至作业执行节点。
  2. 将以下命令写入所有节点的“~/.bashrc”中。
    export UCG_PLANC_UCX_ALLREDUCE_ATTR=I:id[S:scoreR:start-end]

    id：表示对应算法的序号。对应算法的序号请参见算法地图。如果算法选择的数值不在有效范围内，则会执行默认算法。 score：表示算法分数，分数越高，算法优先级越高。如果不指定，默认该算法优先级最高。取值为任意自然数。 start-end：表示算法适用的包大小范围。如果不指定，默认该算法适用于所有包大小。start、end的取值为任意自然数。

  3. 执行以下命令，使环境变量生效。
    source ~/.bashrc

  4. 不再需要该环境变量时，需执行以下操作。
    删除“~/.bashrc”中已写入的“export UCG_PLANC_UCX_ALLREDUCE_ATTR=I:id[S:scoreR:start-end]”命令。

    执行以下命令，删除已生效的环境变量。

    unset UCG_PLANC_UCX_ALLREDUCE_ATTR


#### 指定算法支持的命令参数

- Hyper MPI兼容Open MPI的命令参数
  具体请参见https://www.open-mpi.org/doc/current/man1/mpirun.1.php(https://www.open-mpi.org/doc/current/man1/mpirun.1.php)。

- Hyper MPI新增的命令参数
  表1中为运行MPI作业时的常用命令参数，更多命令参数请参见命令参数。

**表1 指定算法支持的常用命令参数**

| Hyper MPI命令参数 | 取值 | 参数说明 |
| --- | --- | --- |
| \-x UCG\_PLANC\_UCX\_BCAST\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~6, 8~14。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Bcast的算法参数。 示例： \-x UCG\_PLANC\_UCX\_BCAST\_ATTR=I:4 |
| \-x UCG\_PLANC\_UCX\_ALLREDUCE\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~8,11~14。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Allreduce的算法参数。 示例： \-x UCG\_PLANC\_UCX\_ALLREDUCE\_ATTR=I:7 |
| \-x UCG\_PLANC\_UCX\_BARRIER\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~7,10。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Barrier的算法参数。 示例： \-x UCG\_PLANC\_UCX\_BARRIER\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_ALLTOALLV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~5。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Alltoallv的算法参数。 示例： \-x UCG\_PLANC\_UCX\_ALLTOALLV\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_ALLGATHERV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~6。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Allgatherv的算法参数。 示例： \-x UCG\_PLANC\_UCX\_ALLGATHERV\_ATTR=I:3 |
| \-x UCG\_PLANC\_UCX\_SCATTERV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~3。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Scatterv的算法参数。 示例： \-x UCG\_PLANC\_UCX\_SCATTERV\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_GATHERV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~4。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Gatherv的算法参数。 示例： \-x UCG\_PLANC\_UCX\_GATHERV\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_GATHER\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~4。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Gather的算法参数。 示例： \-x UCG\_PLANC\_UCX\_GATHER\_ATTR=I:1 |
| \-x UCG\_PLANC\_STARS\_BCAST\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~4。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Bcast的卸载算法参数。 示例： \-x UCG\_PLANC\_STARS\_BCAST\_ATTR=I:1 |
| \-x UCG\_PLANC\_STARS\_ALLGATHERV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Allgatherv的卸载算法参数。 示例： \-x UCG\_PLANC\_STARS\_ALLGATHERV\_ATTR=I:1 |
| \-x UCG\_PLANC\_STARS\_SCATTERV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Scatterv的卸载算法参数。 示例： \-x UCG\_PLANC\_STARS\_SCATTERV\_ATTR=I:1 |
| \-x UCG\_PLANC\_STARS\_ALLTOALLV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Alltoallv的卸载算法参数。 示例： \-x UCG\_PLANC\_STARS\_ALLTOALLV\_ATTR=I:1 |
| \-x UCG\_PLANC\_STARS\_BARRIER\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Barrier的卸载算法参数。 示例： \-x UCG\_PLANC\_STARS\_BARRIER\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_IBCAST\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~6, 8~14。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IBcast的算法参数。 示例： \-x UCG\_PLANC\_UCX\_IBCAST\_ATTR=I:4 |
| \-x UCG\_PLANC\_UCX\_IALLREDUCE\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~8,11~14。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IAllreduce的算法参数。 示例： \-x UCG\_PLANC\_UCX\_IALLREDUCE\_ATTR=I:7 |
| \-x UCG\_PLANC\_UCX\_IBARRIER\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~7,10。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IBarrier的算法参数。 示例： \-x UCG\_PLANC\_UCX\_IBARRIER\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_IALLTOALLV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~5。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IAlltoallv的算法参数。 示例： \-x UCG\_PLANC\_UCX\_IALLTOALLV\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_IALLGATHERV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~6。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IAllgatherv的算法参数。 示例： \-x UCG\_PLANC\_UCX\_IALLGATHERV\_ATTR=I:3 |
| \-x UCG\_PLANC\_UCX\_ISCATTERV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~3。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IScatterv的算法参数。 示例： \-x UCG\_PLANC\_UCX\_ISCATTERV\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_IGATHERV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~4。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IGatherv的算法参数。 示例： \-x UCG\_PLANC\_UCX\_IGATHERV\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_IGATHER\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~4。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IGather的算法参数。 示例： \-x UCG\_PLANC\_UCX\_IGATHER\_ATTR=I:1 |
| \-x UCG\_PLANC\_STARS\_IBCAST\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~4。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IBcast的卸载算法参数。 示例： \-x UCG\_PLANC\_STARS\_IBCAST\_ATTR=I:1 |
| \-x UCG\_PLANC\_STARS\_IALLGATHERV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IAllgatherv的卸载算法参数。 示例： \-x UCG\_PLANC\_STARS\_IALLGATHERV\_ATTR=I:1 |
| \-x UCG\_PLANC\_STARS\_ISCATTERV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IScatterv的卸载算法参数。 示例： \-x UCG\_PLANC\_STARS\_ISCATTERV\_ATTR=I:1 |
| \-x UCG\_PLANC\_STARS\_IALLTOALLV\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IAlltoallv的卸载算法参数。 示例： \-x UCG\_PLANC\_STARS\_IALLTOALLV\_ATTR=I:1 |
| \-x UCG\_PLANC\_STARS\_IBARRIER\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IBarrier的卸载算法参数。 示例： \-x UCG\_PLANC\_STARS\_IBARRIER\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_REDUCE\_SCATTER\_BLOCK\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~2。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Reduce\_scatter\_block的算法参数。 示例： \-x UCG\_PLANC\_UCX\_REDUCE\_SCATTER\_BLOCK\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_IREDUCE\_SCATTER\_BLOCK\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~2。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IReduce\_scatter\_block的算法参数。 示例： \-x UCG\_PLANC\_UCX\_IREDUCE\_SCATTER\_BLOCK\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_REDUCE\_SCATTER\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~2。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，Reduce\_scatter的算法参数。 示例： \-x UCG\_PLANC\_UCX\_REDUCE\_SCATTER\_ATTR=I:1 |
| \-x UCG\_PLANC\_UCX\_IREDUCE\_SCATTER\_ATTR= | 取值类型：string，格式为I:id[S:scoreR:start\-end]。 取值范围： id：必填，1~2。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 | 可选参数，IReduce\_scatter的算法参数。 示例： \-x UCG\_PLANC\_UCX\_IREDUCE\_SCATTER\_ATTR=I:1 |
