【问题标题】:MPI: Printing logs per NodeMPI:每个节点打印日志
【发布时间】: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

【问题讨论】:

    标签: mpi distributed-computing openmpi


    【解决方案1】:

    你可以

    1. 之后使用简单的 shell 脚本合并文件
    2. 在日志字符串上使用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 将排名号添加到日志行的开头。我只需要处理文本文件,我正在寻找一种方法将它们即时写入相应的节点
    猜你喜欢
    • 2021-02-28
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多