使用 Dask 计算导致执行挂起
Using Dask compute causes execution to hang
这是我之前关于使用 Dask 计算到 的问题之一的潜在答案的后续问题。
为什么使用Dask compute会导致执行卡在下面?
这是工作代码片段:
#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)
persist
的行为有所不同,具体取决于您是否有分布式客户端处于活动状态。在您的情况下,您在创建任何客户端之前调用它,结果是整个数据都被打包到图形描述中。这种行为在线程调度程序上是可以的,其中内存在工作人员之间共享,但是当您发布时,您正在将整个事情发送给调度程序,显然它令人窒息。
如果您先 client1
,您会注意到持久化发生得非常快(在这种情况下,调度程序仅获取指向数据的指针),并且发布-获取周期将按预期工作。
这是我之前关于使用 Dask 计算到
为什么使用Dask compute会导致执行卡在下面? 这是工作代码片段:
#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)
persist
的行为有所不同,具体取决于您是否有分布式客户端处于活动状态。在您的情况下,您在创建任何客户端之前调用它,结果是整个数据都被打包到图形描述中。这种行为在线程调度程序上是可以的,其中内存在工作人员之间共享,但是当您发布时,您正在将整个事情发送给调度程序,显然它令人窒息。
如果您先 client1
,您会注意到持久化发生得非常快(在这种情况下,调度程序仅获取指向数据的指针),并且发布-获取周期将按预期工作。