---
title: 运行MPI作业
description: "本文介绍运行MPI作业的方法。"
url: https://www.hikunpeng.com/document/detail/zh/hpchistory/hpckit/develop2400/userg_huaweimpi_0015.html
sourcePath: /source/zh/hpchistory/hpckit/develop2400/userg_huaweimpi_0015.html
indexId: 6ca0c3960937e47532f7945b48bebee43f99438ecc68eb2e57251d203b93feb966
---
# 运行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编译后的二进制文件。


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

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

- Allreduce、Bcast和Allgatherv集合操作默认算法根据包长、PPN和节点数三个参数进行选择。
- Barrier集合操作默认算法根据PPN和节点数进行选择。
- Gatherv和Scatterv集合操作默认算法是Linear。
- 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. 不再需要该环境变量时，需执行以下操作。

    a. 删除“~/.bashrc”中已写入的“export UCG_PLANC_UCX_ALLREDUCE_ATTR=I:id[S:scoreR:start-end]”命令。
    b. 执行以下命令，删除已生效的环境变量。
      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~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~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~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或2。 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。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 可选参数，Gatherv的算法参数。 示例： -x UCG_PLANC_UCX_ GATHERV_ATTR=I:1 -x UCG_PLANC_UCX_IBCAST_ATTR= 取值类型：string，格式为I:id[S:scoreR:start-end]。 取值范围： id：必填，1~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~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~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或2。 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。 score：选填，任意自然数。 start：选填，任意自然数。 end：选填，任意自然数。 默认值：无固定值，根据生效规则调节赋值。 可选参数，IGatherv的算法参数。 示例： -x UCG_PLANC_UCX_ IGATHERV_ATTR=I:1
