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) 和工作节点 (Worker)。第一个地址将用于调度器,其余地址将用于工作节点(如果您希望调度器和工作节点共存于同一台机器上,可以重复第一个主机名)。
您可以通过传递
scheduler_options
和worker_options
字典关键字来配置调度器和工作节点。有关可用选项的详细信息,请参阅dask.distributed.Scheduler
和dask.distributed.Worker
类,但大多数情况下默认设置即可工作。您可以使用
connect_options
关键字配置 SSH 本身的使用,该关键字会将值传递给asyncssh.connect
函数。有关这些内容的更多信息,请参阅asyncssh
库的文档 https://asyncssh.readthedocs.io 。- 参数
- hosts
要在其上启动集群的主机名或 IP 地址列表。第一个将用于调度器,其余用于工作节点。
- 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)
创建一个包含三个工作节点的集群,每个工作节点有两个线程,并将 dashboard 托管在 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] 或 hostfile 中指定的第一个主机上运行,除非明确指定了 –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 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¶
可选参数