在Dask中预分散数据对象是否有优势?

埃里克姆

如果我将数据对象预分散到多个工作节点上,是否会将它完整地复制到每个工作节点上?如果该数据对象很大,这样做有好处吗?

以该futures接口为例:

client.scatter(data, broadcast=True)
results = dict()
for i in tqdm_notebook(range(replicates)):
    results[i] = client.submit(nn_train_func, data, **params)

以该delayed接口为例:

client.scatter(data, broadcast=True)
results = dict()
for i in tqdm_notebook(range(replicates)):
    results[i] = delayed(nn_train_func, data, **params)

我问的原因是因为我注意到以下现象:

  1. 如果我预分散数据,则delayed似乎将数据重新发送到工作程序节点,从而使内存使用量大约增加了一倍。看来预分散并没有按照我的预期去做,这允许工作节点引用预分散的数据。
  2. futures接口需要很长的时间来迭代通过循环(显著更长)。我目前不确定如何确定这里的瓶颈。
  3. 使用该delayed接口,从compute()调用函数的时间到活动在仪表板上反映的时间,存在很大的延迟,我怀疑这是由于数据复制造成的。
麦考林

预分散旨在避免将大对象数据放入任务图中。

x = np.array(lots_of_data)
a = client.submit(add, x, 1)  # have to send all of x to the scheduler
b = client.submit(add, x, 2)  # again
c = client.submit(add, x, 3)  # and again

您会感到痛苦,因为client.submit返回的速度很慢,Dask甚至会发出警告。

因此,我们分散了数据,获得了回报

x = np.array(lots_of_data)
x_future = client.scatter(x)
a = client.submit(add, x_future, 1)  # Only have to send the future/pointer
b = client.submit(add, x_future, 2)  # so this is fast
c = client.submit(add, x_future, 3)  # and this

在您的情况下,您几乎会这样做,唯一的区别是您分散了数据,然后忘记了数据返回的未来,然后再次发送数据。

client.scatter(data, broadcast=True)  # whoops!  forgot to capture the output
data = client.scatter(data, broadcast=True)  # data is now a future pointing to its remote value

您可以选择是否broadcast如果您知道所有工作人员都需要此数据,那么这并不是一件坏事,但是无论如何,一切都会好起来的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查带有某些数据的对象是否在javascript的数组中?

如何找出具有特定数据属性的对象是否存在于对象数组中?

Java中的内部对象是否具有引用?

检测对象是否为灰烬数据

检查对象是否等于Java中存储在对象中的数据

JAVA:如何检查对象数组中的所有对象是否都是子类的对象?

JavaScript对象是否有总订单?

使用Avro对象发送数据,使用架构注册表是否有优势?

有没有办法检查Groovy中的类或对象是否具有mixin?

检查范围对象是否在列表中

如何验证对象数组中的每个对象是否都有一些键

如何检查对象中所有级别的JavaScript中对象是否为空

多个具有相同值的不可变对象是否指向内存中的单个对象?

路径对象是否有内置方法来测试目录是否在路径中

相同类型/类的对象是否可能具有不同的数据属性?

检查附加对象是否具有基于导航属性的任何相关数据库

如何使用空手道中驱动的数据检查来自arraylist的所有对象是否存在于json中

有效检查Python / numpy / pandas中是否有任意对象是NaN?

有效检查Python / numpy / pandas中是否有任意对象是NaN?

检查对象是否具有名称中具有特定编号的类

除了组织之外,在对象中组织方法和功能是否有任何优势?

使用 .predict() 方法时,sklearn 中的管道对象是否会转换测试数据?

通过 self 访问相关对象是否会命中 Django 中的数据库?

测试对象是否相等和/或对象是否具有更多的键,但仍等于相同的键

将静态数据存储在图像而不是数组中是否有任何优势?

检查对象是否在javascript中具有一组属性

如何在jUnit中检查具有双字段的对象是否相等

断言动态集合中两个不同的对象是否具有相同的值

在python中是否有任何可哈希的内置对象是可变的?