` mympirun是一个工具,可以让hpc集群的用户更容易地运行性能良好的mpi程序。
vsc-mympirun的Python项目详细描述
说明
mympirun
是一个让hpc集群用户更容易运行性能良好的mpi程序的工具。
它环绕着mpiexec
/mpirun
/…不同MPI实现(OpenMPI、英特尔MPI等)提供的命令。
mympirun
将确定要使用的mpirun
命令,设置环境,并考虑配置环境的可用资源。
最初由根特大学的hpc团队创建。
许可证
vsc mympirun
在GNU通用公共许可证(GPL)版本2下提供。
基本用法
使用mympirun的最基本形式是mympirun[options]您的程序[程序选项]
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
命令。
默认情况下,它将使用所有可用的内核,即:
- 如果使用本地调度程序,则当前系统上的所有核心
- 如果使用
PBS
调度程序,则分配给当前作业的所有核心
如果需要,可以使用--hybrid
、--universe
、--double
或--multi
选项更改此选项,请参见下文。
默认情况下,也会启用将MPI进程固定到核心的功能(可以使用--disable pinmpi
禁用)。
它还将利用默认使用的mpi库的torque集成,使用pbsdsh
而不是ssh
启动mpi进程。(另请参见:控制启动器
配置mympirun
要全面了解可用的mympirun
选项,请运行mympirun--help
对于每个命令行选项,都有一个对应的环境变量$mympirun
(例如,--basepath
对应于$mpi_basepath
)和配置文件项。命令行选项覆盖环境变量,环境变量覆盖配置文件。
控制进程数
--混合动力
--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
选项还需要一个整数。此整数将是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
和所有p再加上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
控制发射器
在最新的英特尔MPI版本(>;4.1)中,MPIRun使用Hydra作为其进程管理器。可以使用--launcher
选项更改hydra使用的启动器。(请参阅引导选项)
默认情况下,mympirun将使用pbsdsh
作为启动程序,该启动程序由torque/pbs资源管理器提供。
它允许在转矩控制下分配任务,确保过程正确地固定在作业中可用的资源上。
这是使用ssh作为启动程序的更好选择。
将选项传递到mpirun
要将选项直接传递给mpirun命令,请使用--mpironoptions
。此选项与一系列选项一起使用,然后附加到mympirun生成的mpirun命令中。
与英特尔MPI一起使用的选项可以在英特尔MPI文档的"命令参考"部分找到。有关OpenMPI的选项,请查看MPIRun手册页
挂起检测
如果您的mpi程序长时间没有任何输出,mympirun将假定有问题,并作为安全措施中断您的工作(我们不希望您的程序"挂起"数小时,甚至数天,而不真正执行任何操作)。mympirun等待输出的默认时间是一小时(3600秒)。
您可以使用带有秒数的选项输出检查超时
更改mympirun等待输出的时间量,也可以使用选项--禁用输出检查致命
使警告不致命。在这种情况下,将打印警告,但程序不会中断。
干运行
让mympirun
only pr在它将要运行的命令(不实际运行它)中,可以使用mympirun--dry run
或mympirun-d
例如:
$module加载intel/2018a
$mympirun——试运行./mpi_你好
MMPRUN…-genv i_mpi_u面料shm:dapl…- NP 16…你好
调试
要从mympirun本身获取所有调试信息,请使用选项--debug
或仅使用-d
。默认情况下,这将打印到标准输出。
要在MPI级别进行调试,请使用--debugmpi
使用选项--logtofile
内部工作流程
mympirun的第一步是确保每个mpirun命令都通过mympirun。这是通过在$path
前面添加一个伪mpirun路径来完成的,该路径将捕获执行mpirun的尝试并将其转发给mympirun。
接下来,脚本将从lib/vsc/mympirun/mpi
导入每个mpi风格的实现。这样就可以通过观察名为mympirun的可执行文件的路径来推断请求的mpi风格。
它将遵循确定调度程序的相同过程。分别使用--setmpi
/-m
和--schedtype
/-s
选项可以覆盖MPI风格和调度程序风格。
一旦设置了这两种类型,脚本将获得一些标准的mpi配置变量,如可用节点、netmask,…如果启用,它将处理CPU固定。
设置之后,它将把命令行参数和其他全局环境变量转换为dict,其中包含所选mpi风格可以理解的选项。
最后,它将这些选项传递给所选MPI风格的正确MPIRun可执行文件。
推荐PyPI第三方库
--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
选项还需要一个整数。此整数将是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
和所有p再加上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
控制发射器
在最新的英特尔MPI版本(>;4.1)中,MPIRun使用Hydra作为其进程管理器。可以使用--launcher
选项更改hydra使用的启动器。(请参阅引导选项)
默认情况下,mympirun将使用pbsdsh
作为启动程序,该启动程序由torque/pbs资源管理器提供。
它允许在转矩控制下分配任务,确保过程正确地固定在作业中可用的资源上。
这是使用ssh作为启动程序的更好选择。
将选项传递到mpirun
要将选项直接传递给mpirun命令,请使用--mpironoptions
。此选项与一系列选项一起使用,然后附加到mympirun生成的mpirun命令中。
与英特尔MPI一起使用的选项可以在英特尔MPI文档的"命令参考"部分找到。有关OpenMPI的选项,请查看MPIRun手册页
挂起检测
如果您的mpi程序长时间没有任何输出,mympirun将假定有问题,并作为安全措施中断您的工作(我们不希望您的程序"挂起"数小时,甚至数天,而不真正执行任何操作)。mympirun等待输出的默认时间是一小时(3600秒)。
您可以使用带有秒数的选项输出检查超时
更改mympirun等待输出的时间量,也可以使用选项--禁用输出检查致命
使警告不致命。在这种情况下,将打印警告,但程序不会中断。
干运行
让mympirun
only pr在它将要运行的命令(不实际运行它)中,可以使用mympirun--dry run
或mympirun-d
例如:
$module加载intel/2018a $mympirun——试运行./mpi_你好 MMPRUN…-genv i_mpi_u面料shm:dapl…- NP 16…你好
调试
要从mympirun本身获取所有调试信息,请使用选项--debug
或仅使用-d
。默认情况下,这将打印到标准输出。
要在MPI级别进行调试,请使用--debugmpi
使用选项--logtofile
内部工作流程
mympirun的第一步是确保每个mpirun命令都通过mympirun。这是通过在$path
前面添加一个伪mpirun路径来完成的,该路径将捕获执行mpirun的尝试并将其转发给mympirun。
接下来,脚本将从lib/vsc/mympirun/mpi
导入每个mpi风格的实现。这样就可以通过观察名为mympirun的可执行文件的路径来推断请求的mpi风格。
它将遵循确定调度程序的相同过程。分别使用--setmpi
/-m
和--schedtype
/-s
选项可以覆盖MPI风格和调度程序风格。
一旦设置了这两种类型,脚本将获得一些标准的mpi配置变量,如可用节点、netmask,…如果启用,它将处理CPU固定。
设置之后,它将把命令行参数和其他全局环境变量转换为dict,其中包含所选mpi风格可以理解的选项。
最后,它将这些选项传递给所选MPI风格的正确MPIRun可执行文件。