10

Stan 是Gelman 等人的新贝叶斯分析软件。

我猜,RStan 是一种从 R 中调用 Stan 的方法。

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

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

4

5 回答 5

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 包,则可以stan()使用 R 和您的操作系统支持的任何并行引擎调用 main 函数。同样,最好传递相同的种子和不同的chain_id。截至rstan v1.0.3(尚未发布),有一个函数调用,它获取可能已并行生成sflist2stanfit()的对象列表,并将它们组合成单个对象以进行分析。stanfitstanfit

有关更多信息,请参阅专门用于并行执行的线程

https://groups.google.com/d/topic/stan-users/3goteHAsJGs/discussion

于 2012-10-21T11:10:32.477 回答
5

我写道,我会发布我学到的东西。

大学超级计算中心相信 RStan 将在他们的机器上运行。但是,我必须申请一个帐户,这可能需要一些时间。因此,我不确定 RStan 是否会在这些机器上运行一段时间。他们设施的正式名称是“北极地区超级计算中心”。

我在桌面上安装 RStan 时遇到了麻烦,不得不寻求 OIT 的帮助。所以,这里是我使用的步骤和 OIT 绅士使用的代码。我有一个 Windows 7 Professional 操作系统。

  1. 我不得不使用 R 2.15.1

  2. 我将 R 安装在目录 'C:\R\R-2.15.1' 中,因此目录名称中不会有空格

  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')

    图书馆(斯坦)

  9. 然后我从这里运行了学校的例子:

http://code.google.com/p/stan/wiki/RStanGettingStarted

上周,我一直在尝试使用 pdf 文件“stan-reference-1.0.2”中包含的说明来安装 STAN,而不是上面链接中的说明。

我希望这对其他人有帮助。如果当我知道 RStan 是否肯定会在 Supercomputing Center 机器上运行时,我会在这里发布我学到的东西。

我没有卸载 STAN 来测试上述过程。希望我在上述步骤中没有犯任何错误。

于 2012-10-15T18:33:07.277 回答
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))
}
于 2013-12-31T13:16:09.043 回答
1

RSeek 搜索(对于:Rstan gelman)的第一次点击在点击一个链接后产生了这个:

https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started

它还没有在 CRAN 上。

于 2012-10-11T22:39:13.753 回答
1

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

通常超级计算机运行服务器级处理器而不是桌面级。Stan 和其他 MCMC 程序几乎总是在每个链的基础上非常严格地串行,也就是说,你很少有可能通过拥有多个处理器来获得单个链的加速。我们有一个小型集群,其中有一台双至强级服务器和几台普通台式机作为工作站。只要您保持在 16GB RAM 的限制 范围内,工作站中的 Core-i7s 处理器在进行实际计算时通常比服务器快40% 左右。

进行此类计算的最快机器可能是具有水冷 CPU 的超频定制游戏机。

也就是说,您当然可以像上面指出的那样并行运行不同的链。

于 2015-03-23T16:37:52.500 回答