MPI:每个节点打印日志
Posted
技术标签:
【中文标题】MPI:每个节点打印日志【英文标题】:MPI: Printing logs per Node 【发布时间】:2021-09-24 19:54:57 【问题描述】:MPI 不支持有序打印日志。有没有办法让每个节点打印日志?
更精细的方法是将--output-filename
与openmpi一起使用,它将stdout、stderr写入每个进程的节点中的文件,即,如果我有一个mpi作业在2个节点上运行,每个节点上有2个进程,我可以看到:
Node1:
rank.0/stdout, rank.0/stderr
rank.1/stdout, rank.1/stderr
Node2:
rank.2/stdout, rank.2/stderr
rank.3/stdout, rank.3/stderr
如何即时合并这些文件并写入单个文件(或该节点上的标准输出)? 理想情况下,我想将 node1 上的所有日志合并到一个日志,并将 node2 上的所有日志合并到 node2 上的另一个日志。 P.S:我正在研究python3
【问题讨论】:
【参考方案1】:你可以
-
之后使用简单的 shell 脚本合并文件
在日志字符串上使用
MPI_Gather
并将它们从根进程中写出。
在 MPI 中同步写入的其他尝试可能不起作用。
【讨论】:
感谢您的评论维克多。我正在寻找一种在运行过程中而不是在过程之后进行的选项。是否可以在 stdout/stderr 上使用 MPI_Gather 以便我可以从节点 1 上的 0、1 级和节点 2 上的 2,3 级收集标准输出和标准错误?【参考方案2】:某些实现允许在mpiexec
中添加“前置排名”参数。例如,使用 MPICH 我可以执行 mpiexec -np 4 -l -prepend-rank
并且每一行都以 [N]
为前缀,其中 N 是排名。
如果您将这些日志用于工作流程中的另一个步骤,您可能需要查看 MPI-IO 选项,并协调将日志写入一个文件。 (请注意,MPI-IO 和文本文件可能是一个挑战。使用二进制数据推断 MPI-IO 行为要容易得多)。
【讨论】:
我正在使用 mpirun,它可以选择使用 --tag-output 将排名号添加到日志行的开头。我只需要处理文本文件,我正在寻找一种方法将它们即时写入相应的节点以上是关于MPI:每个节点打印日志的主要内容,如果未能解决你的问题,请参考以下文章