写点什么

在 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:001594

评论

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

RapidComposerV5 for mac v5.3.3 高效歌曲创作辅助工具

Rose

软件测试学习笔记丨文本处理常用Linux命令-vi、grep、awk、sed

测试人

软件测试

TON生态小游戏开发:推广、经济模型与UI设计的建设指南

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

上云后如何有效控制云成本?有啥好方法?

行云管家

云计算 云服务 企业上云 云成本

MIAOYUN五周年 | 未来才是最好的礼物!

MIAOYUN

云原生 MIAOYUN 周年庆典 五周年庆

万界星空科技MES系统的智能排产功能

万界星空科技

制造业 mes 万界星空科技mes MES、 生产排班排产

MestReNova for Mac v14.2.3中文激活版 专业核磁数据处理

理理

FontBook for Mac(字体管理软件)v5.3.2激活版

理理

VMware Fusion Pro 13 for Mac v13.6.1中文激活秘钥 VM虚拟机最新版

Rose

低代码平台如何简化员工培训并提升技术能力?

天津汇柏科技有限公司

低代码平台

TiDB 监控组件之 Blackbox_exporter 运行原理

TiDB 社区干货传送门

【TiDB 企业实践-麦谷科技】超详细的升级最佳实践-从 TiDB v5.3.0 到 v7.5.2

TiDB 社区干货传送门

版本升级

如何用豆包MarsCode 打造简洁高效的星级评分组件?

豆包MarsCode

人工智能 AI 代码 组件 模版

IDA Professional for mac(反汇编逆向神器)激活安装教程

理理

高科技行业为何倚重多物理场仿真技术

思茂信息

仿真 建模 结构 高科技 辐射

Acrobat Pro DC 2024 for mac (领先的PDF编辑转换器)v24.001.20604中文激活版

理理

高效使用AI,一文掌握提示词的编写原则

禅道项目管理

人工智能 AI 项目管理软件 AIGC ChatGPT

第五届国际科创节探寻新质生产力 候选品牌:行云管家

行云管家

国际科创节

特斯拉无人驾驶出租车Robotaxi:埃隆·马斯克的预言即将成真

陆通

测试要不要转岗项目经理?

老张

项目管理 质量保障 项目经理 软件测试工程师

如何在建设 DataOps 体系中选择合适的工具或平台?

Aloudata

元数据 DataOps 数据管理 数据血缘

中文最新版3D建模软件:Rhinoceros 8 (犀牛8) v8.12

Rose

PDF解析+RAG,手把手教你在Coze搭建个人知识库!

合合技术团队

PDF rag 个人知识库

百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现

JackJiang

即时通讯;IM;网络编程

借力豆包大模型,中手游为《仙剑世界》打造丰富的AI NPC生态

新消费日报

TiDB 新版本 Meetup 活动中 TiDBer 最关心的 8 个问题

TiDB 社区干货传送门

整理 TiDB 的一些使用限制

TiDB 社区干货传送门

实践案例

比特币社区心心念念的BTCFi进展如何了?—比特币与DeFi的未来

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

SmartSVN for Mac(SVN客户端)v14.4激活版

理理

Android & iOS 使用 ARMS 用户体验监控(RUM)的最佳实践

阿里巴巴云原生

阿里云 云原生 Arms

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