Есть ли способ "разбить" выходные данные селезня, чтобы ускорить проверку и отображение плана?
Я провожу моделирование для целого ряда моделей и значений параметров. На данный момент мой 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)
показывает больше сообщений о прогрессе, чем с настройкой по умолчанию.