` 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进程环境中的环境变量包括classpathld_library_pathld_preloadpathpythonpathpythonunbuffered和所有p再加上daplipathkmpmklo64omppscpsmtmivsmp

要将其他变量添加到此列表中,可以使用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等待输出的时间量,也可以使用选项--禁用输出检查致命使警告不致命。在这种情况下,将打印警告,但程序不会中断。

干运行

mympirunonly pr在它将要运行的命令(不实际运行它)中,可以使用mympirun--dry runmympirun-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可执行文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在ElasticSearch中插入条目的最佳方式是什么?   如何使用java播放视频并从中捕获帧   断言在Java良好实践中主动抛出断言错误?   swing Java编译有没有办法告诉编译器忽略部分代码?   java如何在执行另一个测试之后执行一个测试?   java添加两个数字链表   java如何通过代码编辑awt文本字段   jade无效缩进上的java错误;应为0个空格   java我可以在不安装facebook的情况下使用Android版facebook sdk。apk?   java现实地说,我为什么要使用DuckType或控制反转?   Java性能:Java逻辑从巨大的列表中找到最高的3个数字   java使用Lucene/Solr和Spring数据   java按照线程启动的顺序完成线程   java无法解析hibernate。cfg。脱机时使用xml