开发者
资源
mpirun常用参数介绍
mpirun常用参数介绍
发表于2023/07/26
4.7k7

openmpi使用mpirun命令执行串行或并行作业,以下介绍常用mpirun参数,mpirun参数的详细介绍见:

https://www.open-mpi.org/doc/current/man1/mpirun.1.php

--allow-run-as-root

允许使用root用户运行程序。

-np,-n <num>

执行MPI程序的进程总数。

-N, --npernode <num>

每个节点运行的进程数,已弃用,但也可以用,建议使用--map-by ppr:n:node,如--map-by ppr:32:node:每个节点运行32个进程。

--hostfile, --machinefile <filename>

MPI进程分配文件,记录进程在那些节点上运行,如下文件表示进程运行在node1~node4节点上。也可以写ip代替,建议使用ip。

node1

node2

node3

node4

--host <hostname1:num1,hostname2:num2,…>

列出运行MPI程序的主机列表,以及每个节点上运行的进程数。

--map-by node

将进程数映射到节点上,通常与-np, --hostfile一起使用,如:

mpirun -np 64 --hostfile nodes --map-by node …

将64个进程平均映射到nodes指定的节点上。

--bind-to core

将MPI进程绑定到CPU核上,避免进程在CPU核之间切换带来的开销,可以减轻cache争抢现象,提高MPI 程序的性能。

map-by和bind-to的区别

map-by是将MPI进程分配到指定位置(节点级别),比如某个节点上;bind-to是将MPI进程绑定到指定处理器上,比如CPU核上,粒度更小。可使用--report-bindings参数查看绑定情况,如下图所示:

1.将8个MPI进程平均分配到2个节点,绑定到固定CPU核上。

2.jpg

2. 将8个MPI进程平均分配到2个节点,绑定到socket上,进程在绑定socket里的CPU上随机分配。

3.jpg3_1.jpg

--map-by ppr:n:node:PE=m

为每个节点分配n个MPI进程,每个MPI进程分配m个CPU核

4.jpg

-x NAME[=value]

在执行程序之前将指定的环境变量NAME传递给远程节点,或者将环境变量NAME设置为value并传递给远程节点。如:

mpirun -x UCX_TLS=self,sm,rc -x UCX_NET_DEVICES=mlx5_0:1 …

使用环境变量UCX_TLS设置MPI使用的通信协议为self,sm,rc;使用环境变量UCX_NET_DEVICES指定ib网络端口。

--mca <key> <value>

设置mca参数,openmpi的设计以组件架构(MPI Component Architecture, MCA)为中心,可通过运行时在mpirun命令中设置mca参数来加载openmpi的各类组件模块,实现特定功能。可使用如下命令查询openmpi支持的mca参数:

列出所有组件的mca参数以及当前值

ompi_info --param all all --level 9

列出BTL组件的mca参数以及当前值

ompi_info --param btl all --level 9

下面举一些例子来说明如何设置mca参数,mca设置包含include和exclude功能

1. include功能

如下命令只包含btl组件的openib,self,vader模块,也就是说btl的其他模块将被排除在外

mpirun --mca btl openib,self,vader

2. exclude功能

如下命令排除btl组件的openib,self,vader模块,也就是说btl的其他模块将会被包含

mpirun --mca btl ^openib,self,vader

注意:include和exclude不可混用

mpirun示例

mpirun --hostfile nodes --allow-run-as-root -map-by ppr:24:node:pe=4 --bind-to core --display-map --mca pml ucx --mca btl ^openib --mca io romio321 -x UCX_TLS=self,sm,rc -x UCX_NET_DEVICES=mlx5_0:1 ./wrf.exe

说明:

使用多节点运行wrf.exe,每个节点运行24个进程,给每个进程分配4个CPU核;使用pml组件的ucx模块;不使用btl组件的openib模块;使用并行io;通信协议使用self,sm,rc;指定ib网络端口为mlx5_0:1。

WARNING: There was an error initializing an OpenFabrics device.

openmpi 4.0及以后的版本,如果使用ib网络,会遇到如下告警

1.jpg

原因:

该告警是由btl组件的openib模块给出的,该模块在openmpi 4.0及以后的版本中被弃用了,该模块由pml组件的ucx模块实现,openmpi默认会使用ucx模块。

解决办法:

1.在安装openmpi的时候,configure时加--without-verbs参数。

2.使用如下命令去除btl模块:

mpirun --mca ^btl

https://www.open-mpi.org/faq/?category=openfabrics#run-ucx

参考文档

openmpi常见问题解答:

https://www.open-mpi.org/faq/

ucx参数介绍:

https://github.com/openucx/ucx/wiki/UCX-environment-parameters

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞