Я обнаружил, что компиляция моделей Stan происходит довольно медленно, и я часто перекомпилирую ту же модель, «чтобы избежать сбоев в сеансе R». Похоже, что ccache здесь будет отличным решением - я мог бы кэшировать результат компиляции, может ли R перезагрузить скомпилированный объект по мере необходимости. Однако ccache не может вернуть кешированные результаты, поскольку rstan::stan_model
создает временные файлы C ++ с другими именами. Есть ли способ, чтобы stan_model
использовал одно и то же имя файла C ++? Или есть лучший способ кэшировать компиляцию? Этот комментарий в коде rstan создает впечатление, что кеширование возможно.
model_code <- brms::make_stancode(
count ~ zAge + zBase * Trt + (1 | patient),
data = brms::epilepsy, family = "poisson"
)
cpp1 <- rstan::stanc(model_code=model_code, model_name="my_model", obfuscate_model_name=FALSE)
cpp2 <- rstan::stanc(model_code=model_code, model_name="my_model", obfuscate_model_name=FALSE)
# The content of the C++ code is identical
identical(cpp1, cpp2)
#> TRUE
m1 <- rstan::stan_model(stanc_ret=cpp1, auto_write=FALSE, save_dso=FALSE, verbose=TRUE)
#> Compilation argument:
#> /usr/lib/R/bin/R CMD SHLIB file1b4dc0286e.cpp 2> file1b4dc0286e.cpp.err.txt
m2 <- rstan::stan_model(stanc_ret=cpp1, auto_write=FALSE, save_dso=FALSE, verbose=TRUE)
#> Compilation argument:
#> /usr/lib/R/bin/R CMD SHLIB file1b4d61eb0c7.cpp 2> file1b4d61eb0c7.cpp.err.txt
Сведения о системе: Ubuntu, R 4.0, g cc 9.3.0, ccache 3.7.7 . ccache имеет настройки по умолчанию, за исключением hash_dir=false
и compression=true
.
Примечание. Почему бы не использовать auto_write=TRUE
? Возможно, я делаю что-то неправильно, но в моделях, которые я тестировал, это не препятствует перекомпиляции.