SSH
内容
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_options和worker_options字典关键字来配置调度器和工作器。有关可用选项的详细信息,请参阅dask.distributed.Scheduler和dask.distributed.Worker类,但在大多数情况下,默认设置应该可以正常工作。您可以使用
connect_options关键字配置 SSH 的使用,该关键字将值传递给asyncssh.connect函数。有关这些选项的更多信息,请参阅asyncssh库的文档 https://asyncssh.readthedocs.io 。- 参数
- 主机
要在其上启动集群的主机名或地址列表。第一个将用于调度器,其余的用于工作节点。
- 连接选项
传递给
asyncssh.connect()的关键字参数。这可能包括port、username、password或known_hosts等。有关完整信息,请参阅asyncssh.connect()和asyncssh.SSHClientConnectionOptions的文档。如果是一个列表,它必须与hosts的长度相同。- worker_options
传递给工作者的关键字。
- scheduler_options
传递给调度器的参数。
- worker_class
用于创建工作者的 Python 类。
- 远程Python
远程节点上的 Python 路径。
参见
dask.distributed.Schedulerdask.distributed.Workerasyncssh.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¶
可选参数