`mympirun`是一个工具,它使得高性能计算集群的用户能够更容易地运行高性能的MPI程序。
项目描述
描述
mympirun
是一个工具,它使得高性能计算集群的用户能够更容易地运行高性能的MPI程序。
它围绕不同MPI实现(OpenMPI、Intel MPI等)提供的mpiexec
/mpirun
等命令进行包装。
mympirun
将确定要使用的mpirun
命令,设置环境,并考虑可用资源来配置它。
最初由根特大学HPC团队创建。
许可证
vsc-mympirun
在GNU通用公共许可证(GPL)版本2下提供。
基本用法
使用mympirun的最基本形式是mympirun [选项] your_program [程序选项]
。
Mympirun解析选项,直到遇到它不认识的选项,并假定这是可执行文件,而之后的所有内容都是程序的选项。要手动将mympirun选项与程序选项分开,使用中间的--
。
设置
vsc-mympirun
安装提供了'假'的mpirun
命令,以尝试确保始终使用mympirun
。这些假mpirun
命令基本上围绕mympirun
(它反过来围绕真正的mpirun
命令)。
因此,您应确保将mympirun
命令和假mpirun
的位置添加到$PATH
。如果mympirun
通过模块提供,您应在加载任何其他模块之后加载它。
检测MPI和作业调度器
mympirun
可以检测正在使用的 MPI 实现程序(如 OpenMPI、Intel MPI 等),以确定它应该使用哪个 mpirun
命令。这可以通过 --setmpi
或 -M
选项来覆盖。可以通过 -m
或 --showmpi
获得已知 MPI 实现程序的概览。
此外,作业调度器(例如,Torque)也会自动检测,并且可以通过 --schedtype
或 -S
来覆盖。如果无法检测到作业调度器,则假定本地执行。
可以通过 -s
或 --showsched
获得已知作业调度器的概览。
可用资源
mympirun
将检测可用资源,并相应地将选项传递给使用的 mpirun
命令。
默认情况下,它将使用所有可用核心,即
- 如果使用
local
调度器,则在 当前 系统上的所有核心 - 如果使用
pbs
调度器,则在当前作业分配的所有核心
如果需要,可以使用 --hybrid
、--universe
、--double
或 --multi
选项来更改此设置,具体请参阅以下内容。
默认情况下还启用了将 MPI 进程固定到核心的功能(可以使用 --disable-pinmpi
禁用)。
它还会利用默认使用的 MPI 库的 Torque 集成,通过使用 pbsdsh
而不是 ssh
来启动 MPI 进程。(另请参阅:控制启动器)
配置 mympirun
要获取 mympirun
可用选项的完整概览,请运行 mympirun --help
。
对于每个命令行选项,都有一个相应的环境变量 $MYMPIRUN_*
(例如,--basepath
对应于 $MPI_BASEPATH
)和配置文件条目。命令行选项覆盖环境变量,环境变量覆盖配置文件。
控制进程数量
--hybrid
/ -h
--hybrid
或 -h
选项需要一个整数。这个整数指定每个可用物理节点上启动的进程数。
$ echo $PBS_NUM_NODES
2
$ mympirun --hybrid 2 ./mpi_hello
Hello world from processor node2157.delcatty.os, rank 1 out of 4 processors
Hello world from processor node2158.delcatty.os, rank 3 out of 4 processors
Hello world from processor node2158.delcatty.os, rank 2 out of 4 processors
Hello world from processor node2157.delcatty.os, rank 0 out of 4 processors
--universe
--universe
--universe
选项也需要一个整数。这个整数将是 mympirun 启动的进程的准确数量(与节点数量无关)。
$ echo $PBS_NUM_NODES
2
$ mympirun --universe 1 ./mpi_hello
Hello world from processor node2157.delcatty.os, rank 0 out of 1 processors
$ echo $PBS_NUM_NODES
3
$ mympirun --universe 2 ./mpi_hello
Hello world from processor node2157.delcatty.os, rank 1 out of 2 processors
Hello world from processor node2157.delcatty.os, rank 0 out of 2 processors
--double
和 --multi
如名称所示,当使用 --double
选项时,mympirun 将启动两倍于通常的进程数。--multi
选项功能相同,但它需要一个整数,表示乘数,例如,--multi 3
将启动三倍的进程数。这意味着 --double
和 --multi 2
将产生完全相同的效果。
$ echo $PBS_NUM_NODES
2
$ echo $PBS_NUM_PPN
2
$ mympirun --double ./mpi_hello
Hello world from processor node2157.delcatty.os, rank 1 out of 8 processors
Hello world from processor node2158.delcatty.os, rank 3 out of 8 processors
Hello world from processor node2157.delcatty.os, rank 0 out of 8 processors
Hello world from processor node2158.delcatty.os, rank 2 out of 8 processors
控制输出
使用 --output
将正在运行的(MPI)程序的输出重定向到文件,而不是 stdout/stderr。
$ mympirun --output out.txt hostname
$ cat out.txt
node2157.delcatty.os
node2157.delcatty.os
传递环境变量
mympirun 传递给 MPI 进程环境的环境变量包括 CLASSPATH
、LD_LIBRARY_PATH
、LD_PRELOAD
、PATH
、PYTHONPATH
、PYTHONUNBUFFERED
以及所有以 DAPL
、IPATH
、KMP
、MKL
、O64
、OMP
、PSC
、PSM
、TMI
和 VSMP
前缀的环境变量。
要向此列表添加其他变量,可以使用 mympirun 选项 --variablesprefix
。此选项需要一个以逗号分隔的字符串列表。mympirun 将传递确切字符串以及以该字符串开头并跟有下划线的所有环境变量。例如,--variablesprefix MPI
将传递环境变量 $MPI
、$MPI_FOO
、$MPI_BAR
等。
$ cat echo_my_env_var
echo ${MY_ENV_VAR:-default_value}
$ export MYENV_VAR="myenv_var"
$ mympirun ./echo_my_env_var
default_value
default_value
$ mympirun --variablesprefix MYENV ./echo_my_env_var
myenv_var
myenv_var
控制启动器
在最新的Intel MPI版本(> 4.1)中,mpirun使用Hydra作为其进程管理器。可以使用--launcher
选项更改Hydra使用的启动器。(见引导选项)
默认情况下,mympirun将使用pbsdsh
作为启动器,这是由Torque/PBS资源管理器提供的。它可以在Torque的控制下分配任务,确保进程正确地绑定到作业中可用的资源。
这是使用ssh
作为启动器的一个更好的选择。
传递给mpirun
的选项
要将选项直接传递给mpirun命令,请使用--mpirunoptions
。此选项与一系列选项一起使用,然后将这些选项追加到mympirun生成的mpirun命令中。
有关Intel MPI的选项,请参阅Intel MPI文档的命令参考部分。对于OpenMPI的选项,请检查mpirun手册页。
挂起检测
如果您的MPI程序长时间没有输出,mympirun将假设有问题,并将作为安全措施中断您的作业(我们不想让程序“挂起”数小时,甚至数天而不做任何实际操作)。mympirun等待输出的默认时间是1小时(3600秒)。
您可以通过使用带有秒数的output-check-timeout
选项来更改mympirun等待输出的时间,或者您可以通过使用--disable-output-check-fatal
选项来使警告非致命。在这种情况下,将打印警告,但程序不会被中断。
试运行
要让mympirun
只打印将要运行的命令(而不实际运行它),请使用mympirun --dry-run
或mympirun -D
。
例如
$ module load intel/2018a $ mympirun --dry-run ./mpi_hello mpirun ... -genv I_MPI_FABRICS shm:dapl ... -np 16 ... mpi_hello
调试
要获取mympirun的所有调试信息,请使用选项--debug
或简单地使用-d
。默认情况下,它将打印到标准输出。
对于MPI级别的调试,请使用--debugmpi
。
将mympirun脚本的日志输出重定向到文件,请使用选项--logtofile
。
内部工作流程
mympirun的第一步是确保每个mpirun命令都通过mympirun。这是通过将伪造的mpirun路径添加到$PATH
中实现的,这将捕获执行mpirun的尝试并将其转发到mympirun。
接下来,脚本将导入来自lib/vsc/mympirun/mpi
的每个MPI实现。这样,可以通过观察调用mympirun的可执行文件的路径来推断请求的MPI版本。
脚本将使用相同的过程来确定调度器。可以通过使用--setmpi
/-M
和--schedtype
/-S
选项分别覆盖MPI版本和调度器版本。
一旦设置这两个版本,脚本将获取一些标准的MPI配置变量,例如可用的节点、子网掩码等。如果启用,它将处理CPU绑定。
设置后,它将转换命令行参数和其他全局环境变量到一个字典中,这些选项是所选MPI版本可以理解的。
最后,它将这些选项传递给所选MPI版本的正确mpirun可执行文件。
项目详情
vsc-mympirun-5.4.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3321106e4b6ba0b09634309003ff6f5a0e5e51d4419650ab826a46c150e05c6d |
|
MD5 | 56f94f0cc9dec8af27414cb43a07c64b |
|
BLAKE2b-256 | 70a19cbea14f325c461d50aa8a792334eb8fb76083853978fc29ce78cb2c0be2 |