MPI在docker主进程上

时间:2018-12-14 16:29:27

标签: docker mpi

处理horovod和docker的推荐方法是:https://github.com/uber/horovod/blob/master/docs/docker.md。这在某种程度上是很不好的,因为它将bash保留为主要的docker进程,而将python保留为次要。 Docker日志报告bash日志,docker状态取决于bash状态,如果bash进程关闭则docker关闭,等等,因此它认为其主要进程是bash,而它应该是我们正在启动的python进程。是否可以使所有主要的dockers工作者中的python进程成为主要进程?

我尝试了在外部启动mpirun进程,而不是在docker内部启动mpirun,并使用交互式docker start命令作为mpirun命令(docker容器已经使用nvidia-docker create进行了准备):

mpirun -H localhost,localhost \
-np 1 \
-bind-to none \
-map-by slot  \
-x NCCL_DEBUG=INFO \
-x LD_LIBRARY_PATH \
-x PATH \
-x NCCL_SOCKET_IFNAME=^docker0,lo \
-mca btl_tcp_if_exclude lo,docker0 \
-mca oob_tcp_if_exclude lo,docker0 \
-mca pml ob1 \
-mca btl ^openib \
docker start -a -i bajaga_aws-ls0-l : \
-np 1 \
-bind-to none \
-map-by slot  \
-x NCCL_DEBUG=INFO \
-x LD_LIBRARY_PATH \
-x PATH \
-x NCCL_SOCKET_IFNAME=^docker0,lo \
-mca btl_tcp_if_exclude lo,docker0 \
-mca oob_tcp_if_exclude lo,docker0 \
-mca pml ob1 \
-mca btl ^openib \
docker start -a -i bajaga_aws-ls1-l

但是那失败了-进程没有通过horovod进行通信,而是作为独立进程工作。

您知道我如何实现使python进程成为docker主进程吗?

1 个答案:

答案 0 :(得分:0)

通过一些技巧设法执行得足够好: *从入口点开始一直运行的容器,直到通过sigterm *将MPI内容作为另一个过程启动 *将输出写入进程1 stdout / err,以便docker日志工作 *在我的过程结束时,将sigterm发送到过程1,以便关闭整个容器。