Dask, как избежать пересчета вещей

Используя dask, я определил длинный конвейер вычислений; в какой-то момент с учетом ограничений в apis и версии мне нужно вычислить небольшой результат (не ленивый) и передать его в ленивых операциях. Моя проблема в том, что на этом этапе будет выполнен весь граф вычислений, чтобы я мог получить промежуточные результаты. Есть ли способ не потерять работу, проделанную на этом этапе, и не пересчитать все с нуля, когда на следующем шаге я сохраняю окончательные результаты на диск?

Использование persist должно помочь с этим?

Любая помощь будет очень признательна.


person LetsPlayYahtzee    schedule 20.11.2018    source источник


Ответы (1)


Да, это тот вариант использования, для которого предназначен persist. Хитрость заключается в том, чтобы выяснить, где его применить - на это решение обычно влияют:

  • Размер ваших промежуточных результатов. Они будут храниться в памяти до тех пор, пока все ссылки на них не будут удалены (например, foo в foo = intermediate.persist()).
  • Форма вашего графика. Лучше сохранять только компоненты, которые необходимо будет пересчитать, чтобы минимизировать влияние сохраняемых значений на память. Вы можете использовать .visualize(), чтобы посмотреть на график.
  • Время, необходимое для вычисления задач. Если задачи быстро вычисляются, может быть более выгодным просто пересчитать их, а не хранить их в памяти.
person jiminy_crist    schedule 10.12.2018