命令行

这是在多台机器上部署 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 进程内运行,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 创建多个工作进程时,可以通过指定第一个和最后一个可用端口(如 <first-port>:<last-port>)来使用连续范围的端口。例如,–worker-port=3000:3026 将使用端口 3000, 3001, …, 3025, 3026。

--nanny-port <nanny_port>

服务 nanny 端口,默认为随机。使用 –nworkers 创建多个 nanny 进程时,可以通过指定第一个和最后一个可用端口(如 <first-port>:<last-port>)来使用连续范围的 nanny 端口。例如,–nanny-port=3000:3026 将使用端口 3000, 3001, …, 3025, 3026。

--dashboard-address <dashboard_address>

监听诊断仪表盘的地址

--dashboard, --no-dashboard

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

--listen-address <listen_address>

工作进程绑定的地址。示例:IPv4+IPv6 使用 tcp://0.0.0.0:9000tcp://:9000

--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>

用于实例化工作进程的工作进程类。

默认值

'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

可选参数