使用流体数值运行 Gromacs 分子动力学模拟Slurm-GCP

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。

  1. 在 GCP 上打开 Cloud Shell。
  2. 克隆 FluidNumerics/rcc-apps 代码库
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. 使用 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。

  1. 在 GCP 上打开 Cloud Shell。
  2. 克隆 FluidNumerics/rcc-apps 代码库
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. 切换到 gromacs terraform 目录:
cd ~/rcc-apps/gromacs/tf/slurm
  1. 创建并查看 Terraform 方案。设置环境变量 GMX_NAMEGMX_PROJECTGMX_ZONE,以指定集群的名称、GCP 项目以及要部署到的可用区。如果您不确定,请查看下面的注释
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE>
export GMX_NAME="gromacs"
  1. 如果您在本 Codelab 的上一部分中创建了自己的虚拟机映像,还需要设置 GMX_IMAGE 环境变量

export GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest"

  1. 使用 make 命令创建方案,该命令将运行 terraform init && terraform plan
make plan
  1. 部署集群。由于 Gromacs 及其依赖项已预安装在集群上,因此设置过程只需几分钟。
make apply
  1. 通过 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}
  1. 连接到登录节点后,如需验证集群设置,请检查是否已安装 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
  1. 验证 /opt/share/gromacs 是否包含下列内容。
$ ls /opt/share/gromacs/
benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr

5. 运行 benchRIB 基准测试

Gromacs 是一款研究软件,用于模拟分子动力学并计算能量最小化约束下的分子结构。此 Codelab 的虚拟机映像中提供的基准侧重于分子动力学,即原子系统的演变。

在分子动力学中,原子的位置、速度和加速度是使用牛顿运动定律模拟的:

638fa1fba54c3874.png

其中,位置矢量 是原子 i 的位置,t 是时间,72a717ea69626d54.png 是原子 i 的质量,b5e52e17becb80ec.png 是原子 j 对原子 i 的非键合力,538199b3881cd305.png 是键合相互作用产生的力。给定温度、压力、原子位置和原子速度,计算出作用力,并对系统进行数值积分,以获得新的原子速度和位置。重复此过程,以模拟给定时间段内的分子动力学。

Gromacs 映像(无论是您创建的还是提供的)附带三个基准

  1. benchMEM
  2. benchRIB
  3. 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 连接到集群的登录节点

  1. 使用 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 退出。

  1. 作业完成后,您应该会在当前目录中看到一个名为 run/ 的目录,其中包含模拟输出(位于 run/MEM 下)和一个名为 gromacs.out 的日志文件。run/MEM 目录包含两个文件 ener.edrmd.logener.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 集群

  1. 打开 Cloud Shell 并前往 gromacs/tf/slurm 示例目录
cd ~/rcc-apps/gromacs/tf/slurm
  1. 运行 make destroy 以删除所有资源。
make destroy

或者,删除项目(最有效但最具破坏性)

为了避免产生费用,最简单的方法是删除您为本 Codelab 创建的项目。

警告:删除项目会产生以下影响:

  • 项目中的所有内容都会被删除。如果您为此 Codelab 使用了现有项目,则删除该项目后,您在该项目中完成的所有其他工作也会被删除。
  • 自定义项目 ID 会丢失。创建此项目时,您可能创建了要在将来使用的自定义项目 ID。如需保留使用该项目 ID 的网址(例如 appspot.com 网址),请删除项目内的所选资源,而不是删除整个项目。

如果您打算探索多个 Codelab 和快速入门,重复使用项目可以帮助您避免超出项目配额上限。

  1. 在 Cloud Console 中,转到管理资源页面。 前往“管理资源”页面
  2. 在项目列表中,选择要删除的项目,然后点击删除 图标 c01e35138ac49503.png
  3. 在对话框中输入项目 ID,然后点击关停以删除项目。