鲲鹏通信组件HMPI之参数使用篇
鲲鹏通信组件HMPI之参数使用篇 华为高性能通信库(Hyper MPI,以下简称HMPI)实现了并行计算的网络通信功能,可以用来支持制造、气象、分子动力学等应用场景。HPCKit包含了完整的MPI通信库。HMPI是基于开源MPI进行优化的,使用起来非常便捷。 1. 背景 华为高性能通信库(Hyper MPI,以下简称HMPI)实现了并行计算的网络通信功能,可以用来支持制造、气象、分子动力学等应用场景。HPCKit包含了完整的MPI通信库。HMPI是基于开源MPI进行优化的,使用起来非常便捷。通常情况下,只需执行 mpirun -np 4 ./exe 即可启动程序。但在深度性能调优或大规模并行运行时,常常需要配置大量参数。本文介绍 MPI 使用过程中的常见参数及其用法。 2. 基础用法## 2.1. 单节点运行
mpirun -np 4 ./exe 表示使用 4 个进程运行当前程序。只要进程数不超过机器的物理核心数,一般不会出现问题。## 2.2. 跨节点运行
要实现跨节点运行,首先需要让每台机器都能找到 MPI 的安装路径。本文以 HMPI(通过HPCkit加载)为例,其环境变量加载脚本如下:
hwmpi=$(cd $(dirname KaTeX parse error: Expected 'EOF', got '&' at position 17: …ASH_SOURCE)/.. &̲& command pwd -…{hwmpi}/mode/hmpiexportPATH={mode}/hmpi export PATH=mode/hmpiexportPATH={hwmpi}/mode/hmpi/bin:{mode}/hmpi/bin:mode/hmpi/bin:{hwmpi}/mode/hucx/bin:{mode}/hucx/bin:mode/hucx/bin:{hwmpi}/mode/xucg/bin:{mode}/xucg/bin:mode/xucg/bin:PATH export INCLUDE=hwmpi/{hwmpi}/hwmpi/{mode}/hmpi/include:hwmpi/{hwmpi}/hwmpi/{mode}/hucx/include:hwmpi/{hwmpi}/hwmpi/{mode}/xucg/include:INCLUDEexportLDLIBRARYPATH=INCLUDE export LD_LIBRARY_PATH=INCLUDEexportLDLIBRARYPATH={hwmpi}/mode/hmpi/lib:{mode}/hmpi/lib:mode/hmpi/lib:{hwmpi}/mode/hucx/lib:{mode}/hucx/lib:mode/hucx/lib:{hwmpi}/mode/xucg/lib:{mode}/xucg/lib:mode/xucg/lib:LD_LIBRARY_PATH
有两种方式使环境变量生效:
永久生效 :将上述加载命令写入 ~/.bashrc 文件。
临时传递 :在 mpirun 命令中通过 -x 选项传递环境变量。例如:
mpirun -np 4 -x PATH -x LD_LIBRARY_PATH --hostfile hostfile2 ./exe## 2.3. 主机文件(hostfile)与等级文件(rankfile)
跨节点运行时,需要指定主机列表。假设使用两个节点,IP 地址分别为 1997 和 1998 ,则主机文件 hostfile2 的内容为:
1997 1998
如果需要更精细的进程分布(例如:rank 0 使用节点 97 的前 38 个核,rank 1 使用节点 97 的第 39-76 个核,rank 2 和 rank 3 在节点 98 上类似划分),可以编写等级文件(rankfile),示例 rankfile2 如下:
rank 0=1997 slot=0-37 rank 1=1997 slot=38-75 rank 2=1998 slot=0-37 rank 3=1998 slot=38-75
对应命令为:
mpirun -x PATH -x LD_LIBRARY_PATH --rankfile rankfile2 ./exe
当进程数量很多时,手写 rankfile 将变得繁琐。如果只需在每个节点的每个 NUMA 节点上分配一个核(共有 16 个 NUMA 节点),可以使用更简洁的命令:
mpirun -np 32 -N 16 --map-by numa -x PATH -x LD_LIBRARY_PATH --hostfile hostfile2 ./exe## 2.4. 查看进程绑定
在 mpirun 命令中添加 --report-bindings 可以查看进程与 CPU 核心的绑定关系。
使用 htop 等系统工具实时观察cpu物理核心资源占用情况。# 3. 集合通信算法
HMPI 的大量优化集中在集合通信上。下面介绍 Open MPI 中算法的手动指定方法以及 UCG 模块的使用。## 3.1. Open MPI 内置算法
Open MPI 默认采用自适应算法选择策略,根据通信进程数和消息大小动态调整。若要手动指定某个算法,可使用如下参数(以 MPI_Allgather 为例):
–mca coll_tuned_use_dynamic_rules true --mca coll_tuned_allgather_algorithm 4
各算法的具体编号可参考源码文件 ompi/mca/coll/tuned/coll_tuned_decision_fixed.c 。例如 MPI_Allgather 的算法选择逻辑如下:
int ompi_coll_tuned_allgather_intra_dec_fixed(const void *sbuf, int scount, struct ompi_datatype_t sdtype, void rbuf, int rcount, struct ompi_datatype_t *rdtype, struct ompi_communicator_t comm, mca_coll_base_module_t module) { int communicator_size, alg; size_t dsize, total_dsize; if (MPI_IN_PLACE != sbuf) { ompi_datatype_type_size(sdtype, &dsize); } else { ompi_datatype_type_size(rdtype, &dsize); } total_dsize = dsize * (ptrdiff_t)scount; communicator_size = ompi_comm_size(comm); / Algorithms: * {1, “linear”}, * {2, “bruck”}, * {3, “recursive_doubling”}, * {4, “ring”}, * {5, “neighbor”}, * {6, “two_proc”} */ if (communicator_size == 2) { alg = 6; } else if (communicator_size < 32) { alg = 3; } // … 后续分支省略 }
也可通过命令查看某个集合通信接口支持的所有算法:
ompi_info --param coll tuned -l 9 | grep -A 2 -w coll_tuned_allgather_algorithm## 3.2. UCG 模块的使用
HMPI 的 UCG 模块支持多种 MPI 集合通信接口。使用示例(使能 MPI_Allgatherv 的 UCG 算法 2):
–mca coll_ucg_enable_coll allgatherv -x UCG_PLANC_UCX_ALLGATHERV_ATTR=I:2
特殊参数:调整 k‑ary tree 的度数(例如设置 MPI_Gatherv 的 k‑ary tree 的 k=4):
-x UCG_PLANC_UCX_GATHERV_KNTREE_DEGREE=4
改变 k 值可以调整通信树的形状,从而优化性能。更多 UCG 算法细节可参考其 代码仓库 ,具体接口算法位于 src/planc/ucx/ 目录下(如 allreduce.c 包含 MPI_Allreduce 的算法实现)。# 4. 其他常用参数## 4.1. 网络传输类型
MPI 跨节点通信依赖网卡,支持两种传输类型:
RC(可靠连接) :性能更高,延迟更低。
UD(不可靠数据报) :扩展性更好,适合大规模通信。
可通过以下参数选择:
-x UCX_TLS=rc # 或 ud## 4.2. 多网卡选择
若机器配置了多张网卡,可手动指定使用其中一张:
-x UCX_NET_DEVICES=roce0:1 # 示例网卡名称## 4.3. Rendezvous 阈值
UCX_RNDV_THRESH 参数控制从 Eager 协议切换到 Rendezvous 协议的消息大小阈值:
-x UCX_RNDV_THRESH=512K
Eager 协议 :适用于小消息,发送方直接将数据推送给接收方。
Rendezvous 协议 :适用于大消息,通过握手协商后再传输数据
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)