4.5_亚马逊Web服务
4.5 亚马逊Web服务
亚马逊Web服务是“基础设施作为服务”(infrastructure as a service,IAAS)的云计算服务的卓越供应商。亚马逊的Web服务(amazon web service,AWS)使客户能够分配存储空间、与亚马逊的数据中心交换数据并运行亚马逊数据中心的服务器。反过来,客户应该按照他们的使用量缴费:按存储空间的字节数、按传输的字节数或按服务器时间的实例小时数计费。一方面,客户可以访问理论上无限的计算资源,而无须在自己的基础设施上面投资;另一方面,他们只需要为他们使用的资源买单。由于灵活性和对需求快速增长的适应能力(比如说,一个独立游戏开发商的游戏突然变得很火),云计算正变得越来越流行。
关于AWS特点的完整介绍以及如何使用它们,本书不予阐述。这里我们为那些对测试支持CUDA的虚拟机感兴趣的人介绍AWS的一些显著特点。
· 简单存储服务(Simple Storage Service,S3)。可以上传和下载对象。
·弹性计算云(Elastic Compute Cloud,EC2)。可以启动、重启以及终止实例。
·弹性块存储(Elastic Block Storage,EBS)。卷可以被创建、复制、附加到EC2实例以及销毁。
·提供安全组。类似于EC2实例的防火墙。
·设有密钥对。用于身份验证。
亚马逊Web服务的所有功能都可以通过AWS管理控制台使用,也可以通过访问aws.amazon.com使用。除在上面列出的任务之外,AWS管理控制台可以完成很多其他任务,但前面的几个操作都是我们需要在本书中介绍的。
4.5.1 命令行工具
AWS的命令行工具可以通过http://aws.amazon.com/developertools下载,请查找“Amazon EC2API Tools”。这些工具在Linux机器上也可能是现成的。Windows用户可以安装Cygwin。一旦安装完成后,你就可以使用命令,例如,你可以使用ec2-run-instances启动EC2实例、使用ec2-describe-instances给出正在运行的实例的代码清单,或者使用ec2-terminat-e-instances终止一系列实例。凡是可以管理控制台中完成的,都可以使用命令行工具来完成。
4.5.2 EC2和虚拟化
EC2意指“弹性计算云”,是AWS的家庭成员。它允许客户“租用”一个支持CUDA的服务器一段时间,并且仅仅根据使用时间收费。这些虚拟的计算机,它们从用户的角度看起来像独立服务器,被称为实例。客户可以根据自己对实例计算资源的需要使用EC2的Web服务来启动、重启并终止实例。
EC2上的支持技术之一是虚拟化,它使得一台服务器上可以同时支持多个“客户”操作系统。EC2数据中心的单个服务器可以支持多个客户的运行实例,这可以提高经济规模和降低成本。不同的实例类型有不同的特点和定价。它们可能拥有不同数量的RAM、CPU能力、本地存储和I/O性能。它们按需定价,每实例小时的价格范围可能从0.085美元到2.40美元不等。截至写至此时,支持CUDA的cg1.4xlarge实例类型的成本为每实例小时2.10美元,它的配置如下:
23 GB的RAM。
·33.5的ECU(两个四核心英特尔Xeon X5570 Nehalem CPU)。1690GB的实例存储空间。
64位平台。
由于cgl.4xlarge是一种“集群”实例类型,在一个给定服务器中只能运行一个实例。并且,相对于其他EC2实例类型,为了更好地并行工作,它需要更高带宽的网络以启用集群计算。
4.5.3 密钥对
密钥对支撑着EC2实例的访问。这个词引用自公钥加密的核心概念,即使用私有密钥(只提供给那些授权的人)和一个可以自由共享的公钥。
当创建了一个密钥对时,私钥会以一个.pem文件的形式下载。在密钥对创建后,需要小心保存,原因有以下两点:首先,任何访问.pem文件的人都能够用它来获取你的计算资源的访问权限;再者,没有办法获得私钥的新副本!亚马逊没有密钥保留业务,所以一旦私有密钥被下载,保存它就是你自己的事了。
代码清单4-1给出了一个.pem文件的例子。格式很方便查看,因为它有锚点行("BEGIN RSA PRIVATE KEY"/"END RSA PRIVATE KEY")并使用“7位纯数据”编码(即只使用ASCII文本字符),因此它可以通过电子邮件发送、可以被复制并粘贴到文本域、可以追加到(\sim/.ssh/authorized_keys文件来启用无密码登录,也可以发表在书籍上。启动EC2实例时,给定的密钥对的名称需要指定。反过来,相应的
私钥文件是用来获得访问该实例的权限的。为了更具体地了解如何用.pem文件访问EC2实例,请参见下面与Linux和Windows相关的小节。
代码清单4-1 .pem文件例子
BEGIN RSA PRIVATE KEY
MIIEowIBAAKCAQEAA2mHaXk9tTZqN7ZiUWoxhcSHjVCbHmn1SKamXqOKdLfmdqducvVkAlBicjIz/NcwiHKoTxbnEPEDyPPHg8RYGya34evswzBUCOIcilbVIpVCyaTyzo4k0WKPW8znXJzQpxr/OHzzu
tAvlg95HGoBobuGM5kaDSlkgOmtUXFKxZ4ZN1rm2kUo21N2m9jrkDDq4qTMxFuYW0HOAXeHOFNF ImroUCN2udTWOjpdgIPCgYEzz3Cssd9IQzDyadw+wbkTYq7eeTNKULs4/gmLIAw+EXKE2/seyBL leQeK11j1TFhDCjYRfghp0ecv4UnAtiO6nZod7aTAR1bXJxBSqWIDAQABAoIBAAh2umvlUCst zkpjG3zW6//ifFkKl7nZGZIBzJDzF3xbPk1fBzghFvCmoquf21ROcbIckqObK4vaSIksJrexTtoK MBMOIRQHzGo8co6y0/n0QrXpcFzqOGknEHGK0D3ou6XEUUZMo8o+okwi9UaFq4aAn2FdYkFDa5X7 d4Y0id1wPcVurOSrnFNkW14GRu+plDu2bmSmb7RUxQWGbp7bf98EyhpugOd07R3yOCddaaGgOL hdTlWJ3jCP9dmkN7NqApRzkv7R1sXzOnU2v3b9+WpF0g6wCeM2eUkuY13BP10Pg+Q4xUOpRSr0 vLDt8fUcIdH4PXTKua1NxBA1uCgYEA72wC3BmL7HMgf33yyK+/yA1z6AsAvIIA1CHJOi9siht XF6dnfJA6d12oCj1RUQG9e9Y3cW1YgcgdQBKF58M6bPulfzOctM/urd1ryWZ3ddSxgBaLEO1h4c 3/cQWGGVaMPpDSAihs2d/CnnlVoQGiQrlWxDgZIHzu8RRVV43fKcCgYEA6YDkj6klx4cuQwpsPVb IfdtP6WrHe+Ro724ka3Ry+4xFPCarXj5yl5/aPHNpdPPCFR+uYNbjTD90w+duV8LtBxJoF+i/1t Mui4116xxMBaMGQfFMS0u2+z3aZIMBXZF8gDIRi19VVfpDCi2RNKA7KhfraZ8VzZsdAgDO8Z10C gYEAvVq3iEvFM2ERQPsHzslQ7G93U/Yfxvcqb2qoJIRTcPdu290gjCWMwE/fZmxT6ELs31grBz HBMOr8BWXteZW2B6uH8NJpBfbOFUqh0+k+0oUeDFGy8jUusRMzOgtfHMXMESSt6a2yn f4VL0wmkQUWQV2FMT4iMadECGYATFUGYrA9XTlKynNht3d9wzyPWEdTrPsWdj3rujybaj90aSo gLaJX2eyP/C6mLDW83BX4PD6045ga46/UMnxWX+10fdxoRTXkEvq9IyOlyKlkoj/F944gwlFS3o 34J6exJfAQoaK3EUWUsGHocAVFJdcrm+tufu193NyM0MQBgB+koBIJKJ8uof19oWldhuERsuo poXZ9Kh/GvjJ9u5DUw6F+hCGRotdBHjuwKNTbutdzElxDMNHKoy/rhiqgcneMUmyH/F0U4sOW1 XqqMD2QfKXBAU0ttviPbmm0dbjTdT3FO1qx2K90T3u9GEUDWYqMxOyZjUoLyNr+Tar END RSA PRIVATE KEY---4.5.4 可用区域(AZ)和地理区域
AWS在被精心分开的可用区域(AZ)中提供服务,目的是防止影响一个可用区域的故障影响到任何其他可用区域。对CUDA开发人员来说,要牢记的主要考虑的因素是实例、EBS卷和其他资源必须在同一AZ中进行互操作。
4.5.5 S3
简单存储服务(Simple Storage Service,S3)被设计为一种可靠的方式来存储数据供以后检索。“对象”(基本上是文件)被存储在一个分层的结构里,结构顶层由“桶”构成,可根据需要插入“文件夹”。
除了存储和检索(“PUT”和“GET”)外,S3还包括以下功能。
·权限控制。默认情况下,S3账户的所有者才能访问S3对象,但S3对象可能会公开或权限被授予特定的AWS账户。
对象可以加密。
每个S3对象可伴有元数据,例如一个文本文件的语言或对象是否是一个图像。
·日志记录:S3对象上执行的操作可以被记录(日志被存储为更多的S3对象)。
·减少冗余:S3对象可以以较低的价格提供较低可靠性的存储服务。
·通知:例如,如果检测到减少冗余对象的丢失可以设置自动通知以让顾客知道。
·对象生命周期管理:可以在指定的一段时间后将对象按计划自动删除。
许多其他AWS服务使用S3作为持久性数据存储,例如,存储在S3的AMI和EBS卷的快照。
4.5.6 EBS
EBS(弹性块存储)由基于网络的存储组成,可分配、附加和分离给正在运行的实例。AWS的用户还可以对EBS卷创建“快照”、为新的EBS卷创建模板。
EC2实例经常有一个包含操作系统和驱动程序软件的根EBS卷。如果需要更多的存储空间,可以创建并附加EBS卷并且把它装载在客户操作系统里 [1]。
4.5.7 AMI
亚马逊机器映像(AMI)是用来描述一旦EC2实例启动“看起来”会是什么样的,包括操作系统和附加的EBS卷的数量和内容的说明。大多数EC2用户是开始于一个由Amazon提供的“库存”AMI,并且不断修改它以满足用户的要求,然后对AMI创建快照,这样他们能够使用相同的配置启动更多实例。
启动一个实例时,EC2需要用几分钟集合请求的资源,并启动虚拟机。一旦实例运行,就可以查询其IP地址并通过互联网用私钥访问它,它的名字已经在实例启动时指定了。
实例的外部IP地址被纳入了DNS名称。例如,一个cgl.4xlarge实例可能会被命名为ec2-70-17-16-35.compute-1.amazon.com,而这台机器的外部IP地址是70.17.16.35 [2]。
EC2实例也有可用于集群内通信的内部IP地址。例如,如果你启动了一批需要通过软件(如消息传递接口(MPI))相互通信的实例就要使用内部IP地址。
4.5.8 EC2上的Linux
EC2支持许多不同类型的Linux,包括由红帽派生的亚马逊品牌的Linux(“Amazon Linux”)。一旦一个实例启动,人们就可以使用用来启动这个实例的密钥对通过ssh来访问它。使用以上的IP地址和代码清单4-1中的.pem文件实例,我们就可以键入ssh-i Example.pem ec2-user@70.17.16.35(超级用户名随着Linux类型的不同而不同:ec2-user是Amazon Linux的超级用户名,而CentOS使用root,Ubuntu使用ubuntu)。
登录后,机器就归你使用啦!你可以添加用户并为他们设置密码、设置SSH登录密码、安装需要的软件(如CUDA工具集),附加更多的EBS卷并设立临时磁盘。然后,你可以为AMI创建快照以便能够启动更多的实例,这些实例看起来酷似你已经配置好的实例。
1. EBS
EBS卷很容易创建,既可以从一个空白卷创建,还可以现场制作一个快照副本。一旦创建,EBS卷可能被附加到一个实例上,它将会作为一个设备(如/dev/sdf或在更近期的Linux内核上为/dev/xvdf)出现。首次附加EBS卷时,它仅仅是一个原始块存储设备,在使用命令(如mkfs.ext3)前它必须被格式化。格式化之后,驱动器可能会被装载到一个目录:
mount
最后,如果你想为AMI创建快照并为了让刚启动的派生AMI看到驱动器,编辑/etc/fstab以载入卷。当创建一个EBS卷以附加到一个正在运行的实例时,确保在实例的同一个可用区域里(例如,us-east-1b)创建它。
2. 短暂存储
许多EC2实例的类型,包括cgl.4xlarge,有与它们相关联的本地硬盘。当这些磁盘可用时,被严格作为可删除本地存储使用。不像EBS或S3,没有纠错编码或其他技术使磁盘更可靠。为了强调这种被降低了的可靠性,这里的磁盘被称为短暂存储。
为了让短暂磁盘可用,指定了ec2-run-instances的“-b”选项,例如,
ec2-run-instances -t cgl.4xlarge -k nwiltEC2 -b /dev/sdb=ephemeral0 /dev/sdc=ephemeral1像EBS卷一样,在使用之前,短暂存储必须格式化(如,mkfs.ext3)、装载,并且它们必须有fstab入口,为的是在实例被重启时能够再现它们。
3. 用户数据
在启动时或当一个实例运行时(在这种情况下,必须重新启动实例),用户数据可以被指定到某个实例。可以在如下地址查询用户数据:
http://169.254.169.254/latest/user-data4.5.9 EC2上的Windows
访问Windows实例与访问Linux实例的方式略有不同。一经启动,客户必须使用自己的私钥文件检索EC2实例的管理员账户的密码。你可以指定你的.pem文件或复制并粘贴其内容到AWS管理控制台(如图4-1所示)。
默认情况下,此密码生成行为只对来自AWS的“库存”AMI有作用。如果你对这些AMI之一创建“快照”,得到的快照将保留机器上的任何密码。要创建一个新的可以生成随机密码的Windows AMI,运行“EC2 Config Service”工具(可在“Start”菜单找到),点击“Bundle”选项卡,然后单击上面写着“Run Sysprep and Shutdown Now”的按钮(见图4-2)。点击这个按钮后,任何相对于它创建的AMI都会产生一个随机密码,就像库存Windows AMI那样。

图4-1 AWS Windows密码检索

图4-2 Windows EC2上的Sysprep
1. 短暂存储
为了使短暂存储可用于Windows实例,必须指定ec2-run-classes的-b选项,如下所示:
ec2-run-instances -t cgl.4xlarge -k nwiltEC2 -b /dev/sdb=ephemeral0 /dev/sdc=ephemeral12. 用户数据
在启动时或当一个实例运行时(在这种情况下,必须重新启动实例),用户数据可以被指定到一个实例。用户数据可以到如下地址查询:
http://169.254.169.254/latest/user-data[1] 如果要让来自派生AMI的实例使用此EBS卷,你必须修改操作系统的配置。请参见4.5.8和4.5.9节。
[2] 为保护用户,这里的IP地址在实际地址上做了修改。
第二部分 CUDA编程
第5章 内存
第6章 流与事件
第7章 内核执行
第8章 流处理器簇
第9章 多GPU
第10章 纹理操作