命令行

这是在多台机器上部署 Dask 的最基本方式。在生产环境中,这个过程通常由其他资源管理器自动化。因此,很少有人需要显式地遵循这些说明。相反,这些说明有助于理解集群管理器和其他自动化工具在底层做了什么,并帮助用户部署到目前没有自动化工具的平台。

一个 dask.distributed 网络包含一个 dask scheduler 进程和几个连接到该调度器的 dask worker 进程。这些是正常的 Python 进程,可以从命令行执行。我们在一个进程中启动 dask scheduler 可执行文件,在多个进程(可能在不同的机器上)中启动 dask worker 可执行文件。

为此,在一台节点上启动 dask scheduler

$ dask scheduler
Scheduler at:   tcp://192.0.0.100:8786

然后,在其余节点上启动 dask worker,并提供托管 dask scheduler 的节点的地址

$ dask worker tcp://192.0.0.100:8786
Start worker at:  tcp://192.0.0.1:12345
Registered to:    tcp://192.0.0.100:8786

$ dask worker tcp://192.0.0.100:8786
Start worker at:  tcp://192.0.0.2:40483
Registered to:    tcp://192.0.0.100:8786

$ dask worker tcp://192.0.0.100:8786
Start worker at:  tcp://192.0.0.3:27372
Registered to:    tcp://192.0.0.100:8786

工作节点连接到调度器,调度器随后会建立一个回连工作节点的长期网络连接。工作节点将从调度器那里得知其他工作节点的位置。

处理端口

调度器和工作节点都需要在开放端口上接受 TCP 连接。默认情况下,调度器绑定到端口 8786,工作节点绑定到随机开放端口。如果您在防火墙后面,可能需要打开特定端口或使用 --port--worker-port 关键字来告诉 Dask 监听特定端口。

dask scheduler --port 8000
dask worker --dashboard-address 8000 --nanny-port 8001

Nanny 进程

Dask 工作节点在 nanny 进程中运行,该进程监视工作节点进程并在必要时重新启动它。

诊断 Web 服务器

此外,Dask 调度器和工作节点使用 Bokeh 托管交互式诊断 Web 服务器。这些是可选的,但通常对用户有用。调度器上的诊断服务器尤其有价值,默认在端口 8787 上提供服务(可通过 --dashboard-address 关键字配置)。

有关相关端口的更多信息,请查看可用的命令行选项

自动化工具

有多种机制可以在集群上部署这些可执行文件,从手动 SSH 到所有机器到更自动化的系统,如 SGE/SLURM/Torque 或 Yarn/Mesos。此外,还存在集群 SSH 工具,可以将相同的命令发送到多台机器。我们建议在线搜索“cluster ssh”或“cssh”。

CLI 选项

注意

这里的命令行文档可能因您的安装版本而异。建议参考 dask scheduler --helpdask worker --help 的输出。

dask scheduler

启动一个 Dask 调度器。

dask scheduler [OPTIONS] [PRELOAD_ARGV]...

选项

--host <host>

本服务器的 URI、IP 或主机名

--port <port>

服务端口

--interface <interface>

首选网络接口,如 'eth0' 或 'ib0'

--protocol <protocol>

协议,如 tcp、tls 或 ucx

--tls-ca-file <tls_ca_file>

TLS 的 CA 证书文件(PEM 格式)

--tls-cert <tls_cert>

TLS 的证书文件(PEM 格式)

--tls-key <tls_key>

TLS 的私钥文件(PEM 格式)

--dashboard-address <dashboard_address>

诊断仪表板监听地址

默认

':8787'

--dashboard, --no-dashboard

启动仪表板 [默认: –dashboard]

--jupyter, --no-jupyter

在同一进程中启动一个 Jupyter 服务器。警告:这将使任何能访问您的仪表板地址的人都能运行 Python 代码

--show, --no-show

显示 web UI [默认: –show]

--dashboard-prefix <dashboard_prefix>

仪表板应用的前缀

--use-xheaders <use_xheaders>

在仪表板应用中使用 xheaders 进行头部的 SSL 终止

默认

False

--pid-file <pid_file>

写入进程 PID 的文件

--scheduler-file <scheduler_file>

写入连接信息的文件。如果您的集群位于共享网络文件系统上,这可能是一个共享连接信息的好方法。

--preload <preload>

调度器进程应加载的模块,如“foo.bar”或“/path/to/foo.py”。

--idle-timeout <idle_timeout>

调度器空闲多久后终止

--version

显示版本并退出。

参数

PRELOAD_ARGV

可选参数

dask worker

启动一个连接到现有调度器的 Dask 工作节点

dask worker [OPTIONS] [SCHEDULER] [PRELOAD_ARGV]...

选项

--tls-ca-file <tls_ca_file>

TLS 的 CA 证书文件(PEM 格式)

--tls-cert <tls_cert>

TLS 的证书文件(PEM 格式)

--tls-key <tls_key>

TLS 的私钥文件(PEM 格式)

--worker-port <worker_port>

服务计算端口,默认为随机。当使用 –nworkers 创建多个工作节点时,可以通过指定第一个和最后一个可用端口,例如 <第一个端口>:<最后一个端口> 来使用一系列顺序的工作节点端口。例如,–worker-port=3000:3026 将使用端口 3000, 3001, …, 3025, 3026。

--nanny-port <nanny_port>

服务 nanny 端口,默认为随机。当使用 –nworkers 创建多个 nanny 时,可以通过指定第一个和最后一个可用端口,例如 <第一个端口>:<最后一个端口> 来使用一系列顺序的 nanny 端口。例如,–nanny-port=3000:3026 将使用端口 3000, 3001, …, 3025, 3026。

--dashboard-address <dashboard_address>

诊断仪表板监听地址

--dashboard, --no-dashboard

启动仪表板 [默认: –dashboard]

--listen-address <listen_address>

工作节点绑定的地址。例如:tcp://0.0.0.0:9000tcp://:9000 用于 IPv4+IPv6

--contact-address <contact_address>

工作节点向调度器通告的用于与其及其他工作节点通信的地址。例如:tcp://127.0.0.1:9000

--host <host>

服务主机。应为调度器及其他工作节点可见的 IP 地址。如果需要不同的监听地址和联系地址,请参阅 –listen-address 和 –contact-address。请参阅 –interface。

--interface <interface>

网络接口,如 'eth0' 或 'ib0'

--protocol <protocol>

协议,如 tcp、tls 或 ucx

--nthreads <nthreads>

每个进程的线程数。

--nworkers <n_workers>

要启动的工作进程数。如果为负数,则使用 (CPU_COUNT + 1 + nworkers)。设置为 'auto' 可根据 CPU_COUNT 动态设置 nworkers 和 nthreads

--name <name>

此工作节点的唯一名称,如 'worker-1'。如果与 –nworkers 一起使用,则会附加进程编号,如 name-0, name-1, name-2, …

--memory-limit <memory_limit>
工作节点可使用的每个进程的内存字节数。
这可以是
- 一个整数(字节),注意 0 是表示没有内存管理的特殊情况。
- 一个浮点数(占总系统内存的比例)。
- 一个字符串(如 5GB 或 5000M)。
- 'auto' 用于自动计算内存限制。
默认

'auto'

--nanny, --no-nanny

在 nanny 进程中启动工作节点进行管理 [默认: –nanny]

--pid-file <pid_file>

写入进程 PID 的文件

--local-directory <local_directory>

存放工作节点文件的目录

--resources <resources>

用于任务约束的资源,如 “GPU=2 MEM=10e9”。资源分别应用于每个工作进程(仅在使用“–nworkers”启动多个工作进程时相关)。

--scheduler-file <scheduler_file>

包含 JSON 编码的调度器信息的文件名。与 dask scheduler –scheduler-file 一起使用

--death-timeout <death_timeout>

在关闭前等待调度器的时间(秒)

--dashboard-prefix <dashboard_prefix>

仪表板前缀

--lifetime <lifetime>

如果提供,在此持续时间后关闭工作节点。

--lifetime-stagger <lifetime_stagger>

随机偏移量以错开生命周期值

--worker-class <worker_class>

用于实例化工作节点的 Worker 类。

默认

'dask.distributed.Worker'

--lifetime-restart, --no-lifetime-restart

生命周期到期后是否重新启动工作节点。这假定您正在使用 –lifetime 和 –nanny 关键字

--preload <preload>

每个工作进程应加载的模块,如“foo.bar”或“/path/to/foo.py”

--preload-nanny <preload_nanny>

每个 nanny 应加载的模块,如“foo.bar”或“/path/to/foo.py”

--scheduler-sni <scheduler_sni>

调度器 SNI(如果与调度器主机名不同)

--version

显示版本并退出。

参数

SCHEDULER

可选参数

PRELOAD_ARGV

可选参数