亚马逊AWS官方博客

在中国区部署 Amazon ParallelCluster 3.0

行业背景

Amazon ParallelCluster 是一种完全支持和维护的开源集群管理工具,让科学家、研究人员和 IT 管理员可以在 AWS 云中轻松部署和管理高性能计算(HPC)集群。HPC 集群是紧密耦合的计算、存储和联网资源的集合,让客户能够运行大规模科学和工程设计工作负载。可以在各种不同的行业和领域,特别是那些需要进行高性能计算(HPC)的应用,部署和使用 Amazon ParallelCluster,以下是一些可以使用到 Amazon ParallelCluster 的行业背景介绍。

学术研究:Amazon ParallelCluster 可以支持学术界的各种科学研究项目,如物理学、化学、生物学、天文学等。研究人员可以利用 Amazon ParallelCluster 部署和管理大规模的计算集群,加速复杂模拟、数据分析和计算密集型任务。

媒体和娱乐业:Amazon ParallelCluster 可以支持媒体和娱乐业的渲染、动画制作、特效处理等任务。它可以加速影片制作过程,提高图形和视觉效果的质量。

金融和保险领域:在金融和保险行业,Amazon ParallelCluster 可以用于风险建模、投资组合优化、市场分析等任务。它可以处理大量的金融数据,并进行复杂的计算和模拟,帮助机构做出更准确的决策。

工程和制造业:在工程和制造领域,Amazon ParallelCluster 可以用于进行 CAD(计算机辅助设计)、CAE(计算机辅助工程)、CFD(计算流体力学)、结构分析等任务。它可以提供高性能计算能力,加速产品设计、优化和仿真过程。

生命科学和医疗研究:Amazon ParallelCluster 在生命科学和医疗研究中也有广泛的应用。它可以支持基因组学、生物信息学、药物研发、医学图像处理等任务,帮助研究人员处理和分析大规模的生物数据,加速疾病诊断和治疗的研究。

石油和天然气行业:Amazon ParallelCluster 可以用于石油和天然气行业的勘探、生产和地震模拟等任务。它可以处理大量的地震数据,进行地下结构分析和预测,提高勘探和开采的效率。

产品概述

Amazon ParallelCluster 是对热门的开源 CfnCluster 项目的强化并可取而代之,让客户能够快速构建 HPC 集群。它可自动设置所需的计算资源和共享文件系统,并提供各种批处理计划程序选项,包括 Amazon Batch 和 Slurm。

Amazon ParallelCluster 降低了集群管理的运营开销,并简化了在云上运行 HPC 工作负载的过程。Amazon ParallelCluster 有助于快速入门概念验证(POC)和生产部署。您无需为 Amazon ParallelCluster 支付额外的费用,只需为运行应用程序所需的云资源付费。Amazon ParallelCluster 通过 Python Package Index(PyPI)发布。Amazon ParallelCluster 的源代码托管在 GitHub 中的 Amazon Web Services 存储库下,地址为:https://github.com/aws/aws-parallelcluster

本教程将使用 Amazon ParallelCluster 来部署一个 HPC 集群,并运行一些简单的负载程序。参考文档:https://docs.amazonaws.cn/parallelcluster/latest/ug/what-is-aws-parallelcluster.html

架构图如下所示:

准备部署环境

部署一台 t3.micro 实例作为部署节点,使用 Amazon Linux 2 AMI,所有值保持默认。然后登陆到实例,并执行以下命令:

#配置用户凭证
aws configure
#更新 yum
sudo yum update -y

#使用 pip3 安装 virtualenv
python3 -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
python3 -m pip install --user --upgrade virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple

#创建并激活虚拟环境
python3 -m virtualenv ~/apc-ve
source ~/apc-ve/bin/activate

#在虚拟环境中安装 AWS ParallelCluster
python3 -m pip install --upgrade "aws-parallelcluster" -i https://pypi.tuna.tsinghua.edu.cn/simple

#安装 nvm 和 Node.js
curl -o- https://raw.fastgit.org/creationix/nvm/v0.39.1/install.sh | bash
chmod ug+x ~/.nvm/nvm.sh
source ~/.nvm/nvm.sh
nvm install --lts
node --version

#验证 Amazon ParallelCluster 是否安装
pcluster version

配置集群

pcluster configure --config cluster-config.yaml 

ParallelCluster 配置文件存储在当前目录的 cluster-config.yaml 中:

在部署集群前,我们首先修改 cluster-config.yaml 这个配置文件来满足我们的个性化需求。

设置计算实例的最小值 MinCount: 2 示例文件参考如下:

更多配置信息相关:https://github.com/aws/aws-parallelcluster/tree/release-3.0/cli/tests/pcluster/example_configs

创建集群

现在我们的配置已经准备好了,可以开始下面的部署了,这个过程大概需要 10 分钟时间:

pcluster create-cluster --cluster-name hpc1 --cluster-configuration cluster-config.yaml

查看集群创建进度:

pcluster describe-cluster --cluster-name hpc1 --query 'clusterStatus'

配置完成后,可以在 aws console 里看到相关节点:

使用 Slurm 方式管理 HPC 集群

重新打开 SSH 终端窗口,连接到 parallelcluster 的管理节点中,将 head-node-ip 替换成实际环境中 HeadNode 的公有 IP:

ssh -i zhy_linux.pem ec2-user@<head-node-ip>

连接到管理节点后,运行第一个 SLURM 命令 sinfo,来查看一下计算节点池:

然后我们用命令 squeue 查看是否有 job 在队列里排队:

上图显示队列是空的。

SLURM 也允许我们使用 srun 运行一些任务,我们来测试一下简单的任务是否分配给不同的节点去运行,还可以通过修改不同的-n 参数,结合 sinfo 和 squeue 命令来看看有什么变化:

srun -n 16 /bin/hostname
srun -n 32 /bin/hostname

可以看到节点会自动扩容:

我们还可以使用 scontrol 命令来查看某节点的详细信息:

网络增强 – 置放群组 & EFA

使用 Slurm 调度器的 ParallelCluster,支持开启 EFA 和置放群组,在集群配置文件 cluster-config.yaml 中进行如下修改即可:

Scheduling:
SlurmQueues:
Networking:
PlacementGroup:   # 启用置放群组
Enabled: true
         Efa:           # 启用EFA
	Enabled: true

关于置放群组及其他最佳实践:https://docs.amazonaws.cn/parallelcluster/latest/ug/best-practices-v3.html

EFA 相关信息:https://docs.amazonaws.cn/parallelcluster/latest/ug/efa-v3.html

更多关于 Slurm 方式管理集群:https://docs.amazonaws.cn/parallelcluster/latest/ug/slurm-workload-manager-v3.html

使用 Amazon Batch 方式管理 HPC 集群

Amazon Batch 根据提交的批处理作业的数量和具体资源需求,动态调整计算资源的最佳数量和类型(例如,CPU 或内存优化型实例)。

使用 Amazon Batch,您不需要安装和管理用于运行作业的批处理计算软件或服务器集群,从而可以专注于分析结果和解决问题。Amazon Batch 在所有计算服务和功能(如 Amazon EC2 和 Spot 实例)中计划、调度和执行批处理计算工作负载。

所以现在我将启动一个 Batch 环境,让 ParallelCluster 为我完成所有工作。启动 Amazon Batch 环境时,我们将利用更多资源。例如,主实例上将启动 ECS 服务。

可以采用 pcluster configure 进行配置,在调度器中选择 awsbatch,VPC 和子网选择已经创建的 VPC 和子网:

pcluster configure --config cluster-config-batch.yaml

然后修改 cluster-config-batch.yaml 文件,修改如下两个参数:

MinvCpus: 2

DesiredvCpus: 2

接下来创建使用 Amazon Batch 的 parallelcluster 集群:

pcluster create-cluster --cluster-name hpc2 --cluster-configuration cluster-config-batch.yaml

等待大约 10 分钟,集群创建完成。在 EC2 服务下面,我们可以看到自动创建了一台 HeadNode 实例和一台 Compute 实例:

同时,在 AWS Batch 服务下面,我们会发现自动创建了相应的 Job Queues 和 Compute environment。

在 AWS ECS 服务下面,我们也会发现自动创建了相应的集群和 ECS 实例(Compute 实例):

接下来 SSH 登录到 HeadNode,执行命令查看当前计算实例:

awsbhosts

可以看到,我有一个准备运行作业的实例。下面我来运行一个 hello world 测试:

awsbsub echo hello world

执行如下命令,可以查看任务执行状态:

awsbstat

我们可以观察作业成功提交的状态从 SUBMITTED 变为 STARTING 再变为 RUNNING,然后是 SUCCEEDED 或 FAIL:

在 Amazon Batch 服务下也可以看到 Amazon Batch 作为调度器自动提交的任务:

同时在 Amazon ECS 服务标签下也可以看到自动起了一个 Task 来运行这个任务:

还可以使用 awsbout 命令查看,将 aws-batch-job-id 替换成实际环境中的作业 ID:

awsbout <aws-batch-job-id>

作业完成后,可以使用 awsbstat 命令查看其状态:

关于更多 Amazon Batch 集群任务,可访问 https://docs.amazonaws.cn/parallelcluster/latest/ug/awsbatchcli-v3.html

共享存储增强(FSx for Luster)

更多存储相关配置请参考:https://docs.amazonaws.cn/parallelcluster/latest/ug/SharedStorage-v3.html

更新集群

根据实际情况,更新关于 GPU 机型以及存储的配置文件,并通过 ParallelCluster configure 进行配置:

pcluster configure --config cluster-gpu-config.yaml

更新集群:

pcluster update-cluster --cluster-name gpuhpc --cluster-configuration cluster-gpu-config.yaml

可以看到主节点已经创建了一个 4T 的磁盘以及 1T 的共享存储。

通过 ssh 的方式登录到 HeadNode 节点

ssh -i "xxxxx.pem" user@xxxxxxx-xxxxxxx-xxxxx

可以查看到显卡信息

启动作业:

srun -n 16 /bin/hostname

可以看到下图,作业节点的机型和磁盘配置。

参考文档:https://docs.amazonaws.cn/parallelcluster/latest/ug/using-pcluster-update-cluster-v3.html

删除集群

使用如下命令将集群删除,相关的 CloudFormation 模板和资源也会随之删除。

pcluster delete-cluster --cluster-name hpc2

总结

至此,我们便完成了整个 Amazon ParallelCluster 在中国区部署的全过程,并完成了自动设置所需的计算资源、调度程序和共享文件系统。并且演示了通过 Amazon Batch 和 Slurm 调度器 Amazon ParallelCluster 一起进行工作。

通过本文档,便可快速搭建一个简单、灵活和可扩展的方式来部署和管理高性能计算集群,使任何需要高性能计算的行业或领域的用户能够更专注于他们的计算任务,而不需要花费太多精力在基础设施的设置和配置上。

本篇作者

胡靖麟

西云数据解决方案架构师,10 年以上计算广告、微服务、大数据等领域的互联网研发、架构设计实践经验。