SSH

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

备注

在实例化 SSHCluster 之前,建议为您的本地机器和其他机器配置无密钥 SSH。例如,在 Mac 上,要 SSH 到本地主机(本地机器),您需要确保在系统偏好设置 -> 共享中设置了远程登录选项。此外,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[源代码]

使用 SSH 部署 Dask 集群

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

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

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

参数
主机

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

连接选项

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

worker_options

传递给工作者的关键字。

scheduler_options

传递给调度器的参数。

worker_class

用于创建工作者的 Python 类。

远程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}

或者你可以指定一个包含主机列表的hostfile:

$ 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 集群。一个 ‘dask scheduler’ 进程将在 [HOSTNAMES] 或主机文件中指定的第一个主机上运行,除非明确指定了 –scheduler。每个主机上将运行一个或多个 ‘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调度器和dask工作命令输出的目录。

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

提供保姆端口,默认为随机

--remote-dask-worker <remote_dask_worker>

要运行的工作线程。

默认

'distributed.cli.dask_worker'

--version

显示版本并退出。

参数

HOSTNAMES

可选参数