r - 将 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=false
和compression=true
。
脚注:为什么不使用auto_write=TRUE
?可能我做错了,但在我运行的模型中,这并不能阻止重新编译。
解决方案
推荐阅读
- reactjs - 公共 index.html 中的 CRA 变量替换
- python - 如何检查单元格值是否仅包含“空格”?
- javascript - 通过ajax将Javascript变量插入数据库
- java - 如何在每次测试之前或之后让 Spring Cloud Contract 重置 WireMock
- angular - Angular 表单:提交事件和点击事件有什么区别?
- php - 关于PHP函数变量和范围理论的问题
- c# - 菜单主页背景颜色
- python - 使用 googlemaps 时区 python 客户端
- tsql - Microsoft SQL Server 查询分析器中的 Level 和 State 指的是什么
- powershell - 在第 7 行和第 36 列 txt 之后复制文本