Dask:从客户端获取调度程序地址

Dask: Get scheduler address from Client

我正在使用 dask-mpi 在我的 HPC 上进行部署。我想获得与另一个库一起使用的调度程序地址。这在 LocalCluster(或任何其他显式集群定义)的情况下很简单,例如:

from dask.distributed import Client, LocalCluster

cluster = LocalCluster()
client = Client(cluster)

address = cluster.scheduler_address

但是 dask-mpi 初始化 没有 集群对象:

from dask.distributed import Client
from dask_mpi import initialize

initialize()
client = Client()

尝试访问基础 client.cluster 没有帮助,因为在这种情况下,它被设置为 None

是否有其他方法可以从 client 或其他地方获取调度程序地址?谢谢!

这不是直接的解决方案,直接来自 docs,但一种方法是指定写入调度程序文件的位置:

mpirun -np 4 dask-mpi --scheduler-file ~/dask-scheduler.json

该文件将包含连接信息:

from dask.distributed import Client
client = Client(scheduler_file='~/dask-scheduler.json')

目前没有记录(至少我在 docs 中找不到),但我发现 Client 对象有一个 scheduler 属性。地址和其他属性可以像这样获得:

from dask.distributed import Client
client = Client()
address = client.scheduler.address

我想 client.scheduler 应该 return 一个 Scheduler 对象,但我还没有做更多的挖掘。