【问题标题】:Using Dask compute causes execution to hang使用 Dask 计算会导致执行挂起
【发布时间】:2018-01-10 03:24:00
【问题描述】:

这是我之前关于使用 Dask 计算到 access one element in a large array 的问题之一的潜在答案的后续问题。

为什么使用 Dask 计算会导致执行在下面挂起? 这是工作代码 sn-p:

#Suppose you created a scheduler at the ip address of 111.111.11.11:8786


from dask.distributed import Client
import dask.array as da

# client1
client1 = Client("111.111.11.11:8786")
x = da.ones(10000000, chunks=(100000,))  # 1e7 size array cut into 1e5 size chunks
x = x.persist()
client1.publish_dataset(x=x)

# client2
client2 = Client("111.111.11.11:8786")
x = client2.get_dataset('x')  #get the lazy collection x
result = x[0].compute() #code execution hangs here
print(result)

【问题讨论】:

    标签: dask dask-distributed dask-delayed


    【解决方案1】:

    persist 的行为不同,具体取决于您是否有一个分布式客户端处于活动状态。在您的情况下,您在创建任何客户端之前调用它,结果是将整个数据打包到图形描述中。这种行为在线程调度程序上是可以的,在线程调度程序中,工作人员之间共享内存,但是当您发布时,您会将整个内容发送到调度程序,显然它会窒息。

    如果您先创建client1,您会注意到持久化发生得非常快(在这种情况下,调度程序只获取指向数据的指针),并且发布-获取周期将按预期工作。

    【讨论】:

    • 嗨MDurant,当我在persist之前定义client1时,仍然会出现延迟。为了保持一致性,我更新了上面示例中的代码。
    • 延迟是可以的——当你坚持时,你仍在工作人员中创建数据——但现在成功了吗?您的代码几乎可以立即在我的笔记本电脑上为我运行。
    • 我能够让它工作。我有两个问题。首先,我不得不使用 tcp://111.111.11.11:8786,而不是使用 111.111.11.11:8786。其次,我没有为调度程序创建任何工作人员。有趣的是,在使用persist 后定义客户端时,我能够让代码正常工作。
    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多