鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

运行MPI作业

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

背景信息

Hyper MPI支持的集合操作包含Allreduce、Bcast、Barrier、Alltoallv、Allgatherv、Gatherv和ScattervHyper 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选项同时使用。

  • 可以通过配置hwloc_base_binding_policy实现粗粒度绑核,常用绑定策略有Numa、Socket等。运行命令示例如下:

    mpirun -np 2 -N 1 --hostfile hf --mca hwloc_base_binding_policy numa test_case

通过默认算法运行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. 不再需要该环境变量时,需执行以下操作。
      1. 删除“~/.bashrc”中已写入的“export UCG_PLANC_UCX_ALLREDUCE_ATTR=I:id[S:scoreR:start-end]”命令。
      2. 执行以下命令,删除已生效的环境变量。

        unset UCG_PLANC_UCX _ALLREDUCE_ ATTR

指定算法支持的命令参数

  • Hyper MPI兼容Open MPI的命令参数

    具体请参见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_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~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

    -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