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 和 Cloud Build API,请打开 Cloud Shell 并运行以下命令。请务必将下面的
替换为您的 project-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 个人资料。详细了解如何向您的 Cloud Identity 个人资料添加 SSH 密钥。
3. [可选] 使用 Gromacs 创建 GCP 虚拟机映像
对于此 Codelab,我们为您提供了预构建的映像,因为构建过程最长可能需要 2 小时才能安装 Gromacs 及其所有依赖项。如果您想使用此预构建的映像节省时间,可以跳至下一部分。
在 Google Cloud 上运行研究应用时,可通过多种方式安装和部署应用。在此 Codelab 的这一部分中,您将创建一个基于 slurm-gcp (CentOS7) 虚拟机映像构建的虚拟机映像。在创建过程中,编译器会使用 Gromacs 的所有功能,Gromacs 文件。
RCC 应用代码库上的 Gromacs Cloud Build 流水线封装了安装 Gromacs 的必要说明。安装过程使用 Packer 部署安装 Spack 的虚拟机,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 配置文件架构以更改机器类型,以提高构建性能。可以使用 _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 部署一个可自动扩缩的 HPC 集群,该集群安装了 Slurm 作业调度器。该集群将部署多个计算节点,每个计算节点配备 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 连接到上一步中创建的 login 节点。您可以在上一步中看到此节点(可能名为 gromacs-login0)。为此,您可以在控制台菜单项 Compute Engine ->虚拟机实例。
选项:这对 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 的质量,
是原子 i 的非键合力,而
是键合作用力。给定温度、压力、原子位置和原子速度,计算力并对该系统进行数值积分,以获得新的原子速度和位置。重复此过程,以模拟给定时间段内的分子动力学。
Gromacs 图片(您创建的或提供的图片)附带三个基准
- benchMEM
- benchRIB
- benchPEP
这些基准数据来自Kutzner 提供的一组 Free Gromacs 基准 以及一组标准的瞬时分子动力学模拟。每项基准测试的原子数量和模拟时长都有所不同。下表列出了每次模拟的相关配置。
指标 / 基准 | benchMEM | benchRIB | benchPEP |
原子数 | 81,743,000 | 2,136,412,000 | 12,495,503,000 |
系统大小 / 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 |
截止半径 / nm | 1 | 1 | 1.2 |
PME 网格间距 / 纳米 | 0.12 | 0.135 | 0.16 |
如需运行基准测试,您需要提交一项 Slurm 批量作业。默认情况下,提供的批处理脚本会运行 benchRIB 基准。为所提供基准定义配置的输入演示文稿包含在 Gromacs 虚拟机映像中的 /opt/share/gromacs
下。此外,/opt/share
下还提供了用于运行 Gromacs 的 bash 脚本示例。
对于本部分,您必须通过 SSH 连接到集群的 login 节点
- 使用 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 万个 Atom,并配置为运行 5,000 个时间步(采用 4 个时间步/fs)步,大约需要 6 分钟才能完成。您可以使用以下命令监控作业的状态:
watch squeue
当作业从队列中消失时,您可以按 Ctrl-C 退出。
- 该作业完成后,您应该会看到一个名为
run/
的目录,其中包含模拟输出(在run/MEM
下)和一个名为gromacs.out
的当前目录中的日志文件。run/MEM
目录包含两个文件ener.edr
和md.log
。ener.edr
文件以便携的二进制格式存储系统的能量、温度、压力、盒子大小、密度和玻璃膜。如该扩展程序所示,除了来自粒子和 PME 求解器的信息外,md.log
文件还包含 Gromacs 模拟日志,还包含有关模拟性能的信息。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 集群,并使用 Gromacs on Google Cloud 运行了 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,然后点击关停以删除项目。