Fluid Numerics를 사용한 Gromacs Molecular Dynamics 시뮬레이션 실행' 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 및 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 로그인을 사용하여 SSH 키를 Cloud ID 프로필에 연결해야 합니다. Cloud ID 프로필에 SSH 키를 추가하는 방법 자세히 알아보기

3. [선택사항] Gromacs로 GCP VM 이미지 만들기

이 Codelab에서는 사전 빌드된 이미지를 제공했습니다. 빌드 프로세스에서 Gromacs와 모든 종속 항목을 설치하는 데 최대 2시간이 걸릴 수 있기 때문입니다. 사전 빌드된 이미지를 사용하여 시간을 절약하고 싶다면 다음 섹션으로 건너뛰세요.

Google Cloud에서 연구 애플리케이션을 실행할 때 애플리케이션을 설치하고 배포할 수 있는 다양한 옵션이 있습니다. 이 Codelab 섹션에서는 slurm-gcp (CentOS7) VM 이미지를 기반으로 빌드되는 가상 머신 이미지를 만듭니다. 생성 과정에서 컴파일러, Gromacs의 모든 Gromacs가 설치됩니다.

RCC 앱 저장소의 Gromacs Cloud Build 파이프라인은 Gromacs 설치에 필요한 안내를 캡슐화합니다. 설치 프로세스에서는 Packer를 사용하여 Spack을 설치하는 VM을 배포하고 GPU 가속이 사용 설정된 GCC@9.2.0 컴파일러와 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 대시보드에서 빌드 프로세스의 상태를 확인할 수 있습니다.

빌드하는 데 2시간 정도 걸릴 수 있습니다. 이를 가속화하기 위해 빌드 구성 파일 스키마를 수정하여 머신 유형을 변경하여 빌드 성능을 개선할 수 있습니다. _MACHINE_TYPE 빌드 변수를 사용하면 됩니다. 예를 들면 다음과 같습니다.

gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64

빌드가 완료되면 클러스터를 배포하는 데 사용할 수 있는 VM 이미지가 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_NAME, GMX_PROJECT, GMX_ZONE 환경 변수를 설정하여 클러스터 이름, GCP 프로젝트, 배포할 영역을 지정합니다. 확실하지 않은 경우 아래 내용을 검토하세요.
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE> 
export GMX_NAME="gromacs" 
  1. 이 Codelab의 이전 섹션에서 자체 VM 이미지를 만든 경우 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를 통해 이전 단계에서 만든 login 노드에 연결합니다. 이전 단계에서 이 노드를 확인할 수 있습니다 (gromacs-login0이라고 함). 콘솔 메뉴 항목 Compute Engine -> VM 인스턴스입니다

옵션: 다음 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의 VM 이미지에 제공된 벤치마크는 원자 시스템의 진화인 분자 동역학에 중점을 둡니다.

분자 동역학에서는 뉴턴의 운동 법칙을 사용하여 원자의 위치, 속도, 가속도를 시뮬레이션합니다.

638fa1fba54c3874.png

여기서 위치 벡터은 원자 i의 위치, t는 시간, 72a717ea69626d54.png는 원자 i의 질량, b5e52e17becb80ec.png는 원자 j로 인해 원자 i에서 결합되지 않은 힘이고 538199b3881cd305.png는 결합된 상호작용으로 인한 힘입니다. 온도, 압력, 원자 위치, 원자 속도를 고려하여 힘을 계산하고 시스템을 수치로 적분하여 새로운 원자 속도와 위치를 얻습니다. 이 과정을 반복하여 주어진 기간 동안의 분자 동력을 시뮬레이션합니다.

Gromacs 이미지 (직접 만든 이미지 또는 제공된 이미지)에는 세 가지 업계 기준치가 제공됩니다.

  1. benchMEM
  2. benchRIB
  3. benchPEP

이 업계 기준치는 Dr. Kutzner의 Free Gromacs Benchmarks 세트 가 있으며 표준 일시적인 분자역학 시뮬레이션 세트입니다. 각 벤치마크는 원자 수와 시뮬레이션 기간에 따라 다릅니다. 각 시뮬레이션의 관련 구성은 아래 표에 나와 있습니다.

측정항목 / 벤치마크

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

절단 반경 / nm

1

1

1.2

PME 그리드 간격 / nm

0.12

0.135

0.16

벤치마크를 실행하려면 Slurm 일괄 작업을 제출합니다. 기본적으로 제공된 일괄 스크립트는 benchRIB 벤치마크를 실행합니다. 제공된 벤치마크의 구성을 정의하는 입력 자료는 /opt/share/gromacs 아래 Gromacs VM 이미지에 포함되어 있습니다. 또한 Gromacs를 실행하기 위한 bash 스크립트 예시가 /opt/share 아래에 있습니다.

이 섹션에서는 클러스터의 login 노드에 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만 개의 Atom을 시뮬레이션하며 5,000개의 타임스텝 (4timesteps/fs)을 실행하고 완료하는 데 약 6분이 걸리도록 구성되어 있습니다. 다음 명령어를 사용하여 작업 상태를 모니터링할 수 있습니다.

watch squeue

작업이 큐에서 사라지면 ctrl-C를 사용하여 종료할 수 있습니다.

  1. 작업이 완료되면 run/MEM 아래에 시뮬레이션 출력을 포함하는 run/ 디렉터리와 현재 디렉터리의 gromacs.out라는 로그 파일이 표시됩니다. run/MEM 디렉터리에는 두 개의 파일 ener.edrmd.log가 포함되어 있습니다. ener.edr 파일은 시스템의 에너지, 온도, 압력, 상자 크기, 밀도, virials를 포팅 가능한 바이너리 형식으로 저장합니다. 확장 프로그램에서 제안하는 것처럼 md.log 파일에는 Gromacs 시뮬레이션의 로그가 포함되어 있으며 입자 입자 및 PME 솔버의 로깅 정보 외에 시뮬레이션 성능에 관한 정보도 포함되어 있습니다. gmx mdrun의 표준 출력이 포함된 gromacs.out의 콘텐츠는 아래와 유사합니다.
$ 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를 만들었을 수 있습니다. appspot.com URL과 같이 프로젝트 ID를 사용하는 URL을 보존하려면 전체 프로젝트를 삭제하는 대신 프로젝트 내의 선택된 리소스만 삭제하세요.

여러 Codelab과 빠른 시작을 살펴보려는 경우 프로젝트를 재사용하면 프로젝트 할당량 한도 초과를 방지할 수 있습니다.

  1. Cloud 콘솔에서 리소스 관리 페이지로 이동합니다. 리소스 관리 페이지로 이동
  2. 프로젝트 목록에서 삭제할 프로젝트를 선택한 다음 삭제 c01e35138ac49503.png를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.