SSH
目录
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_options
和worker_options
字典关键字来配置调度器和工作进程。有关可用选项的详细信息,请参阅dask.distributed.Scheduler
和dask.distributed.Worker
类,但默认设置应适用于大多数情况。您可以使用
connect_options
关键字配置 SSH 本身的使用,该关键字将值传递给asyncssh.connect
函数。有关这些选项的更多信息,请参阅asyncssh
库的文档 https://asyncssh.readthedocs.io。- 参数
- hosts
用于启动集群的主机名或地址列表。第一个地址将用于调度器,其余地址用于工作进程。
- connect_options
传递给
asyncssh.connect()
的关键字参数。这可能包括port
、username
、password
或known_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¶
可选参数