如何确定 dask.distributed.cluster 工人的最大数量

How to determine the maximal number of dask.distributed.cluster workers

TL;DR:如何访问 dask.distributed.client 可访问的最大工作人员数量,其中包括尚未启动的工作人员,并将与自适应和非自适应缩放一起工作策略?

我开发了一个library for adaptive parallel execution of functions, which plans ahead what points to execute. For that we need to know how many workers can be accessed in parallel, and we useclient.ncores()函数。

但是,由于以下几个原因,这种方法存在问题:

因此我想知道是否有一种编程方式来检查客户端并确定一个 dask 集群可以获取多少个工人。

针对您正在寻找的内容的通用解决方案不存在也不可能(据我所知)存在。对于许多系统类型,dask worker 的数量没有硬性限制。你在这里找到的任何东西都可能必须针对个别秋季集群变体进行定制,如果它有效的话。

这必须是集群的 属性,而不是客户端。 LocalClusters 可以根据需要启动尽可能多的 workers/processes/threads - 在某些时候这不会有效,但数量不受限制。有关实施细节,请参阅 LocalCluster and its parent class SpecCluster

其他风格,例如整个集群的 dask_jobqueue have a totally different model, whereby nodes are allocated by the HPC workload manager and are theoretically unbounded but are in practice limited by other workloads on the cluster and by your account & the HPC's configuration; similarly kube_cluster will scale up unless limited by the helm chart, quotas, available resources, or your credit card bouncing. If using dask Gateway, the administrator can specify maximum core, memory, and worker counts,这些限制可以通过集群配置访问。但是,如果这些是无界的,那么这些值就没有硬性限制。

如果您需要为特定的集群变体实现此功能,您可以缩小问题范围并可能获得更具体的帮助;但我认为你在这里可能仅限于使用每个集群的 APIs 来获取你想要的信息(例如 google/aws/azure 等的 kubernetes API,也许是 pyslurm 等),并且没有保证其中许多选项都有实际上限。