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

Coll模式

Coll模式下使用Hyper MPI的hucx功能,使用时不必加--mca coll ^ucx参数。Coll模式目前支持三种MPI集合操作:MPI_Allreduce、MPI_Bcast和MPI_Barrier。

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

  • 默认算法实现了基于包长的算法自动选择功能,即根据不同的包长选择不同的算法。
  • 指定算法模式则需要利用命令行参数进行特定算法的指定。

默认算法模式

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

  • MPI_Allreduce集合操作所采用的包长大于等于16384 Byte的默认算法:Ring。
  • MPI_Bcast集合操作所采用的默认算法:Node-aware K-nomial+K-nominal。

运行命令示例如下:

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

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

指定算法模式

  • 方法1:通过命令行参数指定算法,在mpirun命令中增加如下参数。

    -x UCX_BUILTIN_ALLREDUCE_ALGORITHM=n

  • 方法2:通过设置环境变量的方式来选择对应的算法。
    1. 将如下命令写入所有节点的“~/.bashrc”中。

      export UCX_BUILTIN_ALLREDUCE_ALGORITHM=n

    2. 执行如下命令使环境变量生效。

      source ~/.bashrc

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

      unset UCX_BUILTIN_ALLREDUCE_ALGORITHM

  • UCX_BUILTIN_ALLREDUCE_ALGORITHM:Allreduce的算法参数,其他可选参数参考表4
  • n:表示对应算法的编号。如果算法选择的数值不在有效范围内,则会执行默认算法。

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

表1 MPI_Allreduce算法地图

算法序号

算法内容

1

Recursive

2

Node-aware Recursive+Binomial

3

Socket-aware Recursive+Binomial

4

Ring

5

Node-aware Recursive+K-nomial

6

Socket-aware Recursive+K-nomial

7

Node-aware K-nomial+K-nominal

8

Socket-aware K-nominal+K-nominal

MPI_Allreduce对于不连续的数据类型只支持算法1。

算法3,5,6,7,8要求进程分布连续均衡。

表2 MPI_Bcast算法地图

算法序号

算法内容

1

Binomial tree

2

Node-aware Binomial+Binomial

3

Node-aware K-nomial+Binomial

4

Node-aware K-nomial+K-nomial

  • MPI_bcast对于不连续的数据类型只支持算法1,2,3,4。
  • 算法3,4要求进程分布连续均衡。
表3 MPI_Barrier算法地图

算法序号

算法内容

1

Recursive

2

Node-aware Recursive+Binomial

3

Socket-aware Recursive+Binomial

4

Node-aware Recursive+K-nomial

5

Socket-aware Recursive+K-nomial

6

Node-aware K-nomial+K-nominal

7

Socket-aware K-nominal+K-nominal

MPI_barrier算法3,4,5,6,7要求进程分布连续均衡。

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

表4 Hyper MPI新增命令参数

参数

参数含义

-x UCX_BUILTIN_DEGREE_INTER_FANOUT=

K叉树节点间扇出值。

-x UCX_BUILTIN_DEGREE_INTER_FANIN=

K叉树节点间扇入值。

-x UCX_BUILTIN_DEGREE_INTRA_FANOUT=

K叉树节点内扇出值。

-x UCX_BUILTIN_DEGREE_INTRA_FANIN=

K叉树节点内扇入值。

-x UCX_BUILTIN_BCAST_ALGORITHM=

Bcast的算法参数,“=”号后面的数字代表对应的算法编号,例如:-x UCX_BUILTIN_BCAST_ALGORITHM=1,就代表Bcast的算法1。

-x UCX_BUILTIN_ALLREDUCE_ALGORITHM=

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

-x UCX_BUILTIN_BARRIER_ALGORITHM=

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

-x UCX_BUILTIN_MAX_MSG_LIST_SIZE=

消息进程函数最大循环次数,默认值40。

-x UCX_BUILTIN_BCOPY_TO_ZCOPY_OPT=

bcopy到zcopy之间的优化开关,值为1是表示开启,值为0时表示关闭,默认开启。

-x UCX_BUILTIN_BCOPY_MAX_TX_SIZE=

使用bcopy包的最大发送字节数限制,默认值32786,表示数据包大小超过32786后将不使用bcopy包。

-x UCX_BUILTIN_LARGE_DATATYPE_THRESHOLD=

超大数据类型阈值,默认值32字节,当单个数据类型字节数超过32时,将该数据类型识别为超大数据类型。

--mca coll_ucx_enable_topo_map

使能拓扑地图,参数值为0时为不使能拓扑地图,为1时使能拓扑地图,不加此命令为默认使能,例如:--mca coll_ucx_enable_topo_map 0为不使能拓扑地图。

--mca coll_ucx_num_disconnect

断开连接的并行进程数,默认值0。

--mca coll_ucx_priority

mpi调用UCX模块的优先级,值越大,优先级越高,默认值91,例如:--mca coll_ucx_priority 0,代表设置ucx优先级为0。

--mca coll_ucx_verbosity

UCX组件的日志详细程度,默认值0。