我是dask的新手,并且看起来有点奇怪的用例,我想在具有两个网络接口的“桥接”机器上设置一个dask调度程序,以便客户端可以连接到其中一个接口(“前面”),工作人员将住在连接到另一个接口的多台机器上(“后面”)。接口具有单独的IP地址和主机名。
基本上,我想做this picture,其中棕色和蓝色部分之间没有路由,除非通过带有调度程序的机器。 (图片来自dask发布的一些旧文档,0.7我认为,当事情显然比现在更不稳定时。)
一切都是64位Linux(Debian 8“jessie”),我正在使用版本0.14.0的dask和1.16.0的分布式安装在anaconda环境中。
dask-scheduler命令行工具似乎没有办法做多个主机名,我认为这就是我想要的。
我可以通过SSH端口转发获得我想要的效果。
例如,假设相关接口是计算机worker
,scheduler-front
,scheduler-back
和client
。两个scheduler-*
接口是同一台机器上的不同NIC,并且存在从client
到scheduler-front
的TCP路由,以及从scheduler-back
到worker
的TCP路由,但是从client
到worker
,从scheduler-front
到worker
,或从scheduler-back
到client
都没有路线。
然后,以下工作(下面的前导位是指示运行命令的机器的命令行提示符,'#'表示shell,'>>>'表示Python ):
首先,启动一个监听桥接主机“后面”的调度程序:
scheduler# dask-scheduler --host schedular-back
其次,启动一个worker并以普通方式将它连接到调度程序:
worker# dask-worker scheduler-back:8786
第三,将客户端上的localhost:8786转发给调度程序返回:调度程序机器上的8786,通过调度程序前端接口输入:
client# ssh -L 8786:scheduler-back:8786 scheduler-front
最后,在客户端计算机上启动客户端,并连接到转发端口的近端,其另一端可以看到调度程序。
client>>> from distributed import Client
client>>> cl = Client('127.0.0.1:8786')
client>>> ...
正如我所说,这是有效的,我可以做地图并收集并获得结果。
但是我不禁想到我做得太过分了,也许我错过了一些允许多宿主调度的简单方法。私有子网并不是那么奇怪,它们出现在容器和集群的上下文中。
有更聪明的方法吗?
如果感兴趣,不使用集群排队系统的原因是目标“工人”机器是带有GPU的机器,我们在让排队系统正确分配它时遇到一些困难,所以在那一刻,那台机器在排队系统之外工作。我们最终将解决这个问题,但就目前而言,我们正在努力解决这个问题。
另外,为了完整性,没有客户端在调度程序机器上的原因是,在我们的场景中,客户端需要进行可视化,而调度程序是机房中机架中的集群头节点并且用户无法实际访问。
答案 0 :(得分:1)
如果您未指定--host
到dask-scheduler
,则默认情况下会监听所有接口。例如:
$ dask-scheduler
distributed.scheduler - INFO - -----------------------------------------------
distributed.scheduler - INFO - Scheduler at: tcp://192.168.1.68:8786
distributed.scheduler - INFO - http at: 0.0.0.0:9786
distributed.scheduler - INFO - bokeh at: 0.0.0.0:8788
distributed.bokeh.application - INFO - Web UI: http://127.0.0.1:8787/status/
distributed.scheduler - INFO - -----------------------------------------------
和
$ netstat -tnlp | \grep 8786
tcp 0 0 0.0.0.0:8786 0.0.0.0:* LISTEN 23969/python
tcp6 0 0 :::8786 :::* LISTEN 23969/python
然后,您可以从所需的子网连接,使用正确的IP(v4或v6)地址联系调度程序。例如,您的员工可能会使用tcp://192.168.1.68:8786
和您的客户tcp://10.1.2.3:8786
。
如果你愿意听多个界面,但不是全部,那么目前这是不可能的。