发布于: 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 与子网设置等几个部分。重点关注以下几个参数:
- post_install 设置的是集群节点启动时运行的脚本位置,修改 YOUR_S3_BUCKET_NAME 为你自己的存储桶名称,由于 WRF 不能得益于超线程,因此这个脚本中会关闭 EC2 实例的超线程,按照物理核来运行。
- s3_read_write_resource 设置的是集群访问的 S3 存储桶,修改 YOUR_S3_BUCKET_NAME 为你自己的存储桶名称。
- compute_instance_type 设置的是计算节点的类型,建议尽可能使用较大的实例类型,在并行计算场景中提高更多的效率,此处设定为 c6g.16xlarge;默认新账户这个实例类型 limit 较少,建议提前开 support case 提高 limit。
- master_instance_type 设置的是主节点的类型,主节点用于安装软件、下载数据,不参与并行计算,所以不需要太大,此处设定为 m5.xlarge。
- scheduler 设置的是批处理计划,此处使用 slurm。
- queue_settings 指定群集使用队列而不是同构计算队列,可以使得我们使用不同的队列提交任务。仅在 scheduler 设置为 slurm 时可用。
- [queue ] 定义单一队列的配置设置,在上面的配置文件中,我定义了按需和 Spot 的队列。
- placement_group 定义集群置放群组。
- fsx_settings 及 [fsx myfsx] 设置的 FSx for Lustre 并行文件系统,集群部署完成后 master 和 computer 节点会自动挂载 fsx。
- master_subnet_id 指定要在其中预置主节点的现有子网的 ID。计算节点默认使用主节点的子网。使用单可用区部署,并使用置放群组可以降低集群节点间通信的延迟,提高并行计算效率,在此脚本中均可设置。
7. 创建 ParallelCluster 集群
$ pcluster create wrf-on-graviton2 -c wrf-on-graviton2.ini
使用命令创建集群,并等待集群创建完成。如果集群创建失败,请检查相应 Region 的 EC2 限制是否小于设定的集群最大节点数,如果受限于 EC2 limit,可以开 support case 提高 limit,或者修改设置降低最大节点数。