写点什么

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

评论

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

前端常考面试题整理

hellocoder2029

JavaScript 前端

“伯乐”流量调控平台工程视角 | 得物技术

得物技术

运营 架构-

高级数据库管理:SQLPro for SQLite激活版

真大的脸盆

数据库 Mac 数据库管理工具 数据库管理 Mac 软件

通过微信小程序体验阿里云IoT物联网平台——设备接入类

阿里云AIoT

物联网

认识一下,我们是应用社交「幕后大佬」 IM 家族

融云 RongCloud

即时通讯 IM

深圳高新技术企业申请条件以及流程简单说明

行云管家

高新企业 高新技术 高新

行云管家堡垒机客服电话是多少?谁知道?

行云管家

网络安全 数据安全 堡垒机 行云管家

如何提升运维的效率,可以用小程序试试

没有用户名丶

LED显示屏与LCD拼接屏的对比

Dylan

PC LCD1602液晶显示屏 LED显示屏

LeetCode题解:137. 只出现一次的数字 II,哈希表,JavaScript,详细注释

Lee Chen

JavaScript LeetCode

2023最新版Java面试八股文大全PDF版限时分享,含700道高频面试题

Java你猿哥

Java ssm Java 面试 面经 春招

DockQuery | 成为信创产业“关键码”

BinTools图尔兹

数据库 信创产业 国产数据库工具 DockQuery

3 月 16 日晚 8 点,陪你一起从 CentOS 迁移到 OpenCloudOS!

OpenCloudOS

Linux

拿到大厂前端offer的前端开发是怎么回答面试题的

hellocoder2029

JavaScript 前端

【小程序案例】支付宝小程序-MQTT模器,IoT设备通过WSS接入阿里云IoT物联网平台——设备接入类

阿里云AIoT

JavaScript windows 物联网

强烈推荐!阿里架构师纯手写的大型分布式项目《凤凰架构》手册

Java你猿哥

Java 架构 微服务 微服务架构 面经

【总结】Java实现短信验证码

宙哈哈

Java 验证码

IDEA 插件最佳组合:JRebel+XRebel 热部署和接口分析优化,太爽了

Java你猿哥

Java Spring Boot ssm IDEA 热部署

GPT-4问世;LLM训练指南;纯浏览器跑Stable Diffusion

OneFlow

人工智能 深度学习

在昇腾平台上对TensorFlow网络进行性能调优

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 企业号 3 月 PK 榜

透过现象看Java AIO的本质 | 得物技术

得物技术

后端 Java】

协同存储,为边缘计算创造更大价值

阿里云CloudImagine

云计算 边缘计算

C#滑动拼图验证码实现笔记

宙哈哈

C# html 验证码

pix2pix3D:只需编辑标签,就能生成更逼真的三维图像

Zilliz

火山引擎DataTester:A/B实验如何应用在抖音的产品优化流程中?

字节跳动数据平台

大数据 云服务 AB testing实战 ab测试 企业号 3 月 PK 榜

应用内支付服务现网、沙盒环境下常见关键事件的对比与总结

HarmonyOS SDK

HMS Core

一文彻底搞懂前端缓存机制

hellocoder2029

JavaScript 前端

NCCL源码解析①:初始化及ncclUniqueId的产生

OneFlow

人工智能 深度学习

DNS、硬件、LVS、Nginx该如何搭配?

源字节1号

前端开发 后端开发 小程序开发,软件开发

狂野之心 The Wild at Heart for Mac (魔法森林冒险游戏)

互联网搬砖工作者

树莓派+阿里云IoT人脸识别场景实战——业务系统架构类

阿里云AIoT

Python JavaScript 物联网 对象存储 Web App开发

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