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

Coll模式

Coll模式下使用Hyper MPI的UCG功能,使用时不必加--mca coll ^ucg参数。Coll模式目前支持五种MPI集合操作:Allreduce、Bcast、Barrier、Allgatherv、Scatterv。

Coll模式分默认算法和指定算法两种模式:

  • 默认算法实现了基于包长、PPN、节点数三个参数的算法自动选择功能,即根据不同的包长、PPN、节点数选择不同的算法。

    PPN:表示每个节点的进程数。

  • 指定算法模式则需要利用命令行参数进行特定算法的指定。

默认算法模式

Hyper MPI在默认情况下根据包长、PPN、节点数三个参数进行算法选择,在使用时直接运行mpirun命令即可,不用添加额外参数。

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

运行命令示例如下:

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

在一些不支持场景下,算法会发生切换,参见特性支持与功能回退说明

指定算法模式

  • 方法1:通过命令行参数指定算法。
    1. 使用PuTTY工具,以Hyper MPI普通用户,如“hmpi_user”登录作业执行节点。
    2. mpirun命令中增加如下参数。

      -x UCG_PLANC_UCX_ALLREDUCE_ATTR=I:nS:200R:0-

  • 方法2:通过设置环境变量的方式来选择对应的算法。
    1. 使用PuTTY工具,以Hyper MPI普通用户,如“hmpi_user”登录作业执行节点。
    2. 将以下命令写入所有节点的“~/.bashrc”中。

      export UCG_PLANC_UCX_ALLREDUCE_ATTR=I:nS:200R:0-

    3. 执行以下命令,使环境变量生效。

      source ~/.bashrc

    4. 不再需要该环境变量时,从“~/.bashrc”中删除上述命令,并执行以下命令删除已生效的环境变量。

      unset UCG_PLANC_UCX _ALLREDUCE_ ATTR

  • UCG_PLANC_UCX_ALLREDUCE_ATTR:表示Allreduce的算法参数,其他可选参数请参见表6
  • I:表示算法编号。
  • n:表示对应算法的序号。如果算法选择的数值不在有效范围内,则会执行默认算法。
  • S:表示算法分数(默认INT_MAX),可以不指定。
  • R:表示算法包大小范围(默认[0,max)),可以不指定。

算法序号与算法对应关系参考地图如表1表2表3表4表5所示。

表1 Allreduce算法地图

算法序号

算法内容

备注

1

Recursive

完成源码安装Hyper MPI后即可使用

2

Node-aware Recursive+Binomial

完成源码安装Hyper MPI后即可使用

3

Socket-aware Recursive+Binomial

完成源码安装Hyper MPI后即可使用

4

Ring

完成源码安装Hyper MPI后即可使用

5

Node-aware Recursive+K-nomial

完成源码安装Hyper MPI后即可使用

6

Socket-aware Recursive+K-nomial

完成源码安装Hyper MPI后即可使用

7

Node-aware K-nomial+K-nomial

完成源码安装Hyper MPI后即可使用

8

Socket-aware K-nomial+K-nomial

完成源码安装Hyper MPI后即可使用

12

Rabenseifner

完成源码安装Hyper MPI后即可使用

13

Node-aware Rabenseifner

完成源码安装Hyper MPI后即可使用

14

Socket-aware Rabenseifner

完成源码安装Hyper MPI后即可使用

表2 Bcast算法地图

算法序号

算法内容

备注

2

Node-aware Binomial+Binomial

完成源码安装Hyper MPI后即可使用

3

Node-aware K-nomial+Binomial

完成源码安装Hyper MPI后即可使用

4

Node-aware K-nomial+K-nomial

完成源码安装Hyper MPI后即可使用

6

Ring

完成源码安装Hyper MPI后即可使用

表3 Barrier算法地图

算法序号

算法内容

备注

1

Recursive

完成源码安装Hyper MPI后即可使用

2

Node-aware Recursive+Binomial

完成源码安装Hyper MPI后即可使用

3

Socket-aware Recursive+Binomial

完成源码安装Hyper MPI后即可使用

4

Node-aware Recursive+K-nomial

完成源码安装Hyper MPI后即可使用

5

Socket-aware Recursive+K-nomial

完成源码安装Hyper MPI后即可使用

6

Node-aware K-nomial+K-nomial

完成源码安装Hyper MPI后即可使用

7

Socket-aware K-nomial+K-nomial

完成源码安装Hyper MPI后即可使用

表4 Scatterv算法地图

算法序号

算法内容

备注

1

Linear

完成源码安装Hyper MPI后即可使用

2

Knomial tree

完成源码安装Hyper MPI后即可使用

表5 Allgatherv算法地图

算法序号

算法内容

备注

1

Neighbor exchange

完成源码安装Hyper MPI后即可使用

2

Ring

完成源码安装Hyper MPI后即可使用

3

Ring-HPL

完成源码安装Hyper MPI后即可使用

4

Linear

完成源码安装Hyper MPI后即可使用

5

Bruck

完成源码安装Hyper MPI后即可使用

Hyper MPI兼容Open MPI的命令参数,详情请参见https://www.open-mpi.org/doc/current/man1/mpirun.1.phpHyper MPI新增命令参数说明参见表6

表6 Hyper MPI新增命令参数

参数

参数含义

-x UCG_PLANC_UCX_ALLREDUCE_FANOUT_INTER_DEGREE=

Allreduce K叉树节点间扇出值。

-x UCG_PLANC_UCX_ALLREDUCE_FANIN_INTER_DEGREE=

Allreduce K叉树节点间扇入值。

-x UCG_PLANC_UCX_ALLREDUCE_FANOUT_INTRA_DEGREE=

Allreduce K叉树节点内扇出值。

-x UCG_PLANC_UCX_ALLREDUCE_FANIN_INTRA_DEGREE=

Allreduce K叉树节点内扇入值。

-x UCG_PLANC_UCX_BARRIER_FANOUT_INTER_DEGREE=

Barrier K叉树节点间扇出值。

-x UCG_PLANC_UCX_BARRIER_FANIN_INTER_DEGREE=

Barrier K叉树节点间扇入值。

-x UCG_PLANC_UCX_BARRIER_FANOUT_INTRA_DEGREE=

Barrier K叉树节点内扇出值。

-x UCG_PLANC_UCX_BARRIER_FANIN_INTRA_DEGREE=

Barrier K叉树节点内扇入值。

-x UCG_PLANC_UCX_BCAST_ATTR=

Bcast的算法参数,“=”号后面的数字代表对应的算法序号,例如:-x UCG_PLANC_UCX_BCAST_ATTR=I:2,就代表Bcast的算法2。

-x UCG_PLANC_UCX_ALLREDUCE_ATTR=

Allreduce的算法参数,“=”号后面的数字代表对应的算法序号,例如:-x UCG_PLANC_UCX_ALLREDUCE_ATTR=I:7,就代表Allreduce的算法7。

-x UCG_PLANC_UCX_BARRIER_ATTR=

Barrier的算法参数,“=”号后面的数字代表对应的算法序号,例如:-x UCG_PLANC_UCX_BARRIER_ATTR=I:4,就代表Barrier的算法4。

-x UCG_PLANC_UCX_ALLGATHERV_ATTR=

Allgatherv的算法参数,“=”号后面的数字代表对应的算法序号,例如:-x UCG_PLANC_UCX_ ALLGATHERV_ATTR=I:3,就代表Allgatherv的算法3。

-x UCG_PLANC_UCX_SCATTERV_ATTR=

Scatterv的算法参数,“=”号后面的数字代表对应的算法序号,例如:-x UCG_PLANC_UCX_ SCATTERV_ATTR=I:1,就代表Scatterv的算法1。

-x UCG_PLANC_UCX_BCAST_NA_KNTREE_INTER_DEGREE=

配置Bcast的node-aware kntree算法节点之间的K值,默认值为8。

-x UCG_PLANC_UCX_BCAST_NA_KNTREE_INTRA_DEGREE=

配置Bcast的node-aware kntree算法节点内的K值,默认值为2。

-x UCG_PLANC_UCX_REDUCE_KNTREE_DEGREE=

配置Reduce的kntree算法的K值,默认值为2。

-x UCG_PLANC_UCX_SCATTERV_KNTREE_DEGREE=

配置Scatterv的kntree算法的K值,默认值为2。

-x UCG_PLANC_UCX_SCATTERV_MIN_SEND_BATCH=

配置Scatterv的Linear算法发送批处理模式的最小边界值,默认值为auto。

-x UCG_PLANC_UCX_SCATTERV_MAX_SEND_BATCH=

配置Scatterv的Linear算法发送批处理模式的最大边界值,默认值为auto。

-x UCG_PLANC_UCX_NPOLLS=

p2p请求测试ucp进度轮询周期数,默认值为3。

-x UCG_PLANC_UCX_USE_OOB=

复用ompi pml ucx链路,默认值为try。具体取值如下:

  • y或yes:强制开启。
  • n或no:关闭。
  • try:尝试开启。

-x UCG_USE_MT_MUTEX=

在UCG中使用互斥体来支持多线程,参数值y为使用mutex锁;n为使用默认的spinlock锁。默认值为n。

-x UCG_LOG_LEVEL=

指定UCG日志级别,参数值为:fatal、error、warn、info、debug、trace,默认值为warn。

--mca coll_ucg_priority

Hyper MPI调用UCG模块的优先级,值越大,优先级越高,默认值90,例如:--mca coll_ucg_priority 100,代表设置UCG优先级为100。

--mca coll_ucg_verbosity

UCG组件的日志详细程度,默认值2。

--mca coll_ucg_max_rcache_size

设置coll ucg组件的请求cache大小,默认是0,0即是关闭。设置为1024,即是开放1024个cache。

--mca coll_ucg_disable_coll

设置运行时禁用部分集合操作,例如:--mca coll_ucg_disable_coll barrier,bcast(禁用多个集合操作之间用逗号隔开)。