Использование ccache со стандартными моделями - PullRequest
1 голос
/ 08 мая 2020

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

...