首页 > 解决方案 > 将 ccache 与 Stan 模型一起使用

问题描述

我发现编译 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、gcc 9.3.0、ccache 3.7.7。ccache 有它的默认设置,除了hash_dir=falsecompression=true

脚注:为什么不使用auto_write=TRUE?可能我做错了,但在我运行的模型中,这并不能阻止重新编译。

标签: rstanccache

解决方案


推荐阅读