【发布时间】:2017-06-22 21:59:52
【问题描述】:
问题
如何将远程资源上的 Dask 工作人员的正确地址指定给本地运行的 Dask 调度程序?
情况
我有一个可以通过 ssh 访问的远程资源。在那里,我有一个 docker 容器,它运行一个包含运行 Dask、Distributed 所需的所有依赖项的映像。
运行时,容器执行以下操作:
dask-worker --nprocs 14 --nthreads 1 {inet_addr_local}:878
在同一个网络中,但在我的笔记本电脑上,我运行同一个图像的另一个容器。在这个容器中,我运行 Dask 调度程序,如下所示:
dask-scheduler --port 8786
当我启动调度程序时,一切都很好。当我启动工人容器时,它似乎连接到调度程序。在状态中,我看到以下内容:
Waiting to connect to: tcp://{this_matches_inet_address_of_local}:8786
在调度程序上,我看到重复记录以下内容,在循环中不断尝试联系/响应每个工作人员:
distributed.scheduler - INFO - Remove worker tcp://172.18.0.10:41508
distributed.scheduler - INFO - Removed worker tcp://172.18.0.10:41508
distributed.scheduler - ERROR - Failed to connect to worker 'tcp://172.18.0.10:44590': Timed out trying to connect to 'tcp://172.18.0.10:44590' after 3 s: OSError: [Errno 113] No route to host
问题(我认为)可以在这里看到。 tcp://172.18.0.10 不正确。在资源db.foo.net 上运行的工作人员可以通过me@db.foo.net ssh 进入。
从调度程序容器中,我可以看到我能够成功 ping db.foo.net。我认为工作人员假设他们的地址是他们所在容器的本地地址,而不是db.foo.net。我需要覆盖这个默认值作为工作人员的某种配置。我以为--host 标签会这样做,但这会导致 Tornado 抛出以下错误:OSError: [Errno 99] Cannot assign requested address。
【问题讨论】:
-
如果不是172.18.0.10,你能找到你的worker的数字IP吗?是不是在 eth0 以外的接口上?
标签: python ssh scheduler worker dask