RStan会在超级计算机上运行吗?

时间:2012-10-11 20:40:26

标签: r stan

Stan是Gelman et al的新贝叶斯分析软件。

我猜,RStan是一种从R中打电话给Stan的方法。

Stan / RStan是否可以在配备Linux操作系统的超级计算机上运行,​​如果可以,它可以利用超级计算机的多处理器?有人告诉我,WinBUGS不会在Linux机器上运行和/或无法利用超级计算机的多处理器。

我正在寻找一种加速贝叶斯分析的方法 - 从数周到数天/小时。

5 个答案:

答案 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操作系统。

  1. 我不得不使用R 2.15.1

  2. 我在目录'C:\ R \ R-2.15.1'中安装了R,因此目录名中没有空格

  3. 我必须安装Rtools。

  4. 我在目录'C:\ Rtools'中安装了Rtools

  5. 确保Rtools出现在路径中,以便R可以在Rtools中找到C ++编译器

  6. 检查:

    计算机, 属性, 高级系统设置, 环境变量, 路径。

    我想我应该同时包括:'c:\ Rtools \ bin'                           并且:'c:\ Rtools \ gcc-4.6.3 \ bin'

  7. 打开R

  8. 以下是要输入的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)

  9. 然后我从这里开始学校的例子:

  10. 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)

这是关于贝叶斯M​​CMC计算的一般性评论。

通常,超级计算机运行服务器类处理器而不是桌面类。斯坦和其他MCMC程序几乎总是非常严格地按链式串行,即通过使用多个处理器,很少有可能为单个链加速。我们有一个小型集群,其中包含双Xeon级服务器和几台常规桌面计算机作为工作站。只要您保持在16GB RAM限制范围内,工作站中的Core-i7s处理器通常比服务器执行大约40%进行实际计算。

进行这些计算的最快机器可能是带有水冷CPU的超频定制游戏机。

那说你当然可以并行运行不同的链,如上所述。