I have two different version of cmdstanr
0.5.3 in my Windows 10 raptop: one runs in the native Windows environment and the other runs in the Windows Subsystem for Linux (WSL). Both versions of cmdstanr
works fine when I run Cmdstanr’s starting example (Getting started with CmdStanR). However, I found that brms::brm(backend = "cmdstanr")
only works with the native Windows version of cmdstanr
, not with the WSL version.
I think this may possibly be a bug, but I am not sure either where this issue stems from or whether this is reproducible in any Windows machines. I would like to tag the authors of the packages, @rok_cesnovar , and @paul.buerkner for further inquiries. If I should report this as a bug in GitHub repositories, please tell me which repository is appropriate and I will post the problem as an issue.
MWE
The example of brms::brm(count ~ zAge + zBase * Trt + (1 | patient), ...)
came from the documentation of brm {brms}.
library("brms")
library("cmdstanr")
data_list <- list(N = 10, y = c(0, 1, 0, 0, 0, 0, 0, 0, 0, 1))
#----------------------------------------------
# Set path to native windows' cmdstan
#----------------------------------------------
stringr::str_replace_all(
string = Sys.getenv("HOME"),
pattern = "\\\\",
replacement = "/"
) |>
paste0("/.cmdstan/cmdstan-2.30.1") |>
set_cmdstan_path()
cmdstan_path()
#----------------------------------------------
# Brms' example run under native Windows
#----------------------------------------------
prior1 <- prior(normal(0, 10), class = b) +
prior(cauchy(0, 2), class = sd)
fit_native_win <- brm(
count ~ zAge + zBase * Trt + (1 | patient),
data = epilepsy,
family = poisson(),
prior = prior1,
backend = "cmdstanr"
)
fit_native_win
#----------------------------------------------
# Cmdstanr's example run under native Windows
#----------------------------------------------
file_win <- file.path(cmdstan_path(), "examples", "bernoulli", "bernoulli.stan")
mod_win <- cmdstan_model(file_win)
fit_win <- mod_win$sample(
data = data_list,
seed = 123,
chains = 4,
parallel_chains = 4,
refresh = 500 # print update every 500 iters
)
fit_win
#----------------------------------------------
# Set path to native WSL's cmdstan
#----------------------------------------------
stringr::str_replace_all(
string = Sys.getenv("HOME"),
pattern = "\\\\",
replacement = "/"
) |>
paste0("/.cmdstan/wsl-cmdstan-2.30.1") |>
set_cmdstan_path()
cmdstan_path()
#------------------------------------
# Brms' example run under WSL
#------------------------------------
fit_wsl <- brm(
count ~ zAge + zBase * Trt + (1 | patient),
data = epilepsy,
family = poisson(),
prior = prior1,
backend = "cmdstanr"
)
## Error in `process_initialize(self, private, command, args, stdin, stdout, …`:
## ! Native call to `processx_exec` failed
## Caused by error in `chain_call(c_processx_exec, command, c(command, args), pty, pty_options, …`:
## ! Command 'bin/stanc.exe' not found @win/processx.c:982 (processx_exec)
## Type .Last.error to see the more details.
## > .Last.error
## <c_error/rlib_error_3_0/rlib_error/error>
## Error in `process_initialize(self, private, command, args, stdin, stdout, …`:
## ! Native call to `processx_exec` failed
## Caused by error in `chain_call(c_processx_exec, command, c(command, args), pty, pty_options, …`:
## ! Command 'bin/stanc.exe' not found @win/processx.c:982 (processx_exec)
## ---
## Backtrace:
## 1. brms::brm(count ~ zAge + zBase * Trt + (1 | patient), data = epilepsy, …
## 2. brms:::.make_stancode(bterms, data = data, prior = prior, stanvars = stanvars, …
## 3. brms:::.canonicalize_stan_model(tmp_file, overwrite_file = FALSE)
## 4. processx::run(command = stanc_cmd, args = c(stan_file, stanc_flags), …
## 5. process$new(command, args, echo_cmd = echo_cmd, wd = wd, windows_verbatim_args = windows_verbatim_args, …
## 6. local initialize(...)
## 7. processx:::process_initialize(self, private, command, args, stdin, stdout, …
## 8. processx:::chain_call(c_processx_exec, command, c(command, args), pty, pty_options, …
## 9. | base::withCallingHandlers(do.call(".Call", list(.NAME, ...)), error = function(e) { …
## 10. | base::do.call(".Call", list(.NAME, ...))
## 11. | base::.handleSimpleError(function (e) …
## 12. | local h(simpleError(msg, call))
## 13. | processx:::throw_error(err, parent = e)
fit_wsl
## Error: object 'fit_wsl' not found
#------------------------------------
# Cmdstanr's example run under WSL
#------------------------------------
file_wsl <- file.path(cmdstan_path(), "examples", "bernoulli", "bernoulli.stan")
mod_wsl <- cmdstan_model(file_wsl)
fit_wsl <- mod_wsl$sample(
data = data_list,
seed = 123,
chains = 4,
parallel_chains = 4,
refresh = 500 # print update every 500 iters
)
fit_wsl
Session info
> sessionInfo()
R version 4.2.0 (2022-04-22 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19044)
Matrix products: default
locale:
[1] LC_COLLATE=Japanese_Japan.utf8 LC_CTYPE=Japanese_Japan.utf8
[3] LC_MONETARY=Japanese_Japan.utf8 LC_NUMERIC=C
[5] LC_TIME=Japanese_Japan.utf8
attached base packages:
[1] stats graphics grDevices datasets utils methods base
other attached packages:
[1] cmdstanr_0.5.3 brms_2.17.0 Rcpp_1.0.9
loaded via a namespace (and not attached):
[1] nlme_3.1-158 matrixStats_0.62.0 xts_0.12.1
[4] threejs_0.3.3 rstan_2.26.13 tensorA_0.36.2
[7] tools_4.2.0 backports_1.4.1 utf8_1.2.2
[10] R6_2.5.1 DT_0.23 DBI_1.1.3
[13] colorspace_2.0-3 withr_2.5.0 tidyselect_1.1.2
[16] gridExtra_2.3 prettyunits_1.1.1 processx_3.7.0
[19] Brobdingnag_1.2-7 curl_4.3.2 compiler_4.2.0
[22] cli_3.3.0 shinyjs_2.1.0 colourpicker_1.1.1
[25] posterior_1.2.2 scales_1.2.0 dygraphs_1.1.1.6
[28] checkmate_2.1.0 mvtnorm_1.1-3 ggridges_0.5.3
[31] callr_3.7.1 stringr_1.4.0 digest_0.6.29
[34] StanHeaders_2.26.13 base64enc_0.1-3 pkgconfig_2.0.3
[37] htmltools_0.5.3 fastmap_1.1.0 htmlwidgets_1.5.4
[40] rlang_1.0.4 shiny_1.7.2 farver_2.1.1
[43] generics_0.1.3 zoo_1.8-10 jsonlite_1.8.0
[46] crosstalk_1.2.0 gtools_3.9.3 dplyr_1.0.9
[49] distributional_0.3.0 inline_0.3.19 magrittr_2.0.3
[52] loo_2.5.1 bayesplot_1.9.0 Matrix_1.4-1
[55] munsell_0.5.0 fansi_1.0.3 abind_1.4-5
[58] lifecycle_1.0.1 stringi_1.7.8 pkgbuild_1.3.1
[61] plyr_1.8.7 grid_4.2.0 parallel_4.2.0
[64] promises_1.2.0.1 crayon_1.5.1 miniUI_0.1.1.1
[67] lattice_0.20-45 knitr_1.39 ps_1.7.1
[70] pillar_1.8.0 igraph_1.3.4 markdown_1.1
[73] shinystan_2.6.0 reshape2_1.4.4 codetools_0.2-18
[76] stats4_4.2.0 rstantools_2.2.0 glue_1.6.2
[79] V8_4.2.0 data.table_1.14.2 renv_0.15.5
[82] RcppParallel_5.1.5 vctrs_0.4.1 httpuv_1.6.5
[85] gtable_0.3.0 purrr_0.3.4 assertthat_0.2.1
[88] ggplot2_3.3.6 xfun_0.31 mime_0.12
[91] xtable_1.8-4 coda_0.19-4 later_1.3.0
[94] tibble_3.1.8 shinythemes_1.2.0 ellipsis_0.3.2
[97] bridgesampling_1.1-2