You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SLURMRunner(dask-jobqueue)设置Dask Dashboard地址并通过SSH端口转发访问?

如何通过SLURMRunner(dask-jobqueue)设置Dask Dashboard地址并通过SSH端口转发访问?

你遇到的问题很典型:用SLURMRunner从dask-jobqueue启动远程Dask集群时,常规的本地配置方法(环境变量、dask.config.set()、本地配置文件)都没法修改调度器的Dashboard绑定地址,因为SLURMRunner是通过SLURM在远程节点独立启动调度器进程,本地的配置不会自动传递到远程作业环境中。下面给你几个可行的解决方案:


1. 最直接:在SLURMRunner构造时指定scheduler_options

这是推荐的方法,因为SLURMRunner会将scheduler_options中的参数直接传递给远程启动的调度器进程,确保配置生效:

import dask
from dask_jobqueue import SLURMRunner
from dask.distributed import Client

# 初始化SLURMRunner时,显式指定调度器的Dashboard地址
runner = SLURMRunner(
    scheduler_options={
        "dashboard_address": "0.0.0.0:8789"
    }
)

client = Client(runner)
# 打印Dashboard链接,确认配置(远程节点的地址会显示在这里)
print(client.dashboard_link)

配置生效后,你可以通过SSH端口转发将远程端口映射到本地:

# 在本地终端执行,将远程节点的8789端口映射到本地8789端口
ssh -L 8789:<远程节点IP>:8789 <你的集群用户名>@<集群登录节点IP>

之后在本地浏览器访问http://localhost:8789就能打开Dask Dashboard了。


2. 通过env参数传递环境变量配置

如果你习惯用DASK的环境变量配置方式,可以通过SLURMRunner的env参数,将配置变量显式传递给SLURM作业环境:

runner = SLURMRunner(
    env={
        "DASK_DISTRIBUTED__SCHEDULER__DASHBOARD__ADDRESS": "0.0.0.0:8789"
    }
)

这样远程启动的调度器进程会读取这个环境变量,应用指定的Dashboard地址。


为什么之前的方法没生效?

  • 本地环境变量设置:SLURM作业默认不会继承本地Shell的所有环境变量,你在本地设置的DASK_DISTRIBUTED__SCHEDULER__DASHBOARD__ADDRESS不会被远程调度器进程读取到。
  • dask.config.set()本地配置:这个方法只修改当前本地Python进程的配置,而远程节点启动的调度器是独立的进程,不会继承这个配置。
  • 本地dask.yaml配置文件:远程调度器进程会读取自身节点上的~/.config/dask/dask.yaml,而非你本地机器上的配置文件,所以仅在本地放置配置文件无效。

额外注意事项

  • 确认你选择的端口(比如8789)在远程节点未被占用,或者调整为其他可用端口。
  • 查看SLURMRunner的作业日志,确认调度器启动日志中显示dashboard at 0.0.0.0:8789,这是配置生效的标志。

备注:内容来源于stack exchange,提问作者user1834164

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:02:56