命令行

这是在多台机器上部署 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

保姆进程

Dask 工作进程在保姆进程内运行,该进程监控工作进程并在必要时重新启动它。

诊断网页服务器

此外,Dask 调度器和工作节点使用 Bokeh 托管交互式诊断网络服务器。这些是可选的,但对用户通常很有用。调度器上的诊断服务器尤其有价值,默认情况下在端口 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

显示网页界面 [默认: –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>

服务保姆端口,默认为随机。当使用 –nworkers 创建多个保姆时,可以通过指定第一个和最后一个可用端口来使用连续的端口范围,如 <first-port>:<last-port>。例如,–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>
每个进程中工作线程可以使用的内存字节数。
这可以是:
- an integer (bytes), note 0 is a special case for no memory management.
- a float (fraction of total system memory).
- a string (like 5GB or 5000M).
- ‘auto’ for automatically computing the memory limit.
默认

'auto'

--nanny, --no-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-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>

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

--scheduler-sni <scheduler_sni>

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

--version

显示版本并退出。

参数

SCHEDULER

可选参数

PRELOAD_ARGV

可选参数