使用DASK在集群上启动功能

时间:2018-09-03 20:41:42

标签: server cluster-computing dask-distributed dask-delayed

我是DASK的新手,想测试一下如何在集群上运行DASK。该集群有一个主服务器和其他几个节点。登录主服务器后,我可以通过不带密码的简单ssh进入其他节点。      我想运行一个简单的函数来遍历大型数组。该功能定义如下。它将dt64转换为numpy datetime对象。

import xarray as xr import numpy as np from dask import compute, delayed import dask.multiprocessing from datetime import datetime, timedelta def converdt64(dt64): ts = (dt64 - np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's') return datetime.utcfromtimestamp(ts)

然后在终端上,通过应用此函数对大小为N的数组1D进行迭代。

values = [delayed(convertdt64)(x) for x in arraydata] results1 = compute(*values,scheduler='processes’)

这在头服务器上使用了一些核心,并且运行缓慢,但是很有效。然后,我尝试通过使用Client如下所示在群集的多个节点上启动该功能:

from dask.distributed import Client client = Client("10.140.251.254:8786 ») results = compute(*values, scheduler='distributed’)

它根本不起作用。如下有一些警告和一条错误消息。

distributed.comm.tcp - WARNING - Could not set timeout on TCP stream: [Errno 92] Protocol not available
distributed.comm.tcp - WARNING - Closing dangling stream in <TCP local=tcp://10.140.251.254:57257 remote=tcp://10.140.251.254:8786>

CancelledError: convertdt64-0205ad5e-214b-4683-b5c4-b6a2a6d8e52f

我也尝试了dask.bag,并且得到了相同的错误消息。集群上的并行计算不起作用的原因可能是什么?是由于某些服务器/网络配置,还是我对DASK客户端的使用不正确?预先感谢您的帮助!

最美好的祝愿

香农X

1 个答案:

答案 0 :(得分:0)

  

...然后,我尝试使用如下所示的Client在群集的多个节点上启动该功能:

我在尝试在调度程序上运行任务时遇到了类似的问题。节点连接很好。但是,尝试提交任务会导致取消。

记录的示例在本地或与调度程序位于同一节点。当我将客户端移动到调度程序节点时,问题就消失了。