Есть ли способ "разбить" выходные данные селезня, чтобы ускорить проверку и отображение плана?

Я провожу моделирование для целого ряда моделей и значений параметров. На данный момент мой drake рабочий процесс включает в себя более 3 тыс. смоделированных data.frames и соответствующий stanfit объекты.

Пытаясь бежать make В настоящее время задержка составляет ~2 минуты до начала выполнения плана. Я предполагаю, что это потому, что drake проходит через кэш, чтобы проверить, какие шаги в плане потребуется обновить. Я хотел бы иметь какой-то способ сообщить ему, что он может представлять все эти модели в виде единого монолитного куска продукции. Что я мог сделать, так это сделать функцию, которая записывает все мои выходные объекты в качестве побочного эффекта, а затем выводит своего рода хэш, чтобы drake "одурачен" относительно того, что нужно проверять, но я не могу реструктурировать свой код в данный момент времени, учитывая предстоящий крайний срок и время обработки.

Точно так же в целях использования графа зависимостей, наличие 3k + объектов показывает его непригодным для использования. Было бы неплохо иметь возможность сворачивать определенные объекты в одну группу "тип вывода".

1 ответ

Решение

Отличный вопрос Я знаю, что вы говорите, и я думаю об этой проблеме все время. На самом деле, попытка избавиться от задержки является одним из двух моих главных приоритетов для drake на 2019 год.

К несчастью, drake сейчас нет решения, которое позволит вам поддерживать ваши цели в актуальном состоянии. Долгосрочным решением, вероятно, будут улучшения скорости + https://github.com/ropensci/drake/issues/304 + https://github.com/ropensci/drake/issues/233. Это важные области развития, но и огромные начинания.

Для новых проектов каждая цель может быть списком stan моделей.

drake_plan(
  data1 <- generate_data(...),
  data2 <- generate_data(...),
  models_data1 <- fit_models(data1),
  models_data2 <- fit_models(data2)
)

fit_models <- function(data){
  list(
    run_stan(data, "normal_priors"),
    run_stan(data, "t_priors")
  )
}

А для визуализации графа есть поддержка целевых кластеров. См. https://ropenscilabs.github.io/drake-manual/vis.html.

РЕДАКТИРОВАТЬ: параллельные вычисления и многословие

Если вы бежите make(jobs = c(imports = 4, targets = 6)), drake будет использовать 4 процесса на вашем локальном компьютере для предварительной обработки. А также make(verbose = 4) показывает больше сообщений о прогрессе, чем с настройкой по умолчанию.

Другие вопросы по тегам