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:每个节点打印日志的主要内容,如果未能解决你的问题,请参考以下文章

lua redis.log日志打印在哪

Log日志打印mybatis中sql日志并存放到指定文件中

C语言中简单的日志分类打印

srpingboot 对每个请求 参数 和 响应结果 进行日志打印

如何打印日志和测量执行时间

如何在 C++ 中使用 MPI 收集字符字符串并为每个进程打印它们?