Создание графа вычислений в dask

До сих пор я использовал dask с get и словарем для определения графа зависимостей моих задач. Но это означает, что я должен определить весь свой график с самого начала, и теперь я хочу добавлять время от времени новые задачи (с зависимостями от старых задач).

Я читал о пакете distributed, и он кажется подходящим. Я видел два возможных варианта определения моего графика:

  1. Используя delayed, определите зависимости между каждой задачей:

    t1 = delayed(f)()
    t2 = delayed(g1)(t1)
    t3 = delayed(g2)(t1)
    dask.compute([t2, t3])
    
  2. Используя _5 _ / _ 6_, сделайте что-нибудь вроде:

    t1 = client.submit(f)
    t2 = client.map(g1, [t1])[0]
    t3 = client.map(g2, [t1])[0]
    

Как вы думаете, что более уместно? Спасибо!


person user1769471    schedule 15.06.2018    source источник


Ответы (1)


Если ваша цель - со временем изменить свои вычисления, вам следует использовать API-интерфейс Dask concurrent.futures, описанный здесь:

http://dask.pydata.org/en/latest/futures.html

person MRocklin    schedule 15.06.2018
comment
Для большей ясности - у меня есть граф (с ~ 500 узлами), и через некоторое время я хочу добавить еще один граф (где некоторые задачи зависят от предыдущих задач). Как лучше всего добавить каждый график? Это с фьючерсами? Как можно объявить, что одно будущее зависит от другого? - person user1769471; 16.06.2018
comment
Да, с фьючерсами это легко сделать. Я рекомендую прочитать документацию, указанную выше, а затем задать дополнительные вопросы, если что-то по-прежнему неясно. - person MRocklin; 16.06.2018
comment
Я читал о фьючерсах и теперь понимаю, как с ними справиться. Но у меня есть еще один вопрос: что лучше с точки зрения планирования / производительности? Определение всех задач как фьючерсов (и использование client.submit) или использование отложенного для определения графика? Если я правильно понимаю, delayed ленив, поэтому весь граф (с ~ 500 узлами) будет построен до вычисления, и client.submit не ленив. - person user1769471; 17.06.2018
comment
Ни то, ни другое не лучше. Как вы говорите, один ленив, а другой - немедленный. В остальном они оба в основном одинаковы. - person MRocklin; 18.06.2018
comment
Большое спасибо! Я буду использовать client.submit, так как это немного проще - person user1769471; 20.06.2018