Stan是Gelman et al的新贝叶斯分析软件。
我猜,RStan是一种从R中打电话给Stan的方法。
Stan / RStan是否可以在配备Linux操作系统的超级计算机上运行,如果可以,它可以利用超级计算机的多处理器?有人告诉我,WinBUGS不会在Linux机器上运行和/或无法利用超级计算机的多处理器。我正在寻找一种加速贝叶斯分析的方法 - 从数周到数天/小时。
答案 0 :(得分:20)
Stan和rstan应该在支持依赖项的Linux,Mac或Windows上运行。我们还没有在BSD或Oracle上测试过,但我们希望它们可以与g ++或clang编译器一起使用(尽管不是Oracle编译器)。
Stan或rstan中没有明确的并行代码,但也没有任何代码阻止二进制同时由多个进程执行。例如,如果您在bash shell中使用命令行中的Stan,则可以执行类似
的操作./my_model --data=my_data.dump --seed=12345 --chain_id=1 --samples=samples_1.csv &
./my_model --data=my_data.dump --seed=12345 --chain_id=2 --samples=samples_2.csv &
以及您喜欢的链条等等。在并行执行时使用相同的种子但使用不同的chain_id非常重要。
如果您使用的是rstan软件包,则可以使用R和您的操作系统支持的任何并行引擎调用主stan()
函数。同样,最好传递相同的种子和不同的chain_id。截至rstan v1.0.3
(尚未发布),有一个名为sflist2stanfit()
的函数,它采用可能已并行生成的stanfit
个对象列表,并将它们合并为一个{{1}对象进行分析。
有关更多信息,有一个致力于并行执行的线程
https://groups.google.com/d/topic/stan-users/3goteHAsJGs/discussion
答案 1 :(得分:5)
我写道,我会发布我学到的东西。
大学超级计算中心认为RStan将在他们的机器上运行。但是,我必须申请一个帐户,这可能需要一些时间。所以,我不确定RStan会在那些机器上运行一段时间。值得一提的是,他们设施的正式名称是“北极地区超级计算中心”。
我在桌面上安装RStan时遇到了麻烦,无法获得OIT帮助。所以,这里是我使用的步骤和OIT绅士使用的代码。我有一个Windows 7 Professional操作系统。
我不得不使用R 2.15.1
我在目录'C:\ R \ R-2.15.1'中安装了R,因此目录名中没有空格
我必须安装Rtools。
我在目录'C:\ Rtools'中安装了Rtools
确保Rtools出现在路径中,以便R可以在Rtools中找到C ++编译器
检查:
计算机, 属性, 高级系统设置, 环境变量, 路径。
我想我应该同时包括:'c:\ Rtools \ bin' 并且:'c:\ Rtools \ gcc-4.6.3 \ bin'
打开R
以下是要输入的R代码(此代码显示在此处: http://code.google.com/p/stan/wiki/RStanGettingStarted):
install.packages( '内联')
install.packages( 'RCPP')
install.packages( 'RcppEigen')
选项(repos = c(getOption(“repos”),rstan =“http://wiki.stan.googlecode.com/git/R”))
install.packages('rstan',type ='source')
库(rstan)
然后我从这里开始学校的例子:
http://code.google.com/p/stan/wiki/RStanGettingStarted
上周,我一直尝试使用pdf文件'stan-reference-1.0.2'中包含的说明安装STAN,而不是上述链接中的说明。
我希望这有助于其他人。如果我知道RStan是否肯定会在Supercomputing Center机器上运行,我会在这里发布我学到的东西。
我没有卸载STAN来测试上述程序。希望我在上述步骤中没有犯任何错误。
答案 2 :(得分:3)
这是一个具体的并行化函数,它将源代码作为文本:
library(rstan)
library(parallel)
parallel_stan <- function(code, data, cores=detectCores(), chains=8, iter=2000, seed=1234) {
cat("parallel_stan: cores=", cores, ", chains=", chains, ", iter=", iter, ", seed=", seed, "\n", sep="")
cat("--- Step 1: compile the model (and run it once, very briefly, ignoring its output)\n")
f1 = stan(model_code = code, data = data, iter = 1, seed = seed, chains = 1, chain_id = 1)
cat("--- Step 2: run more chains in parallel\n")
sflist <- mclapply(
1:chains
, mc.cores = cores
, function(i) stan(fit = f1, data = data, iter = iter, seed = seed, chains = 1, chain_id = i)
)
# ... passing the same seed to all chains follows example(sflist2stanfit)
# ... important to use the same seed but different chain_id when executing in parallel
cat("--- Finished.\n")
return(sflist2stanfit(sflist))
}
答案 3 :(得分:1)
RSeek搜索的第一次搜索(对于:Rstan gelman)在发布一个链接后产生了这个:
https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started
目前还没有CRAN。
答案 4 :(得分:1)
这是关于贝叶斯MCMC计算的一般性评论。
通常,超级计算机运行服务器类处理器而不是桌面类。斯坦和其他MCMC程序几乎总是非常严格地按链式串行,即通过使用多个处理器,很少有可能为单个链加速。我们有一个小型集群,其中包含双Xeon级服务器和几台常规桌面计算机作为工作站。只要您保持在16GB RAM限制范围内,工作站中的Core-i7s处理器通常比服务器执行大约40%快进行实际计算。
进行这些计算的最快机器可能是带有水冷CPU的超频定制游戏机。
那说你当然可以并行运行不同的链,如上所述。