Dask 是否支持自定义图形中具有多个输出的函数?

Pet*_*olf 7 python dask

Dask自定义图形API似乎只支持返回一个输出键/值的函数。

例如,以下依赖项无法轻松表示为 Dask 图:

    B -> D
   /      \
A-         -> F
   \      /
    C -> E
Run Code Online (Sandbox Code Playgroud)

这可以通过将元组存储在“复合”键(例如在这种情况下为“B_C”)下,然后将其拆分getitem()或类似来解决。但是,这会导致执行效率低下(例如不必要的序列化)并降低 DAG 可视化的清晰度。

有没有更好的方法,或者目前不支持?

MRo*_*lin 5

简答

不,但应该没关系。

编程接口

您是正确的,使用 Dask 管理多个输出的正确方法是使用 getitem。在编程接口方面,按照您的建议,使用 dask.delayed 执行此操作的标准方法是使用 getitem 。下面是一个例子:

from dask import delayed

@delayed(pure=True)
def minmax(a, b):
    if a > b:
        return a, b
    else:
        return b, a

result = minmax(1, 2)
min, max = result[0], result[1]
Run Code Online (Sandbox Code Playgroud)

表现

你提出了一个关于性能的有趣问题。在实践中,使用分布式调度程序(在单台机器上工作得很好)应该可以很好地处理这种情况而不会降低性能。对于单机线程调度程序也是如此。