我最近一直做R中的一些模拟研究,涉及计算机密集型MCMC采样。通常我会使用我所在机构的计算集群来做这些,利用大量的计算机核心,但暂时缺乏这种可用性导致我调查使用亚马逊的Web服务(AWS)系统。在这篇文章中,我将描述我在R中进行模拟的步骤。
使用Amazon Web Services进行初始设置
首先注册上的免费帐户。
接下来,您需要完成此处描述的所有步骤。EC2是我们将使用的亚马逊服务。请
第1步 - 注册AWS
步骤2 - 创建IAM用户
步骤3 - 创建密钥对
步骤4 - 创建虚拟私有云(VPC)
步骤5 - 创建安全组
我们将在一分钟内启动我们可以连接的云计算机。
开始第一个实例
我们现在将设置我们的第一台云计算机。亚马逊将其中一个称为实例。首先,使用您之前设置的IAM凭据登录,访问:https://your_aws_account_id.signin.aws.amazon.com/console/,替换前一地址中的AWS账户ID。然后单击主页左上角的EC2。这会将您带到EC2仪表板。
要启动实例,请按照此处说明的步骤1进行操作。
完成实例操作后,请确保通过右键单击实例并选择终止,从EC2仪表板终止。
在实例上安装R
上面提到的入门说明描述了如何设置运行Amazon Linux AMI的实例,据我所知,这是他们创建的亚马逊自己的Linux风格。为了运行R,我改为使用普通的Ubuntu安装。Ubuntu是Linux操作系统最受欢迎的版本之一。
启动一个新实例,运行主列表中显示的Ubuntu AMI。然后使用Putty通过SSH连接到它。请注意,对于Amazon AMI,用户名是ec2-user,对于Ubuntu,您需要连接的用户名是ubuntu。
接下来我们可以安装R。首先,在Putty类型:
sudo nano /etc/apt/sources.list
将sources.list文件加载到nano文本编辑器中。我们需要添加一行来指向可以下载R的位置。在文件底部添加如下行:
deb http://cran.rstudio.com/bin/linux/ubuntu trusty/
然后按Ctrl + X,键入Y,然后输入,以保存文件。接下来,依次键入以下三个命令,在需要时选择Y为yes:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9 sudo apt-get install r-base
如果成功,您现在应该安装R。应该看到:
R version 3.2.2 (2015-08-14) -- "Fire Safety" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R.
您现在可以从命令行在R中工作。
如果运行模拟,我会在桌面上准备一个R脚本文件,然后将其复制到AWS以运行它。如果您确实想在AWS上运行RStudio,请参阅Louis Aslett关于在AWS上运行R和RStudio 。
运行并行仿真
我尝试让AWS 运行的最初原因是在R中运行计算机仿真。我这样做的方法是首先启动一个具有多个核心的实例类型(36),特别是c4.8xlarge类型。为了并行运行模拟,我使用脚本文件调用R,该脚本文件启动R的多个实例。要编写此脚本文件,请myscript.sh
在命令行键入:nano 。这将打开纳米文本编辑器程序。输入以下行:
#!/bin/bash for set in {1..36} do nohup Rscript myrprog.R $set > ~/outputs/myprogoutputs_$set 2>&1 & done
接下来,我们必须更改我们刚刚创建的脚本文件的权限,以使其能够被执行。为此,请在Putty命令提示符下键入以下内容:
chmod +x myscript.sh
在运行我们的脚本文件之前,我们需要编辑我们的R程序以利用我们传递给它的参数。在我的R程序的顶部,我添加了以下行:
args=(commandArgs(TRUE)) set <- as.numeric(args[[1]])
我们假设我们想要执行3600次模拟。如果我们使用36核心实例,我们可以在每次调用R时运行100次模拟。然后,每次调用都会保存一个包含100次模拟结果的数据集。然后,我们可以将36个数据集组合在一起,形成所需3600个模拟结果的数据集。
为了保存结果,在我的R程序结束时如下:
results <- list(estimates=estimates, ciLower=ciLower, ciUpper=ciUpper) setwd("outputs") save(results, file=paste("results_",set,".RData",sep=""))
这将一个名为results_set的R数据文件保存到outputs文件夹,其中set是我们的set变量。