【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

在 AWS 云上快速搭建高性能计算 (HPC) 集群

  • 2019-11-12
  • 本文字数:7270 字

    阅读完需:约 24 分钟

在AWS云上快速搭建高性能计算(HPC)集群

1. 高性能计算的应用场景

科学家、工程师及科研者等经常需要使用大规模高性能计算集群(HPC)来解决计算密集或存储密集型计算的问题,常见的使用高性能计算的场景包括基因处理、金融建模与仿真、计算化学、物理建模与仿真、政府及科研项目等。在这些 HPC 应用中,通常需要使用 HPC 集群来帮助我们快速完成计算,从而减少研发成本和时间。比如基因公司为了完成遗传病组学研究,通常一次需要研究上万份基因的样本,分析上百 T 的数据,如果用自己机房的服务器来完成计算分析,需要数年的时间,如果使用 HPC 集群,提交基因分析任务,我们能使用集群的分布式资源管理器来调度并最大化的利用机器资源,在数天内完成分析任务,大大的节省计算的时间。常见的高性能计算的场景还包括:视频转码与编码、流体力学、天气预测、材料仿真、汽车碰撞仿真、风险建模、分子建模、上下文搜索、物流建模、地震勘探数据处理、基因数据计算、天体物理、深度学习、动画建模、微电子验证、图像处理、地理信息系统等。

2. 什么是高性能计算

通常所说的高性能计算使用的硬件一般分为两种情况:


  • 高性能计算机


高性能计算机通常指使用了很多处理器(作为单个机器一部分)的机器。


比如说国内的高性能计算机“天河”、“曙光”、“神威-太湖之光”等,如“神威-太湖之光”由 40 个运算机柜和 8 个网络机柜组成,一台机柜装有 1024 块处理器,计算速度 12 亿亿次浮点运算次数。


  • 高性能计算机集群


使用某一集群中的多台计算机(作为单个计算资源操作)的计算系统和环境。


这是通过将多台计算机,通过软件的方式组成集群,由集群的分布式资源管理器来负责集群中服务器资源的监控、调度等,我们可以将集群看做单个计算资源,然后将任务提交到集群,分布式资源管理器负责将任务调度到具体服务器执行。


比如在 2013 年的超级计算机 500 强的竞赛中,AWS 使用多个 C3 实例组建了高性能计算机集群,使用了 26496 个核,计算峰值速度达 593.5 万亿次浮点运算次数,当年排名世界第 64 位。


当我们需要高性能计算的时候,通常由于机房的资源比较固定,很难有很多服务器给我们来组建集群,而借用高性能计算机如“曙光“,”神威“的成本非常高,也不太现实。这时在云上搭建高性能计算集群就非常方便,因为云上有无限量的计算及存储的资源,资源更弹性,计算过程中可以根据业务压力,调整集群服务器数量;在完成计算后,我们可以释放所有计算资源,大大降低了计算成本。

3. 如何使用 AWS 云搭建 HPC 集群

通过 AWS,您能在数分钟内完成高性能计算集群的创建,并将并行 HPC 任务的数量增加到大多数本地 HPC 环境都无法支持的规模,从而提高研究速度并缩短获得成效的时间。AWS 可按需提供针对特定应用程序进行优化的 CPU、GPU 和 FPGA 服务器,有众多的服务器类型选择,无需巨额资金投入,从而帮助降低成本。您有权限访问面向紧密耦合、IO 密集型和存储密集型工作负载的完全等分的高带宽网络,这使您能够在数千个核心之间横向扩展,从而更快获得成效。

4. 集群管理软件 CFNCluster

您的 HPC 集群可能拥有成百上千台机器,手工搭建 HPC 集群意味着你需要创建所有服务器,配置所有软件,这个过程太复杂。为了简化这个操作,AWS 提供了 CFNCluster 集群管理软件,它是由 AWS 开发和维护的高性能计算集群的框架,能帮助你在数分钟内完成集群的创建和生产部署,CFNCluster 创建的集群支持 SGE,OpenLava,Torque 等高性能计算框架。下图是 CFNCluster 和 HPC 集群的关系图:



通过上图可知,通常我们需要在一台服务器上安装 CFNCluster 软件,然后通过 CFNCluster 创建和管理多个 HPC 的集群,HPC 集群中的服务器安装了 SGE, OpenLava 等分布式资源管理器,你可以根据需要配置分布式资源管理器的类型 ,你也可以使用 Cloudwatch 监控服务,根据业务压力动态调整(AutoScaling)HPC 集群计算节点的数量。当 HPC 集群创建完成后,你可以像以往使用 HPC 集群一样通过 Master 节点访问你的 HPC 集群。下面示例详细介绍了安装 CFNCluster 和创建 HPC 集群的详细过程:


(1) 在 AWS 云中创建一台 EC2 服务器(使用 Amazon Linux 的 AMI),并运行 sudo pip install cfncluster 安装 CFNCluster,示例如下:


Java


sudo pip install cfncluster
You are using pip version 6.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting cfncluster
Downloading cfncluster-1.3.2.tar.gz
Requirement already satisfied (use --upgrade to upgrade): boto>=2.42.0 in /usr/lib/python2.7/dist-packages (from cfncluster)
Requirement already satisfied (use --upgrade to upgrade): awscli>=1.10.56 in /usr/lib/python2.7/dist-packages (from cfncluster)
Collecting future>=0.16.0 (from cfncluster)
Downloading future-0.16.0.tar.gz (824kB)
100% |████████████████████████████████| 827kB 565kB/s
Collecting configparser>=3.5.0 (from cfncluster)
Downloading configparser-3.5.0.tar.gz
Requirement already satisfied (use --upgrade to upgrade): botocore==1.4.46 in /usr/lib/python2.7/dist-packages (from awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): colorama<=0.3.7,>=0.2.5 in /usr/lib/python2.7/dist-packages (from awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): docutils>=0.10 in /usr/lib/python2.7/dist-packages (from awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): rsa<=3.5.0,>=3.1.2 in /usr/lib/python2.7/dist-packages (from awscli>=1.10.56->cfncluster)
Collecting s3transfer<0.2.0,>=0.1.0 (from awscli>=1.10.56->cfncluster)
Downloading s3transfer-0.1.10-py2.py3-none-any.whl (54kB)
100% |████████████████████████████████| 57kB 6.3MB/s
Requirement already satisfied (use --upgrade to upgrade): jmespath<1.0.0,>=0.7.1 in /usr/lib/python2.7/dist-packages (from botocore==1.4.46->awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): python-dateutil<3.0.0,>=2.1 in /usr/lib/python2.7/dist-packages (from botocore==1.4.46->awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): pyasn1>=0.1.3 in /usr/lib/python2.7/dist-packages (from rsa<=3.5.0,>=3.1.2->awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): futures<4.0.0,>=2.2.0 in /usr/lib/python2.7/dist-packages (from s3transfer<0.2.0,>=0.1.0->awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): six in /usr/lib/python2.7/dist-packages (from python-dateutil<3.0.0,>=2.1->botocore==1.4.46->awscli>=1.10.56->cfncluster)
Installing collected packages: future, configparser, cfncluster, s3transfer
Running setup.py install for future
Running setup.py install for configparser
Running setup.py install for cfncluster
Successfully installed cfncluster-1.3.2 configparser-3.5.0 future-0.16.0 s3transfer-0.1.10
sudo pip install cfncluster
You are using pip version 6.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting cfncluster
Downloading cfncluster-1.3.2.tar.gz
Requirement already satisfied (use --upgrade to upgrade): boto>=2.42.0 in /usr/lib/python2.7/dist-packages (from cfncluster)
Requirement already satisfied (use --upgrade to upgrade): awscli>=1.10.56 in /usr/lib/python2.7/dist-packages (from cfncluster)
Collecting future>=0.16.0 (from cfncluster)
Downloading future-0.16.0.tar.gz (824kB)
100% |████████████████████████████████| 827kB 565kB/s
Collecting configparser>=3.5.0 (from cfncluster)
Downloading configparser-3.5.0.tar.gz
Requirement already satisfied (use --upgrade to upgrade): botocore==1.4.46 in /usr/lib/python2.7/dist-packages (from awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): colorama<=0.3.7,>=0.2.5 in /usr/lib/python2.7/dist-packages (from awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): docutils>=0.10 in /usr/lib/python2.7/dist-packages (from awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): rsa<=3.5.0,>=3.1.2 in /usr/lib/python2.7/dist-packages (from awscli>=1.10.56->cfncluster)
Collecting s3transfer<0.2.0,>=0.1.0 (from awscli>=1.10.56->cfncluster)
Downloading s3transfer-0.1.10-py2.py3-none-any.whl (54kB)
100% |████████████████████████████████| 57kB 6.3MB/s
Requirement already satisfied (use --upgrade to upgrade): jmespath<1.0.0,>=0.7.1 in /usr/lib/python2.7/dist-packages (from botocore==1.4.46->awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): python-dateutil<3.0.0,>=2.1 in /usr/lib/python2.7/dist-packages (from botocore==1.4.46->awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): pyasn1>=0.1.3 in /usr/lib/python2.7/dist-packages (from rsa<=3.5.0,>=3.1.2->awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): futures<4.0.0,>=2.2.0 in /usr/lib/python2.7/dist-packages (from s3transfer<0.2.0,>=0.1.0->awscli>=1.10.56->cfncluster)
Requirement already satisfied (use --upgrade to upgrade): six in /usr/lib/python2.7/dist-packages (from python-dateutil<3.0.0,>=2.1->botocore==1.4.46->awscli>=1.10.56->cfncluster)
Installing collected packages: future, configparser, cfncluster, s3transfer
Running setup.py install for future
Running setup.py install for configparser
Running setup.py install for cfncluster
Successfully installed cfncluster-1.3.2 configparser-3.5.0 future-0.16.0 s3transfer-0.1.10
复制代码


从输出中我们看到,CFNCluster 软件已经成功的安装。


(2) 配置集群


通过上面的 CFNCluster 软件,我们已经可以创建集群了,但创建集群前,需要使用 cfncluster configure 对集群进行简单的配置,配置信息包括集群创建的区域、创建的权限、网络等。更多的配置可以通过配置参数文件完成,示例如下:


Java


cfncluster configure
Cluster Template [default]:
AWS Access Key ID []: AKXXXXXXXXXXXXXXXXXX
AWS Secret Access Key ID []: hmxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Acceptable Values for AWS Region ID:
us-east-1
us-west-1
cn-north-1
ap-northeast-1
ap-southeast-2
sa-east-1
ap-southeast-1
ap-northeast-2
us-west-2
us-gov-west-1
ap-south-1
eu-central-1
eu-west-1
AWS Region ID []: us-west-2
VPC Name [public]: vpc-dee1xxxx
Acceptable Values for Key Name:
Demoxxxx
Key Name []: Demoxxxx
Acceptable Values for VPC ID:
vpc-c0f00000
vpc-2d600000
vpc-66f00000
vpc-dee1xxxx
vpc-06400000
VPC ID []: vpc-dee1xxxx
Acceptable Values for Master Subnet ID:
subnet-b9e00000
subnet-22800000
subnet-4e900000
subnet-e55xxxxx
subnet-47800000
Master Subnet ID []: subnet-e55xxxxx
复制代码


上述配置中:


AWS Access Key ID


创建集群的 AWS 用户对应的 Access Key,在 IAM 中创建。


AWS Secret Access Key ID


Access Key 对应的 Secret Access Key。


AWS Region ID


集群所在的区域。


VPC ID


集群被创建的网络。


Master Subnet ID


集群被创建的子网。


当我们进行简单的配置后,我们就可以创建测试的 HPC 集群了,示例如下:


Java


cfncluster create testcluster
Starting: testcluster
Status: cfncluster-testcluster - CREATE_IN_PROGRESS
Status: cfncluster-testcluster - CREATE_IN_PROGRESS
Status: MasterEIP - CREATE_IN_PROGRESS
Status: SNS - CREATE_IN_PROGRESS
Status: RootRole - CREATE_COMPLETE
Status: MasterEIP - CREATE_COMPLETE
Status: SQSPolicy - CREATE_COMPLETE
Status: AssociateEIP - CREATE_IN_PROGRESS
Status: CfnClusterPolicies - CREATE_COMPLETE
Status: AssociateEIP - CREATE_COMPLETE
Status: RootInstanceProfile - CREATE_COMPLETE
Status: MasterServer - CREATE_IN_PROGRESS
Status: ComputeFleet - CREATE_IN_PROGRESS
Status: ComputeFleet - CREATE_COMPLETE
Status: cfncluster-testcluster - CREATE_COMPLETE
Output:"MasterPublicIP"="34.xxx.xx.xx"
Output:"MasterPrivateIP"="172.16.4.33"
Output:"GangliaPublicURL"="http://34.xxx.xx.xx/ganglia/"
Output:"GangliaPrivateURL"="http://172.16.4.33/ganglia/"
复制代码


从上面的输出可以看到,当 create 集群的时候,会帮我们创建 master 和多个 computer 的节点。你可以根据上图中的 MasterPublicIP 的地址 ssh 登录到 HPC 的主节点,也可以使用 GangliaPublicURL 来监控集群资源。除了上述的 CFNCluster 的 create 和 configure 命令,还有 delete,update,stop,list 等命令来查看集群状态和管理集群。

5. CFNCluster 是如何创建集群的

上一节您通过 cfncluster configure 简单的配置,然后就能创建集群了,这时候你可能会有很多疑惑,比如:我如何定义我集群的节点类型、节点数等,这些都可以通过配置 CFNCluster 服务器 home 目录下面~/.cfncluster/config 来实现,在此配置文件中能够配置集群的参数,AWS 通过 CloudFormation 的模板和参数列表创建 HPC 集群。下面是部分的参数:


template_url


使用 cloudformation 创建 HPC 的模板文件,AWS 也提供了默认的模板文件。


compute_instance_type


集群计算节点的类型。


master_instance_type


集群主节点的类型。


initial_queue_size


创建集群的初始节点数


max_queue_size


集群的最大节点数


scheduler


分布式资源管理器的类型


base_os


操作系统类型等,全部的配置参数,可以参考下面链接:


http://cfncluster.readthedocs.io/en/latest/configuration.html

6. 提交 Job 到 HPC 集群

完成集群创建后,您就可以登录集群,然后运行 qsub 命令提交你的任务了。下面是通过主节点登陆 HPC 集群示例:


Java


ssh -i Demoxxx.pem ec2-user@34.xxx.xx.xx
The authenticity of host '34.xxx.xx.xx (34.xxx.xx.xx)' can't be established.
ECDSA key fingerprint is 6c:a0:21:10:13:b4:07:4b:bc:b9:83:dc:bd:87:00:00.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '34.xxx.xx.xx' (ECDSA) to the list of known hosts.
Last login: Wed Aug 2 06:47:26 2017
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/
12 package(s) needed for security, out of 19 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-16-4-33 ~]$
复制代码


分布式资源管理器安装在/opt 目录下,查看分布式资源管理器示例如下:


Java


cd /opt
[ec2-user@ip-172-16-4-33 opt]$ ls -l
total 24
drwxr-xr-x 5 root root 4096 Apr 17 07:58 aws
drwxr-xr-x 5 root root 4096 Aug 2 06:46 cfncluster
drwxr-xr-x 6 root root 4096 Jun 12 05:15 chef
drwxr-xr-x 16 sgeadmin root 4096 Aug 2 06:47 sge
drwxr-xr-x 7 root root 4096 Jun 12 05:29 slurm
drwxr-xr-x 8 root root 4096 Jun 12 05:27 torque
复制代码


查看集群状态和集群的主机示例如下:


Java


[ec2-user@ip-172-16-4-33 opt]$ qstat
[ec2-user@ip-172-16-4-33 opt]$ qhost
HOSTNAME ARCH NCPU NSOC NCOR NTHR LOAD MEMTOT MEMUSE SWAPTO SWAPUS
----------------------------------------------------------------------------------------------
global - - - - - - - - - -
ip-172-16-4-123 lx-amd64 1 1 1 1 0.00 993.4M 144.4M 0.0 0.0
ip-172-16-4-128 lx-amd64 1 1 1 1 0.00 993.4M 181.6M 0.0 0.0
复制代码

7. 总结

至此你的测试的高性能计算的集群就已经创建好了,对于创建生产环境的高性能计算的集群,你需要根据业务类型,在参数文件中配置合适的服务器类型、合适大小的集群、分布式资源管理器来创建集群。AWS 的 CFNCluster 能帮你快速创建集群,让你把工作集中在业务处理而不是集群的创建和管理。本文中的集群创建只适用于 AWS Global 区域,不适用于中国区,对于中国区的创建方法,请参考博客“在 AWS 中国区快速搭建高性能计算(HPC)集群”。


作者介绍:



蓝勇,AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广,在 DR 解决方案、数据仓库、RDS 服务、企业应用、自动化运维等方面有着广泛的设计和实践经验。在加入 AWS 之前,在甲骨文中国担任资深售前工程师,负责售前方案咨询和架构设计,在数据库,中间件,大数据及企业应用方面有丰富经验。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/quickly-build-high-performance-computing-hpc-clusters-on-the-aws-cloud/


2019-11-12 08:001335

评论

发布
暂无评论
发现更多内容

第 8 周 系统架构总结

心在那片海

Architecture Phase1 Week12:HomeWork

phylony-lu

架构师训练营第 1 期 -- 第十二周学习总结

发酵的死神

极客大学架构师训练营

第12周总结

睡觉表演者

极客时间架构师一期

架构师训练营第二期 第 8 周总结

月下独酌

极客大学架构师训练营

架构训练营第八周

xiaomao

架构师训练营第十二周总结

吴传禹

极客大学架构师训练营

数据应用 课后练习

ABS

第3周作业提交

Binary

极客大学架构师训练营

架构师训练营第 1 期 - week12 - 作业

lucian

极客大学架构师训练营

架构训练营第八周总结

xiaomao

第8周作业

hunk

极客大学架构师训练营

架构师训练营第十二周命题作业

一马行千里

架构师训练营第十二周作业

吴传禹

极客大学架构师训练营

第八周作业

Geek_9527

生产环境全链路压测建设历程之八 生产全链路压测和传统压测的差异点

数列科技杨德华

第 8 周 系统架构作业

心在那片海

Week 8 性能优化

evildracula

学习 架构

数据应用(一)

wing

极客大学架构师训练营

架构师训练营第2期 第8周命题作业

月下独酌

极客大学架构师训练营

大数据概述

garlic

极客大学架构师训练营

单词匹配算法,算法常见的模数1000000007 模数10 ^ 9 + 7,swift mock URLSession,John 易筋 ARTS 打卡 Week 30

John(易筋)

ARTS 打卡计划 单词匹配算法 swift mock数据 算法中的模数

第3周学习总结

Binary

极客大学架构师训练营

第七周作业

Geek_9527

架构设计:企业总体架构要如何做?小白也能快速领悟的设计思想

互联网应用架构

架构设计

Architecture Phase1 Week12:Summarize

phylony-lu

极客大学架构师训练营

Java内存模型

懒AI患者

常量池 Java内存模型 元数据区

架构师训练营第 1 期 -- 第十二周作业

发酵的死神

极客大学架构师训练营

第十二周 作业2

Yangjing

极客大学架构师训练营

架构师第三周作业

胡益

第八周作业总结

hunk

极客大学架构师训练营

在AWS云上快速搭建高性能计算(HPC)集群_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章