【AICon】开辟产业应用新天地,大模型重塑各行各业,精华内容上线58%!>>> 了解详情
写点什么

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

评论

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

关于QPalette的使用

YOLO.

c++ qt 9月月更

软件测试 | 测试开发 | 测试人生 | 00后0经验应届毕业生拿下2线城市15W offer,好励志~

测吧(北京)科技有限公司

软件测试 测试 offer

软件测试 | 测试开发 | 一文搞定 uiautomator2 自动化测试工具使用

测吧(北京)科技有限公司

测试 自动化测试

Qt | 关于对象树和元对象的相关问题

YOLO.

c++ qt 9月月更

Qt | 关于容器类的一些总结

YOLO.

c++ qt 9月月更

字节跳动A/B实验背后的秘密:样本量计算

字节跳动数据平台

数据分析 前端 ab测试 统计原理

软件测试 | 测试开发 | 测试人员必须掌握的测试用例

测吧(北京)科技有限公司

测试 测试用例

【荣耀开发者服务平台—百亿曝光扶持等你来】智慧服务快应用卡片接入指南(上)

荣耀开发者服务平台

JavaScript 前端 UI 安卓 honor

基于Hudi的湖仓一体技术在Shopee的实践

Shopee技术团队

Hudi LakeHouse 湖仓一体

软件测试 | 测试开发 | 这些常用测试平台,你们公司在用的是哪些呢?

测吧(北京)科技有限公司

测试 bug

MySQL系列——表的创建、插入、修改、删除数据

胖虎不秃头

MySQL 数据库 9月月更

软件测试 | 测试开发 | 测试工程师用 Shell 定位 Bug 的正确姿势

测吧(北京)科技有限公司

测试 bug

MySQL系列——索引、视图、DBA常用命令、数据库设计三范式

胖虎不秃头

MySQL 数据库· 9月月更

Qt | 关于样式表的使用 QStyleSheet

YOLO.

c++ qt 9月月更

字节跳动 DanceCC 工具链系列之Xcode LLDB耗时监控统计方案

字节跳动终端技术

ios xcode swift LLVM 客户端

离谱了!京东T7手写「并发编程知识手册」,从原理到项目实战详解

了不起的程序猿

Java 并发编程 java程序员 java面试 java编程

Qt | 文件信息 QFileInfo

YOLO.

c++ qt 9月月更

Python 教程之数据分析(6)—— 数据分析的数学运算

海拥(haiyong.site)

Python 9月月更

软件测试 | 测试开发 | 智能遍历测试在回归测试与健壮性测试的应用

测吧(北京)科技有限公司

软件测试 测试

Qt | Qt中的一些使用在容器类上的算法

YOLO.

c++ qt 9月月更

直播预告 | PolarDB-X 动手实践系列——PolarDB-X 数据导入导出功能

阿里云数据库开源

MySQL 数据库 阿里云 云原生 PolarDB-X

高并发下的网络 IO 模型设计

C++后台开发

后台开发 reactor 高并发 epoll 网络io模型

iOS端如何实现带UI截屏分享

MobTech袤博科技

ios

MySQL系列——约束、存储引擎、事务

胖虎不秃头

MySQL 数据库· 9月月更

望繁信科技携手复旦大学教育发展基金会,齐心共助公益慈善义拍

望繁信科技

博弈论(depu)与孙子兵法-02(46/100)

hackstoic

博弈论

Python 教程之数据分析(5)—— 使用 Python 进行数据分析和可视化 | 第 2 套

海拥(haiyong.site)

Python 9月月更

软件测试 | 测试开发 | 测试人生 | 入行未满3年拿下AI领域上市公司30W+ offer,他靠的是什么?

测吧(北京)科技有限公司

软件测试 测试

Qt | 文件操作 QFile

YOLO.

qt 9月月更

数据可视化系列教程之组件通信

云智慧AIOps社区

前端 JavaScrip 可视化数据

软件测试 | 测试开发 | AppCrawler 自动遍历测试实践(三):动手实操与常见问题汇总

测吧(北京)科技有限公司

软件测试 测试 软件测试和开发

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