由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进程?
感谢。
答案 0 :(得分:1)
Open MPI有mpirun --host host1,host2 sh -c 'my_script > /tmp/log.$OMPI_COMM_WORLD_RANK'
选项,它非常接近但不完全符合您的要求。
我认为没有一种本土方式可以实现您的期望。
话虽如此,可以通过包装器轻松实现
例如,通过命令行
stdout
每个MPI任务都会将其/tmp/log.<id>
重定向到fork_agent
。
另一种方法是使用mpirun --host host1,host2 --mca orte_fork_agent /.../wrapper my_script
my_script
基本上,而不是执行/.../wrapper my_script
,Open MPI将执行OMPI_COMM_WORLD_SIZE
并且有一点创造力,你必须编写的包装器可以做任何你需要的事情。
在此包装器中,您可能希望检查以下环境变量
OMPI_COMM_WORLD_RANK
OMPI_COMM_WORLD_LOCAL_SIZE
OMPI_COMM_WORLD_LOCAL_RANK
Flowable.generate