1. 简介
上次更新时间:2022 年 4 月 25 日
构建内容
在此 Codelab 中,您将在 Google Cloud 上部署可自动扩缩的高性能计算 (HPC) 集群。Terraform 部署会通过 Spack 创建此集群并安装 Gromacs。集群将通过 Slurm 作业调度程序进行管理。创建集群后,您将运行 benchMEM、benchPEP 或 benchRIB 基准。
学习内容
- 如何部署支持 Slurm 作业调度程序的 HPC 集群
- 如何使用 Slurm 批量作业在 Google Cloud 上通过 Gromacs 运行 GPU 加速的分子动力学模拟
所需条件
2. 设置
如需完成此 Codelab,您需要启用 Compute Engine 和 Cloud Build API。如需启用 Compute Engine API 和 Cloud Build API,请打开 Cloud Shell 并运行以下命令。请记得将下方的 替换为您的项目 ID。
gcloud config set project <PROJECT_ID> gcloud services enable compute.googleapis.com gcloud services enable cloudbuild.googleapis.com
注意:如果您打算使用第三方 SSH(例如 OpenSSH)连接到集群,请务必使用 OS Login 将 SSH 密钥附加到您的 Cloud Identity 个人资料。详细了解如何将 SSH 密钥添加到您的 Cloud Identity 个人资料。
3. [可选] 创建包含 Gromacs 的 GCP 虚拟机映像
在此 Codelab 中,我们为您提供了一个预构建的映像,因为构建流程可能需要长达 2 小时才能安装 Gromacs 及其所有依赖项。如果您想使用此预构建的映像来节省一些时间,可以跳至下一部分。
在 Google Cloud 上运行研究应用时,您可以通过多种方式安装和部署应用。在此 Codelab 部分中,您将创建一个基于 slurm-gcp (CentOS7) 虚拟机映像构建的虚拟机映像。在创建过程中,系统会安装编译器、Gromacs 的所有依赖项以及 Gromacs。
RCC Apps 代码库中的 Gromacs Cloud Build 流水线封装了安装 Gromacs 所需的指令。安装过程使用 Packer 部署一个安装了 Spack 的虚拟机,该虚拟机随后会安装 GCC@9.2.0 编译器和启用了 GPU 加速的 Gromacs@2021.2。
- 在 GCP 上打开 Cloud Shell。
- 克隆 FluidNumerics/rcc-apps 代码库
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- 使用 Google Cloud Build 构建映像。
cd rcc-apps gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async
您可以在 Google Cloud Build 信息中心查看构建流程的状态
构建流程可能需要两个小时。为了加快此过程,您可以考虑修改 build 配置文件架构,以更改机器类型,从而提高 build 性能。这可以使用 _MACHINE_TYPE build 变量来完成。例如:
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64
构建完成后,您的 Google Cloud 项目中将提供一个虚拟机映像,您可以使用该映像来部署集群。
4. 使用 Terraform 部署可自动扩缩的 HPC 集群
在本部分中,您将使用 Terraform 部署一个安装了 Slurm 作业调度程序的可自动扩缩的 HPC 集群。此集群将部署具有以下配置的计算节点:每个节点有 8 个 vCPU 和 1 个 Nvidia® Tesla V100 GPU。
- 在 GCP 上打开 Cloud Shell。
- 克隆 FluidNumerics/rcc-apps 代码库
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- 切换到 gromacs terraform 目录:
cd ~/rcc-apps/gromacs/tf/slurm
- 创建并查看 Terraform 方案。设置环境变量
GMX_NAME、GMX_PROJECT和GMX_ZONE,以指定集群的名称、GCP 项目以及要部署到的可用区。如果您不确定,请查看下面的注释
export GMX_PROJECT=<PROJECT_ID> export GMX_ZONE=<ZONE> export GMX_NAME="gromacs"
- 如果您在本 Codelab 的上一部分中创建了自己的虚拟机映像,还需要设置 GMX_IMAGE 环境变量
export GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest"
- 使用 make 命令创建方案,该命令将运行
terraform init && terraform plan。
make plan
- 部署集群。由于 Gromacs 及其依赖项已预安装在集群上,因此设置过程只需几分钟。
make apply
- 通过 SSH 连接到上一步中创建的登录节点。您可以在上一步中看到此节点(可能称为 gromacs-login0)。为此,您可以在控制台菜单项 Compute Engine -> 虚拟机实例中,点击虚拟机实例列表旁边的 SSH 按钮。
可选:以下这对 gcloud 命令将确定登录节点名称并通过 SSH 连接到该节点:
export CLUSTER_LOGIN_NODE=$(gcloud compute instances list --zones ${GMX_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1)
gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${GMX_ZONE}
- 连接到登录节点后,如需验证集群设置,请检查是否已安装 Gromacs
$ spack find gromacs ==> In environment /apps/spack-pkg-env ==> Root specs gromacs@2021.2 +cuda~mpi ==> 1 installed package -- linux-centos7-x86_64 / gcc@9.2.0 ----------------------------- gromacs@2021.2
- 验证
/opt/share/gromacs是否包含下列内容。
$ ls /opt/share/gromacs/ benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr
5. 运行 benchRIB 基准测试
Gromacs 是一款研究软件,用于模拟分子动力学并计算能量最小化约束下的分子结构。此 Codelab 的虚拟机映像中提供的基准侧重于分子动力学,即原子系统的演变。
在分子动力学中,原子的位置、速度和加速度是使用牛顿运动定律模拟的:

其中,
是原子 i 的位置,t 是时间,
是原子 i 的质量,
是原子 j 对原子 i 的非键合力,
是键合相互作用产生的力。给定温度、压力、原子位置和原子速度,计算出作用力,并对系统进行数值积分,以获得新的原子速度和位置。重复此过程,以模拟给定时间段内的分子动力学。
Gromacs 映像(无论是您创建的还是提供的)附带三个基准
- benchMEM
- benchRIB
- benchPEP
这些基准来自 Kutzner 博士的一组免费 Gromacs 基准 ,是一组标准的瞬态分子动力学模拟。每个基准测试的原子数量和模拟时长各不相同。下表列出了每项模拟的相关配置。
指标 / 基准 | benchMEM | benchRIB | benchPEP |
原子数 | 81,743 | 2,136,412 | 12,495,503 |
系统大小 / nm | 10.8 x 10.2 x 9.6 | 31.2 x 31.2 x 31.2 | 50.0 x 50.0 x 50.0 |
时间步长 / fs | 2 | 4 | 2 |
截止半径 / 纳米 | 1 | 1 | 1.2 |
PME 网格间距 / 纳米 | 0.12 | 0.135 | 0.16 |
如需运行基准测试,您需要提交 Slurm 批量作业。默认情况下,提供的批处理脚本会运行 benchRIB 基准。用于定义所提供基准的配置的输入卡组包含在 /opt/share/gromacs 下的 Gromacs 虚拟机映像中。此外,您还可以在 /opt/share 下找到用于运行 Gromacs 的示例 bash 脚本。
对于本部分,您必须通过 SSH 连接到集群的登录节点
- 使用 sbatch 命令提交批量作业
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh
这会将作业排入执行队列,然后 Slurm 会为您预配一个计算节点。运行 sinfo 后,您会看到一个计算节点处于 alloc# 状态,这意味着该计算节点已分配给您的作业,但正在进行预配。作业运行后,节点将设置为 alloc 状态。
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
gromacs* up infinite 1 alloc# gromacs-compute-0-0
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
2 gromacs gromacs_ joe R 0:02 1 gromacs-compute-0-0
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
gromacs* up infinite 1 alloc gromacs-compute-0-0
等待作业完成。默认基准 (benchRIB) 会模拟大约 800 万个原子,并配置为运行 5,000 个时间步(每 fs 4 个时间步),大约需要 6 分钟才能完成。您可以使用以下命令监控作业的状态:
watch squeue
当您的作业从队列中消失后,您可以按 Ctrl-C 退出。
- 作业完成后,您应该会在当前目录中看到一个名为
run/的目录,其中包含模拟输出(位于run/MEM下)和一个名为gromacs.out的日志文件。run/MEM目录包含两个文件ener.edr和md.log。ener.edr文件以可移植的二进制格式存储系统的能量、温度、压力、盒子大小、密度和维里。正如扩展名所示,md.log文件包含 Gromacs 模拟的日志,除了粒子-粒子和 PME 求解器的日志记录信息外,还包含有关模拟性能的信息。gromacs.out 的内容包含来自gmx mdrun的标准输出,应类似于以下内容。
$ tail -n9 gromacs.out
step 5000, remaining wall clock time: 0 s
Core t (s) Wall t (s) (%)
Time: 3085.342 385.683 800.0
(ns/day) (hour/ns)
Performance: 4.481 5.356
GROMACS reminds you: "I never thought of stopping, and I just hated sleeping. I can't imagine having a better life." (Barbara McClintock)
OK
6. 恭喜
在此 Codelab 中,您创建了一个可自动扩缩的云原生 HPC 集群,并在 Google Cloud 上使用 Gromacs 运行了 GPU 加速的分子动力学模拟!
清理
为避免因本 Codelab 中使用的资源导致您的 Google Cloud 账号产生费用,请执行以下操作:
建议:使用 Terraform 删除 HPC 集群
- 打开 Cloud Shell 并前往
gromacs/tf/slurm示例目录
cd ~/rcc-apps/gromacs/tf/slurm
- 运行 make destroy 以删除所有资源。
make destroy
或者,删除项目(最有效但最具破坏性)
为了避免产生费用,最简单的方法是删除您为本 Codelab 创建的项目。
警告:删除项目会产生以下影响:
- 项目中的所有内容都会被删除。如果您为此 Codelab 使用了现有项目,则删除该项目后,您在该项目中完成的所有其他工作也会被删除。
- 自定义项目 ID 会丢失。创建此项目时,您可能创建了要在将来使用的自定义项目 ID。如需保留使用该项目 ID 的网址(例如 appspot.com 网址),请删除项目内的所选资源,而不是删除整个项目。
如果您打算探索多个 Codelab 和快速入门,重复使用项目可以帮助您避免超出项目配额上限。
- 在 Cloud Console 中,转到管理资源页面。 前往“管理资源”页面
- 在项目列表中,选择要删除的项目,然后点击删除 图标
。 - 在对话框中输入项目 ID,然后点击关停以删除项目。