Dask-MPI 的工作原理

Dask-MPI 的工作原理

Dask-MPI 的工作原理是使用 mpi4py 包,并使用 MPI 在不同的 MPI 级别(rank)上选择性地运行不同的代码。因此,与 mpi4py 包的任何其他应用一样,它需要通过运行 mpirunmpiexec 命令来创建适当的 MPI 环境。

mpirun -np 8 dask-mpi --no-nanny --scheduler-file ~/scheduler.json

mpirun -np 8 python my_dask_script.py

使用 Dask-MPI CLI

按照惯例,Dask-MPI 始终在 MPI 级别 0 上启动 Scheduler。使用 CLI (dask-mpi) 时,Dask-MPI 在剩余的 MPI 级别(MPI 级别 1 及以上)上启动 Workers(或 Nannies 和 Workers)。在每个 MPI 级别上,在创建 Scheduler 和 Workers 后,都会启动一个 tornado 事件循环。这些事件循环会一直运行,直到向其中一个 MPI 进程发送终止信号,然后整个 Dask 集群(所有 MPI 级别)都会被关闭。

使用 Dask-MPI CLI 的 --no-scheduler 选项时,可以将更多 Worker 添加到现有 Dask 集群中。由于这两次运行将在不同的 mpirunmpiexec 执行中,它们仅通过 Scheduler 相互关联。如果新集群中的 Worker 崩溃并导致整个 MPI 环境关闭,这与第一个(原始)Dask 集群无关。同样,如果第一个集群被关闭,新 Worker 将等待 Scheduler 重新激活以便重新连接。

使用 Dask-MPI API

同样,Dask-MPI 始终在 MPI 级别 0 上启动 Scheduler。使用 initialize() 方法时,Dask-MPI 在 MPI 级别 1 上运行 Client 脚本,并在剩余的 MPI 级别(MPI 级别 2 及以上)上启动 Workers。Dask Scheduler 和 Workers 在其指定的 MPI 级别上创建后,会启动其 tornado 事件循环,这些事件循环会一直运行,直到 Client 进程(MPI 级别 1)向 Scheduler 发送终止信号。一旦 Scheduler 收到终止信号,它也会关闭 Workers。