Поддерживает ли Dask функции с несколькими выходами в Custom Graphs?

API Custom Graphs для Dask, похоже, поддерживает только функции, возвращающие один выходной ключ / значение.

Например, следующую зависимость нелегко представить в виде графа Dask:

    B -> D
   /      \
A-         -> F
   \      /
    C -> E

Это можно обойти, сохранив кортеж под «составным» ключом (например, «B_C» в данном случае), а затем разделив его на getitem() или аналогичный. Однако это может привести к неэффективному выполнению (например, ненужной сериализации) и снизить четкость визуализации DAG.

Есть ли способ лучше, или он в настоящее время не поддерживается?


person Petr Wolf    schedule 15.07.2016    source источник


Ответы (1)


Короткий ответ

Нет, но это не имеет значения.

Интерфейс программирования

Вы правы, что правильный способ управления несколькими выходами с помощью 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]

Представление

Вы задаете интересный вопрос о производительности. На практике использование распределенного планировщика (который отлично работает на одной машине) должно справиться с такой ситуацией без проблем. штраф за производительность. То же самое верно и для однопоточного планировщика.

person MRocklin    schedule 16.07.2016
comment
работает без оператора pure в dask-0.14.0, какова цель pure? Можем ли мы использовать здесь nout? - person m-ric; 15.03.2017
comment
Должен работать с чистым или без него. Должно работать с ноутом. Pure используется, чтобы избежать дублирования вычислений при одинаковых входных данных. - person MRocklin; 15.03.2017