OpenMPI:让每个进程写入stdout

问题描述 投票:0回答:1

由mpirun启动的子进程将其输出重定向到mpirun进程,因此所有输出都在一个节点上结束。

相反,我希望MPI生成的每个进程都在自己的节点上写入STDOUT,或者写入文件或命名管道。

我读了the faq并试了一些东西:

mpirun -host host1,host2 my_script >&1

只需将stdout从所有主机重定向到调用节点上的stdout(默认情况下)。干

mpirun -host host1,host2 my_script

其中my_script将输出重定向到>&1,只是捕获调用节点上进程的输出。

有没有办法让每个节点写入本地文件系统(例如)而不重定向到调用节点的mpirun进程?

谢谢。

openmpi
1个回答
1
投票

Open MPI有--output-file选项,它非常接近但不完全是你要求的。

我不认为有一种本土方式可以实现您的期望。

话虽这么说,这可以通过包装容易地实现

例如,通过命令行

mpirun --host host1,host2 sh -c 'my_script > /tmp/log.$OMPI_COMM_WORLD_RANK'

每个MPI任务都会将其stdout重定向到/tmp/log.<id>

另一种方法是使用fork_agent

mpirun --host host1,host2 --mca orte_fork_agent /.../wrapper my_script

基本上,开放式MPI将执行my_script而不是执行/.../wrapper my_script,并且有一点创造力,你必须编写的包装器可以做任何你需要的事情。在此包装器中,您可能希望检查以下环境变量

  • OMPI_COMM_WORLD_SIZE
  • OMPI_COMM_WORLD_RANK
  • OMPI_COMM_WORLD_LOCAL_SIZE
  • OMPI_COMM_WORLD_LOCAL_RANK
© www.soinside.com 2019 - 2024. All rights reserved.