SSH

通过 SSH 在非正式管理的机器网络上设置 Dask 非常容易。这可以通过手动使用 SSH 和 Dask 命令行接口 来完成,也可以通过使用 dask.distributed.SSHCluster Python 集群管理器dask-ssh 命令行工具自动完成。本文档描述了这两种选项。

注意

在实例化 SSHCluster 之前,建议为您的本地机器和其他机器配置无密码 SSH。例如,在 Mac 上通过 SSH 连接到 localhost(本地机器),您需要在“系统偏好设置”->“共享”中确保设置了“远程登录”选项。此外,id_rsa.pub 应该添加到 authorized_keys 中以实现无密码登录。

Python 接口

dask.distributed.SSHCluster(hosts: list[str] | None = None, connect_options: dict | list[dict] | None = None, worker_options: dict | None = None, scheduler_options: dict | None = None, worker_module: str = 'deprecated', worker_class: str = 'distributed.Nanny', remote_python: str | list[str] | None = None, **kwargs: Any) distributed.deploy.spec.SpecCluster[source]

使用 SSH 部署 Dask 集群

SSHCluster 函数在您提供的一组机器地址上为您部署 Dask 调度器和工作进程。第一个地址将用于调度器,其余的将用于工作进程(如果您希望调度器和工作进程共存于一台机器上,可以重复第一个主机名)。

您可以通过传递 scheduler_optionsworker_options 字典关键字来配置调度器和工作进程。有关可用选项的详细信息,请参阅 dask.distributed.Schedulerdask.distributed.Worker 类,但默认设置应适用于大多数情况。

您可以使用 connect_options 关键字配置 SSH 本身的使用,该关键字将值传递给 asyncssh.connect 函数。有关这些选项的更多信息,请参阅 asyncssh 库的文档 https://asyncssh.readthedocs.io

参数
hosts

用于启动集群的主机名或地址列表。第一个地址将用于调度器,其余地址用于工作进程。

connect_options

传递给 asyncssh.connect() 的关键字参数。这可能包括 portusernamepasswordknown_hosts 等。有关完整信息,请参阅 asyncssh.connect()asyncssh.SSHClientConnectionOptions 的文档。如果是一个列表,则其长度必须与 hosts 相同。

worker_options

传递给工作进程的关键字参数。

scheduler_options

传递给调度器的关键字参数。

worker_class

用于创建工作进程的 Python 类。

remote_python

远程节点上 Python 的路径。

另请参阅

dask.distributed.Scheduler
dask.distributed.Worker
asyncssh.connect

示例

创建一个包含一个工作进程的集群

>>> from dask.distributed import Client, SSHCluster
>>> cluster = SSHCluster(["localhost", "localhost"])
>>> client = Client(cluster)

创建一个包含三个工作进程的集群,每个工作进程有两个线程,并将仪表盘托管在端口 8797 上

>>> from dask.distributed import Client, SSHCluster
>>> cluster = SSHCluster(
...     ["localhost", "localhost", "localhost", "localhost"],
...     connect_options={"known_hosts": None},
...     worker_options={"nthreads": 2},
...     scheduler_options={"port": 0, "dashboard_address": ":8797"}
... )
>>> client = Client(cluster)

在每个主机上创建一个包含两个工作进程的集群

>>> from dask.distributed import Client, SSHCluster
>>> cluster = SSHCluster(
...     ["localhost", "localhost", "localhost", "localhost"],
...     connect_options={"known_hosts": None},
...     worker_options={"nthreads": 2, "n_workers": 2},
...     scheduler_options={"port": 0, "dashboard_address": ":8797"}
... )
>>> client = Client(cluster)

使用不同工作进程类的示例,特别是来自 dask-cuda 项目的 CUDAWorker

>>> from dask.distributed import Client, SSHCluster
>>> cluster = SSHCluster(
...     ["localhost", "hostwithgpus", "anothergpuhost"],
...     connect_options={"known_hosts": None},
...     scheduler_options={"port": 0, "dashboard_address": ":8797"},
...     worker_class="dask_cuda.CUDAWorker")
>>> client = Client(cluster)

命令行

便捷脚本 dask-ssh 会打开到目标计算机的多个 SSH 连接,并相应地初始化网络。您可以向它提供主机名或 IP 地址列表

$ dask-ssh 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4

或者您可以使用标准的 UNIX 分组

$ dask-ssh 192.168.0.{1,2,3,4}

或者您可以指定一个包含主机列表的主机文件

$ cat hostfile.txt
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4

$ dask-ssh --hostfile hostfile.txt

注意

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

dask-ssh

通过 SSH 启动 Dask 集群。除非明确指定 --scheduler,否则“dask scheduler”进程将在 [HOSTNAMES] 或主机文件中指定的第一个主机上运行。每个主机上将运行一个或多个“dask worker”进程。使用 --nworkers 标志调整每个主机上运行的 dask worker 进程数,使用 --nthreads 标志调整每个 dask worker 进程使用的 CPU 数量。

dask-ssh [OPTIONS] [HOSTNAMES]...

选项

--scheduler <scheduler>

指定调度器节点。默认为第一个地址。

--scheduler-port <scheduler_port>

指定调度器端口号。

默认

8786

--nthreads <nthreads>

每个工作进程的线程数。默认为核心数除以每个主机的进程数。

--nworkers <n_workers>

每个主机的工作进程数。

默认

1

--hostfile <hostfile>

包含主机名/IP 地址的文本文件

--ssh-username <ssh_username>

建立 SSH 连接时使用的用户名。

--ssh-port <ssh_port>

用于 SSH 连接的端口。

默认

22

--ssh-private-key <ssh_private_key>

用于 SSH 连接的私钥文件。

--nohost

不将主机名传递给工作进程。

--log-directory <log_directory>

用于在所有集群节点上保存 dask scheduler 和 dask worker 命令输出的目录。

--local-directory <local_directory>

用于在所有集群节点上放置工作进程文件的目录。

--remote-python <remote_python>

远程节点上 Python 的路径。

--memory-limit <memory_limit>

工作进程可以使用的内存字节数。这可以是整数(字节)、浮点数(总系统内存的比例)、字符串(如 5GB 或 5000M)、'auto' 或零(表示无内存管理)。

默认

'auto'

--worker-port <worker_port>

计算服务端口,默认为随机端口。

--nanny-port <nanny_port>

Nanny 服务端口,默认为随机端口。

--remote-dask-worker <remote_dask_worker>

要运行的工作进程。

默认

'distributed.cli.dask_worker'

--version

显示版本并退出。

参数

HOSTNAMES

可选参数