在 HPC 系统上使用 Dask 的常见工作流程

问题描述 投票:0回答:1

我是 Dask 新手。我目前正在由 SLURM 管理的 HPC 中工作,其中包含一些计算节点(执行作业的节点)和登录节点(我通过 SSH 访问该节点以发送 SLURM 作业)。我正在寻找定义我的工作流程,将我的任务从不同节点分配到不同的 CPU。

我的第一次尝试包括一个脚本:

  1. 使用我的自定义设置启动 SLURMCluster 类
  2. 使用 SLURMCluster 对象的 get_client() 方法获取客户端。
  3. 使用Client对象的map、gather、submit方法来分发和管理任务。
  4. 所有任务解决后,我关闭客户端和集群。

然后,我按照以下步骤在登录节点中执行脚本:

  1. 我使用端口转发通过 SSH 连接到登录节点(从本地计算机访问端口 8787 上的 Dask 仪表板)。
  2. 我在登录节点上运行Python脚本。
  3. 我可以在脚本运行时访问 Dask 仪表板。

此工作流程成功完成了我的任务,但有一些限制:

  • Python 脚本完成后,Dask 仪表板就会关闭。
  • 脚本完成后,我将无法访问所有仪表板信息。
  • 此工作流程迫使我在登录节点上保留长时间运行的进程,这是我想避免的。
  • 它还需要保持我的 SSH 会话打开,如果我的本地计算机关闭或连接丢失,这是有风险的。

我的问题:是否有更常见或更好的方法来管理像这样的 HPC 系统上的 Dask 任务,同时避免这些问题? 例如,如何保持 Dask 调度程序和仪表板独立于脚本执行运行?

感谢您的指导! 我也在Dask论坛

提出了这个问题
dask hpc dask-distributed
1个回答
0
投票

如 Dask Discourse Forum 上的回答。

对于集群关闭后的 Dahsboard 信息,您可以使用 performance_report 上下文管理器

另一种解决方案是使用一个脚本来启动 Dask 集群,并使用另一个脚本向其提交作业。您可以将调度程序信息保存到 json 文件中,以将其共享给另一个进程。 对于长时间运行的流程,常见的工作流程是提交一个“主”作业,该作业将创建 Scheduler 和客户端,并通过 SLURMCluster 为 Workers 提交其他作业。你也可以看看dask-mpi。

© www.soinside.com 2019 - 2024. All rights reserved.