云计算作为互联网发展的下一个阶段, 无须拥有通常的物理硬件和软件, 从计算能力到计算基础设施, 应用程序和业务流程, 可以随时随地提供服务, 但是配置云计算的运算环境需要一定的时间。为了突破传统统计软件的单机统计能力限制, 本文梳理了亚马逊AWS平台上的基本配置和数据传输过程, 通过统计软件来实现蒙特卡洛模拟的云计算。
《计算机辅助工程》是上海海事大学主办的学术性刊物,创刊于1992年,是我国计算机界与工程界的重要学术性刊物之一。本刊主要刊登计算机技术及其应用和相关领域的学术论文,如计算机辅助设计与图形学技术及应用、专家系统、知识工程、计算机网络与通信、分布式系统、计算机软件与理论、程序设计语言、操作系统、数据库、计算机辅助教学、制造业信息化、物流工程信息化、交通运输工程信息化、信息管理技术及应用、人工智能技术及应用、电气自动化等领域的文章,以及有价值的研究报告和研究简介。
0、 引言
云计算是一种新兴的商业计算模型。是并行计算、分布式计算、网格计算发展的产物, 一种新时代形态的虚拟化技术。已经开发了许多基于云的虚拟工作空间, 这些工作空间可以带来比任何台式机或笔记本电脑更大的计算优势。云计算对于学术界, 特别是研究人员来说具有巨大的潜力。虽然大多数研究人员具有广泛的编程技能, 但他们通常不是计算机科学家, 存储、读取和操作大型数据集的能力对于处于研究最前沿的技术人员来说变得越来越重要。在云中启动和运行指令往往需要消耗大量的时间, 因此, 人们必须经历一些很明显的选择和指令页面。云计算作为一种新型计算模型, 目标是简化和降低计算能力、存储设备甚至是应用系统等IT资源的使用门槛, 用户只需连接因特网即可便捷地使用上述资源, 并按使用资源量付费。因此, 无论对其研究硬件设施的经济性, 还是未来发展趋势都有着积极的意义。
1、 云计算的概念
云计算作为一项全新的技术, 其概念基于“IT能力的可重用性”这一原则:一个抽象的, 高度可扩展的, 可管理的计算基础架构池, 能够托管最终客户应用程序并按消费计费。云计算是一种计算范例, 其中大量系统池在私有或公共网络中连接, 为应用程序、数据和文件存储提供动态可扩展的基础架构。随着这项技术的出现, 计算、应用程序托管、内容存储和交付的成本显着降低, 有可能将数据中心从资本密集型转变成其他类型。它与“网格计算”“分布式计算”“效用计算”或“自主计算”等传统概念相比, 更能够扩大研究者的视野。
云计算包括三个层次的服务:软件即服务 (SaaS) , 基础架构即服务 (IaaS) 和平台即服务 (PaaS) 。国外着名的云计算平台有:亚马逊AWS、微软Azure、IBM Cloud private以及谷歌云平台, 国内比较有名的云平台有:阿里云、腾讯云、华为云、百度BAE、新浪SAE等等。本文以亚马逊网络服务 (AWS) 为例, 来说明云计算的实现过程。AWS提供大量云服务, 包括计算、数据存储和数据管理设施。目前, AWS提供一年免费访问其部分服务, 作为研究人员学习如何使用云的机会。要获得对任何云服务的访问权限, 研究人员只需要使用AWS创建一个帐户, 并在此账户下进行简单的云计算, 其主要服务模块有两个:弹性计算云 (EC2) 和简单存储服务 (S3) 。
EC2是一种云服务, 提供可变大小的虚拟计算机, 称为实例。一旦研究人员使用AWS创建了帐户, 就可以在EC2中创建和访问实例。简单存储服务 (S3) , 为研究人员提供安全且可扩展的存储。S3和EC2可以分别用于存储和分析数据。EC2和S3都是相对低成本的解决方案。例如, EC2有三种不同的定价方法:按需方式、竞价方式和预留方式, 每种方法都有不同的价格。S3价格基于存储的大小 (尺寸越大, 每GB的价格越便宜) 和使用频率 (使用频率越低, 每GB越便宜) 。数据可以存储在S3中, 传输到EC2进行计算, 最后结果保存在S3, 用户也可以将其下载到本地的个人计算机。
2、 云计算环境搭建
第一步是需要使用AWS创建一个帐户。需要邮箱、电话号码以及信用卡账号完成验证, 过程也非常简单。此帐户可以通过身份识别与访问管理 (Identity and Access Management, 简称IAM) 进行权限管理, 能够安全地控制其他用户对Amazon AWS服务和资源的访问权限, 即可以通过IAM角色授予第三方访问您的AWS资源的权限, 而无须共享AWS安全凭证。而第三方则可以通过在AWS账户中创建的角色来访问AWS资源。
第二步需要在EC2中创建实例 (instance) 。在EC2中创建和启动的虚拟计算机称为实例。EC2在创建实例时有一个页面引导过程, 用于逐步进行。实例的创建需要首先选择一个亚马逊机器映像 (Amazon Machine Image, 简称AMI) , 它指定虚拟机将具有哪种类型的处理器、内存、存储等 (比如选择新笔记本电脑的硬件组件) 。最初, 新创建的虚拟机将没有安装软件, 由研究人员提供和安装所需的任何东西。当然也有多种预先配置的AMI可供选择, 其中许多已经安装了软件。这种预先配置的AMI大大缩短了设置过程, 是重复任务的理想选择。然后再选择实例类型, 配置实例, 添加存储, 标记实例, 配置安全组和查看等等。在EC2下中启动实例是需要完成的最后一项操作。其具体操作过程如下:
(1) 选择AMI和实例:虽然亚马逊AWS中有许多需要购买的预先配备AMI, 不过有些AMI是免费的, 接下来可以选择实例类型;
(2) 配置实例:这一步只需要默认设置即可;
(3) 添加存储:用户可以选择存储的大小和类型;
(4) 标记实例:研究人员可以选择标记 (命名) 实例, 当用户使用多个资源和实例时, 标签可以有助于管理;
(5) 配置安全组:选择适当的安全设置很重要, 安全组是一组控制与实例的流量 (通信) 的防火墙规则, 研究人员需要允许通过SSH与实例进行通信, 并允许通过Web浏览器 (http) 连接到RStudio服务器, 因此需要打开以下端口:22 (SSH) , 80 (HTTP) , 443 (HTTPS) , 3389 (RDP) 和8787 (RStudio Server) ;
最后, 点击下一步审核, 完成实例的配置过程。
第三步是研究人员在自己的计算机和正在运行的EC2实例之间建立连接和通信桥梁。也就是通过SSH (安全shell) 软件实现连接。个人计算机一旦与实例建立连接, 研究人员就可以在他的虚拟机上安装和配置他可能需要的任何软件, 例如可以安装R和RStudio Server, Python, MATALB等。如果选择预先配置已安装软件的AMI, 则研究人员仍需要与实例 (虚拟机) 建立连接, 以便启动和使用他需要的软件。例如RStudio Server的使用, 其中一个功能是可以通过SSH设置和启动它, 然后可以通过用户名和密码从Web浏览器访问它 (就像访问他的电子邮件一样) 。值得注意的是, 一旦研究人员完成了虚拟机的工作, 他就需要返回AWS和EC2并终止正在运行的实例。如果不这样做, 将使实例处于工作状态, 并将收取不必要的费用。
实例运行后, 需要通过安全shell (SSH) 直接与其建立连接, 不同的操作系数有所区别, 在Windows环境下可以利用PuTTY远程连接工具, 而MAC OSX下使用Mac OS终端来完成 (Linux和MAC OSX都是UNIX类型的操作系统) , 设置是类似的。研究人员连接到AWS以便运行EC2上的实例。接下来, 就需将数据加载到S3, 以及在EC2和S3之间传输数据。
3、 数据的存储及传输
简单存储服务 (Amazon Simple Storage Service, 简称Amazon S3或S3) 是AWS的一部分, 其存储成本较低, 这一存储服务与EC2是分开的, S3使用Web界面来存储和检索研究人员计算机的任何数据, 提供安全且可扩展的对象存储。S3非常适用于大数据集的使用。当研究人员使用大型数据集并且不希望每次都将数据上传到他的虚拟机时, S3非常有用, 即使使用较小的数据集, 将数据上传到S3也许在逻辑上更为简单, 然后将其传输到EC2并直接在云中执行所有需要的分析。只要两个云服务 (EC2和S3) 位于同一地理位置, S3和EC2之间的数据传输速度非常快 (比从个人计算机上传更快) , 并且是免费的。AWS将服务器托管在世界各地的几个不同地理位置。研究人员应该选择最接近他/她的那个并且使其一致, 以便始终为其EC2和S3提供相同的位置。S3和EC2之间的数据传输 (反之亦然) 也在通过SSH连接到虚拟机时完成。
如果研究人员使用的数据文件不大, 他可以自己保存文件在本地计算机, 并在需要时将其上传到实例。以同样的方式, 他的输出文件可以很容易地下载回个人电脑。但是, 如果数据文件非常大, 则用户最佳选择是将其数据上传到AWS云存储 (S3) , 然后在需要时将其传输到EC2进行分析, 然后将结果保存回S3。我们建议使用此过程, 一方面因为大数据文件可能需要花费大量时间上传, 上传可能会中断, 以及其他可能的相关问题;另一方面, 一旦数据在S3中, 转移到EC2是快速简便的。在本节中, 我们将介绍用户如何将数据直接从个人计算机传输到EC2, 或者从计算机传输到S3然后再传输到EC2。
首先应在S3中创建存储桶 (这是所有数据将进入的位置) , 类似数据库的配置。在这种情况下, 一般默认选择了“美国标准”。创建后, 单击存储桶, 然后创建一个文件夹。我们就可以直接装载数据进入S3中。选择文件夹, 然后从“操作”菜单中选择“上传”, 以便将本地数据文件上传到S3。
3.1、 本地计算机与EC2的数据传输
3.1.1、 将数据从本地计算机传输到EC2创建的实例
实现这一功能有两种方式:其中一个是通过SSH和命令行。另一个是使用RStudio Server的上传和导出功能。这里介绍将数据直接上传到适用于Windows用户的EC2:
首先, 在连接到实例的PuTTY终端窗口中键入以下内容:
cd..
ls
cd home
cd Mydata
mkdir R
cd R
mkdir Data
cd Data
sudo chmod-R 0777/home/Mydata/R/Data
第一行退出最后一个文件夹并在其前移动一个文件夹。命令“ls”列出当前文件夹的内容。用户应该能够看到名为“home”根目录下的文件夹。如果没有, 他们需要重复进程“cd..”命令, 然后再执行“ls”命令, 直到找到“home”目录。“cd home”打开“home”文件夹, “cd Mydata”导航到“Mydata”文件夹。“mkdir R”命令创建一个名为“R”的文件夹;“cd R”打开这个新创建的目录。这同样适用于“mkdir数据”和“cd数据”。最后一个命令设置文件夹权限, 允许在文件夹中复制, 保存和删除文件。
接下来, 用户需要启动PSFTP (Putty安全文件传输协议) , 这些文件转移应用程序, 包含在PuTTY这一工具中。从Windows命令提示符启动PSFTP。要建立PSFTP连接, 我们应在Windows命令提示符中键入以下代码:
psftp.exe ubuntu@XXX.XXX.XXX.XXX-/directory/keyfile.ppk
其中“/directory/key le.ppk”是“.ppk”文件的路径, 以及XXX.XXX.XXX.XXX是公共DNS, 每次都使用实例的特定公共DNS进行更改。这样配置完成以后, 为了传输数据, 就可以在Windows命令中输入以下代码:
put C:\directory\datafile/directory/datafile
其中“put”是将文件发送到EC2实例的命令, “C:\directory\datafile”是想要在他的本地计算机上发送的数据路径, “/directory/datafile”是EC2实例上的目标文件夹。在PuTTY终端窗口中, 连接到EC2实例, 使用“ls”命令查看文件夹的内容。
3.1.2、 直接从EC2为Windows用户下载数据
我们可以从Windows命令提示符下载文件 (使用PSFTP) 通过使用以下命令建立连接:
get/directory/datafile C:\directory\datafile
其中“get”是获取文件的命令, “/directory/datafile”是文件夹的路径, 在将要下载文件的EC2实例上, 以及“C:\directory\datafile”是要下载文件的文件夹的路径。
3.2、 S3和EC2之间的传输数据
要在EC2和S3之间传输文件, 需要在正在运行的EC2实例上安装和配置AWS命令行界面工具 (Command Line Interface, 简称CLI) 。此工具允许从命令行 (控制台) 控制不同的服务, 也可以使用它来复制来自S3的文件。CLI的一部分配置是提供适当的凭证, 因此获取凭证是CLI的第一步。安全凭证用于验证授权任何第三方应用访问你的AWS帐号, 访问密钥由访问密钥ID和私密访问密钥组成。要创建访问密钥, 需要转到AWS页面并选择“身份和访问管理” (IAM) 控制台。创建访问密钥后, 用户有一次机会下载它们。带有凭证 (密钥) 的文件需要保存在用户的个人计算机上。如果文件丢失或用户没有下载, 他将无法使用凭证, 应创建一组新密钥。包含访问密钥的文件称为“credentials.csv”, 可以使用MS Excel打开。要安装CLI, 需要在OSX终端或PuTTY终端中输入以下代码:
sudo apt-get install unzip
curl"https://s3.amazonaws.com/aws-cli/awsclibundle.zip"-o"awscli-bundle.zip"
unzip awscli-bundle.zip
sudo./awscli-bundle/install-i/usr/local/aws-b/usr/local/bin/aws
其中第一行安装“unzip”, 这是处理zip格式的压缩文件所需要的。第二行下载CLI, 第三行解压缩文件, 最后一行安装CLI.Next遵循CLI的配置。代码应在OSX终端或PuTTY终端输入:
aws configure
配置过程将要求提供凭证, 这些凭证位于“credentials.csv”中, 可以使用MS Excel打开文件。在这种情况下, 通过在OSX终端或PuTTY终端中输入以下选项:
AWS Access Key ID[None]:AKIAID5BRLKNXVX XN7GA
AWS Secret Access Key[None]:kxNDqMpkHWdh6mdgJrogRpeA0DXlK/jiULWzRkq7
Default region name[None]:us-east-1
Default output format[None]:json
前两行对应于凭证文件。区域名称可在AWS文档中找到。在这种情况下, 它一般是“us-east-1”, 但是也应该检查它的特定区域设定是否正确。
3.2.1、 在S3和EC2之间传输数据
在终端中导航到“/home/Mydata/R/Data” (如上所述) 或创建使用以下代码的文件夹:
cd..
ls
cd home
cd Mydata
mkdir R
cd R
mkdir Data
cd Data
sudo chmod-R 0777/home/Mydata/R/Data
以上代码可以依照上述类似的解释, 接下来, 在OSX终端或PuTTY终端上运行:
sudo aws s3 cp s3://bucketname/foldername/datafile.txt datafile.txt
其中“//bucketname/foldername/datafile.txt”是S3中数据文件的路径, “datafile.txt”是EC2实例中文件的名称。最后使用终端中的“ls”命令确认下载成功。
3.2.2、 将数据从EC2发送到S3
要将文件从EC2发送到S3, 我们可以在OSX终端或PuTTY终端中使用以下代码:
sudo aws s3 cp datafile.txt s3://bucketname/foldername/datafile.txt
最后, 用户可以返回S3控制台并检查文件是否已传输。可以在刷新后在S3控制台中查看结果。
4、 蒙特卡洛和统计软件选择
蒙特卡洛方法 (Monte Carlo method) , 也称统计模拟方法, 一种以概率统计理论为指导的一类非常重要的数值计算方法。随着电子计算机的发展和科学技术问题的日趋复杂, 它较好地解决了很多高难度和复杂的数学计算问题, 因此在统计物理、核物理、真空技术、系统科学、信息科学、公用事业、地质、医学, 可靠性及计算机科学等广泛的领域都得到成功应用。从理论上来说, 蒙特卡洛方法需要大量的实验。实验次数越多, 所得到的结果越接近于正确值, 利用此方法可以测试出很多的参数, 比如圆周率的值。对于这些简单的统计模拟问题, 目前单机的一般为4核, 可以并行计算提高计算效率并得到想要的精度。但是对于一些复杂的数学问题, 尤其一些优化问题的模拟, 计算过程需要反复迭代、计算, 即使涉及的维数不多, 其计算量也是以亿次为级别单位, 普通的实验室都难以满足其时间和精度要求。而云计算提供了灵活的计算能力和高效的大规模数据处理, 针对蒙特卡洛模拟这样需要大量计算的问题具有不可比拟的优越性和实用价值。
在统计软件选择中, 一般选择像Python, R免费的开源软件, 然而R在数据分析时得分更高的根本原因在于R包的分析库更加广泛。SAS仍然是台式机企业分析的主要语言, 但是, 对于小型企业而言, 它仍然代价高昂, 并且由于每年的许可证不是一次性费用, 因此在成本支出方面具有较大的劣势。由于单人计算机的R被迫处理仅限于RAM大小的数据, 因此云为我们提供了一个快速的解决方案, 利用R处理大数据, 并且云计算通过RStudio可以更加方便地安装、部署和计算。对于大数据而言, 可以在云上直接获得或者通过增加虚拟机上的RAM来获得不同类型的RAM备选方案。
5、 结论
国内在云计算方面起步较晚, 采用云计算进行统计模拟的研究较少, 大多数是计算机方面的学者对云计算的架构进行研究。本文在云计算环境搭建的基础上, 突破传统的单机进行蒙特卡洛模拟的限制, 从以桌面系统为中心向以网络为中心的模式发展, 服务和应用都将以在线的方式提供, 提出以云计算的方式来实现模拟统计。重视云计算在统计模拟中的应用, 结合专业统计工具, 充分发挥云计算技术的优势, 可以使云计算在大数据统计分析上得到广泛和深层次的应用。
参考文献:
[1]OHRI A.Introduction to R for Cloud Computing[M].New York, NY:Springer New York, 2014:1-20.
[2]Gallagher M, Rengifo E W, Trendafilov R.Cloud Computing for MATLAB and R Users[J].Social Science Electronic Publishing, 2017.
[3]Pabitha M, Selvakumar T, Punitha Devi S.An Effective C, C++, PHP, Perl, Ruby, Python Compiler using Cloud Computing[J].International Journal of Computer Applications, 2013, 69 (7) :20-25.