首页 > 解决方案 > 访问 dask 集群中分散数据的成本

问题描述

我使用 dask 来并行化一些处理,这非常令人高兴。

我有一个案例,客户端的计算需要一些非常繁重的查找数据来生成,所以将这些数据分散到客户端:

[future_dict] = client.scatter([large_dict], broadcast=True)

然后计算类似于

def worker(i):
    key = do_some_work()
    data = future_dict.result()[key] 
    res = do_some_more_work( data )
    return (i, res )

f = client.map( worker, range(200))
res = client.gather( f )

这有效,但查找future_dict.result()[key]速度很慢。在 worker 中进行查找所需的时间类似于 unpickl'ing 的腌制版本large_dict,所以我猜我的字典在每个 worker 中都反序列化了。

我可以做些什么来更快地访问分散的数据吗?例如,如果我关于在每个工作人员中反序列化的数据的假设是正确的,我可以做些什么来使反序列化只在每个客户端中发生一次吗?

标签: pythondaskdask-distributed

解决方案


你在做什么应该没问题,但如果你想让它更快,你可以在未来传递一个明确的论点。

def func(i, my_dict=None):
    key = do_some_work()
    data = my_dict[key] 
    res = do_some_more_work( data )
    return (i, res )

f = client.map( func, range(200), my_dict=future_data)
res = client.gather( f )

推荐阅读