运行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 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
通过指定算法运行MPI作业
以Allreduce的算法参数UCG_PLANC_UCX_ALLREDUCE_ATTR为例进行介绍。通过指定算法运行MPI作业的命令参数请参见指定算法支持的命令参数。
- 方法一:通过命令行参数指定算法
- 使用PuTTY工具,以Hyper MPI普通用户(例如“hmpi_user”)登录至作业执行节点。
- 在mpirun命令中增加如下参数。
-x UCG_PLANC_UCX_ALLREDUCE_ATTR=I:id[S:scoreR:start-end]
- 方法二:通过设置环境变量的方式来选择对应的算法
- 使用PuTTY工具,以Hyper MPI普通用户(例如“hmpi_user”)登录至作业执行节点。
- 将以下命令写入所有节点的“~/.bashrc”中。
export UCG_PLANC_UCX_ALLREDUCE_ATTR=I:id[S:scoreR:start-end]
- id:表示对应算法的序号。对应算法的序号请参见算法地图。如果算法选择的数值不在有效范围内,则会执行默认算法。
- score:表示算法分数,分数越高,算法优先级越高。如果不指定,默认该算法优先级最高。取值为任意自然数。
- start-end:表示算法适用的包大小范围。如果不指定,默认该算法适用于所有包大小。start、end的取值为任意自然数。
- 执行以下命令,使环境变量生效。
- 不再需要该环境变量时,需执行以下操作。
指定算法支持的命令参数
- 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