发布于: Nov 30, 2022

【概要】随着云计算技术的发展,其应用领域不在局限于工业领域,生活中的云计算也是无处不在,比如说天气预报的应用。

随着云计算技术的发展,其应用领域不在局限于工业领域,生活中的云计算也是无处不在,比如说天气预报的应用。Weather Research and Forecasting Model (WRF) 被誉为是次世代的中尺度天气预报模式,很多气象机构都使用 WRF 来做气象方面的研究与预测。由于地理信息与实时气象数据量庞大,以及计算逻辑复杂,需要高性能的计算集群作为基础设施。Amazon 可以提供丰富的、弹性扩展的高性能计算资源,如 64 位 Arm Neoverse 内核定制而成,为在 Amazon EC2 中运行的云工作负载提供更高的性价比的 Graviton2 实例。

Amazon Graviton2 与第一代 Amazon Graviton 处理器相比,Amazon Graviton2 处理器不管在性能还是功能上都实现了巨大的飞跃。 它们都支持 Amazon EC2 T4g、M6g、C6g 和 R6g 实例,及其具有本地基于 NVMe 的 SSD 存储的变体,而且与当前这一代基于 x86 的实例 1 相比,这些实例为各种工作负载(包括应用程序服务器、微服务、高性能计算、电子设计自动化、游戏、开源数据库和内存中的缓存)提供高达 40% 的性价比提升。

充分利用公有云的弹性,可以使得气象研究和预测既高效、又经济,并可以以更灵活的方式提供给客户。本文将详细向您介绍在 Amazon 上使用 Graviton2 实例搭建 Amazon ParallelCluster 集群、构建 WRF、并介绍如何通过 WRF 并行计算做气象预测的整个流程,让您更轻松地在 Amazon 中国区开启气象的研究和预测。

 

Amazon ParallelCluster 是一个 Amazon 支持的开源集群管理工具,它在开源 CfnCluster 项目上构建,根据您提交的任务自动设置和管理计算资源和共享文件系统。在 Amazon ParallelCluster v2.8.0 或更高的版本上,ParallelCluster 启用了 Ubuntu 18.04 和 Amazon Linux 2 上的 ARM 实例支持,使得我们可以实现更高性价比的高性能计算 (HPC)。此外,Amazon ParallelCluster 支持各种批处理计划程序,如 Amazon Batch、SGE、Torque 和 Slurm,本文将使用 Slurm 作为批处理程序,ParallelCluster 还支持自动化集成 Amazon FSx for Lustre 并行文件系统和 DCV 远程桌面。以下是 ParallelCluster 架构图:

 

 

1. 启动跳板机实例

打开 Amazon 管理控制台,选择 EC2 服务,点击【启动实例】启动一个新的实例。这台实例对应上图中的跳板机,用于 ParallelCluster 的集群配置和管理,对性能没有高要求,使用 T2.micro 或同类型的机型即可。

 

 

2. 安装 Amazon CLI 与 ParallelCluster

通过 ssh 登录到跳板机内,安装 Amazon CLI 和 Amazon ParallelCluster 命令。

$ pip3 install awscli -U --user
$ pip3 install aws-parallelcluster -U --user

在安装之前可以用 pip —version 查看是否已经安装 pip,如果没有安装可以使用以下命令安装,参见:https://pip.pypa.io/en/stable/installing

 

3. 配置 IAM 凭证

打开 Amazon 控制台,选择 IAM 服务,选择一个有足够权限的 IAM 用户(如 Administrator 权限),创建新的访问密钥,并记录创建的访问密钥的 ID 与私有访问密钥(Access Key 与 Secret Key),用于配置实例的访问权限。

回到控制实例中,配置 IAM Credentials,Access Key ID 与 Secret Access Key 分别填写之前生成的密钥 ID 与私有访问密钥。

$ aws configure
AWS Access Key ID [None]: ABCD***********
AWS Secret Access Key [None]: wJalrX********
Default region name [us-east-1]: cn-northwest-1
Default output format [None]: json

4. 初始化 ParallelCluster

通常,要配置 ParallelCluster 集群,您可以使用命令 pcluster configure,然后提供请求的信息,例如 Region、 Scheduler 和 EC2 实例类型,最后生成 ~/.parallelcluster/config 配置文件。此外,您也可以通过创建一个基本配置文件,然后定制该文件以包含 ParallelCluster 特定选项来实现快速配置。

下面的命令生成一个新的密钥对,查询跳板机实例的元数据以获得子网 ID、 VPC ID,最后生成配置文件。此外,您也可以直接编辑这个配置文件来添加和更改配置选项。

设置默认区域

AWS_DEFAULT_REGION
$ export AWS_DEFAULT_REGION=$(curl --silent http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/[a-z]$//')

生成一个新的密钥对

$ aws ec2 create-key-pair --key-name lab-key --query KeyMaterial --output text > ~/.ssh/lab-key
$ chmod 600 ~/.ssh/lab-key

获取 Amazon 网络信息 (ParallelCluster 集群将会部署在该 VPC 内)

$ IFACE=$(curl --silent http://169.254.169.254/latest/meta-data/network/interfaces/macs/)
$ SUBNET_ID=$(curl --silent http://169.254.169.254/latest/meta-data/network/interfaces/macs/${IFACE}/subnet-id)
$ VPC_ID=$(curl --silent http://169.254.169.254/latest/meta-data/network/interfaces/macs/${IFACE}/vpc-id)
$ REGION=$(curl --silent http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/[a-z]$//')

5. 创建一个初始 Amazon ParallelCluster 配置文件

$ cat > wrf-on-graviton2.ini << EOF
[aws]
aws_region_name = ${REGION}

[global]
cluster_template = default
update_check = true
sanity_check = true

[cluster default]
key_name = lab-key
base_os = alinux2
vpc_settings = public
ebs_settings = myebs
fsx_settings = myfsx
master_instance_type = c6g.16xlarge
post_install = s3://YOUR_S3_BUCKET_NAME/pcluster_postinstall.sh
s3_read_write_resource = arn:aws-cn:s3:::YOUR_S3_BUCKET_NAME/*
scheduler = slurm
queue_settings = od-queue,spot-queue

[queue od-queue]
compute_resource_settings = c6g-od
compute_type = ondemand
placement_group = DYNAMIC

[compute_resource c6g-od]
instance_type = c6g.16xlarge
min_count = 0
max_count = 16
initial_count = 0

[queue spot-queue]
compute_resource_settings = c6g-spot
compute_type = spot
placement_group = DYNAMIC

[compute_resource c6g-spot]
instance_type = c6g.16xlarge
min_count = 0
max_count = 16
initial_count = 0

[vpc public]
vpc_id = ${VPC_ID}
master_subnet_id = ${SUBNET_ID}

[ebs myebs]
shared_dir = /shared
volume_type = gp2
volume_size = 20

[fsx myfsx]
shared_dir = /fsx
storage_capacity = 1200
deployment_type = SCRATCH_2

[aliases]
ssh = ssh {CFN_USER}@{MASTER_IP} {ARGS}

EOF

6. 编辑 parallelcluster 配置

使用以下命令查看或编辑 ParallelCluster 配置

$ view wrf-on-graviton2.ini

脚本分为区域、集群信息配置、自动扩展设置、共享数据卷设置、VPC 与子网设置等几个部分。重点关注以下几个参数:

  1. post_install 设置的是集群节点启动时运行的脚本位置,修改 YOUR_S3_BUCKET_NAME 为你自己的存储桶名称,由于 WRF 不能得益于超线程,因此这个脚本中会关闭 EC2 实例的超线程,按照物理核来运行。
  2. s3_read_write_resource 设置的是集群访问的 S3 存储桶,修改 YOUR_S3_BUCKET_NAME 为你自己的存储桶名称。
  3. compute_instance_type 设置的是计算节点的类型,建议尽可能使用较大的实例类型,在并行计算场景中提高更多的效率,此处设定为 c6g.16xlarge;默认新账户这个实例类型 limit 较少,建议提前开 support case 提高 limit。
  4. master_instance_type 设置的是主节点的类型,主节点用于安装软件、下载数据,不参与并行计算,所以不需要太大,此处设定为 m5.xlarge。
  5. scheduler 设置的是批处理计划,此处使用 slurm。
  6. queue_settings 指定群集使用队列而不是同构计算队列,可以使得我们使用不同的队列提交任务。仅在 scheduler 设置为 slurm 时可用。
  7. [queue ] 定义单一队列的配置设置,在上面的配置文件中,我定义了按需和 Spot 的队列。
  8. placement_group 定义集群置放群组。
  9. fsx_settings 及 [fsx myfsx] 设置的 FSx for Lustre 并行文件系统,集群部署完成后 master 和 computer 节点会自动挂载 fsx。
  10. master_subnet_id 指定要在其中预置主节点的现有子网的 ID。计算节点默认使用主节点的子网。使用单可用区部署,并使用置放群组可以降低集群节点间通信的延迟,提高并行计算效率,在此脚本中均可设置。
 

7.  创建 ParallelCluster 集群

$ pcluster create wrf-on-graviton2 -c wrf-on-graviton2.ini

使用命令创建集群,并等待集群创建完成。如果集群创建失败,请检查相应 Region 的 EC2 限制是否小于设定的集群最大节点数,如果受限于 EC2 limit,可以开 support case 提高 limit,或者修改设置降低最大节点数。

 

相关文章