Uruchamianie symulacji dynamiki molekularnej Gromacs przy użyciu Fluid Numerics' Slurm-GCP

1. Wprowadzenie

Ostatnia aktualizacja: 25.04.2022

Co utworzysz

W ramach tego ćwiczenia w Codelabs wdrożysz autoskalowany klaster HPC (High Performance Computing) w Google Cloud.Wdrożenie Terraform utworzy ten klaster z Gromacs zainstalowanym za pomocą Spacka. Klaster będzie zarządzany za pomocą algorytmu szeregowania zadań Slurm. Po utworzeniu klastra uruchomisz testy porównawcze benchMEM, benchPEP lub analizy porównawcze RIB.

Czego się nauczysz

  • Jak wdrożyć klaster HPC obsługujący harmonogram zadań Slurm
  • Jak uruchomić symulacje dynamiki molekularnej z akceleratorem GPU za pomocą Gromacs w Google Cloud przy użyciu zadania wsadowego Slurm

Co będzie potrzebne

2. Konfiguracja

Aby wykonać to ćwiczenie w Codelabs , musisz włączyć interfejsy Compute Engine API i Cloud Build API. Aby włączyć interfejsy Compute Engine API i Cloud Build API, otwórz Cloud Shell i uruchom następujące polecenia. Pamiętaj, aby zastąpić identyfikator-projektu wartością poniżej.

gcloud config set project <PROJECT_ID>
gcloud services enable compute.googleapis.com
gcloud services enable cloudbuild.googleapis.com

Uwaga: jeśli planujesz łączyć się ze swoim klastrem przez SSH innej firmy (np. OpenSSH), musisz dołączyć klucz SSH do profilu Cloud Identity za pomocą OS Login. Więcej informacji o dodawaniu kluczy SSH do profilu Cloud Identity

3. [OPCJONALNIE] Tworzenie obrazu maszyny wirtualnej GCP przy użyciu Gromacs

Na potrzeby tych ćwiczeń w Codelabs udostępniamy gotowy obraz, ponieważ instalacja Gromacsa i wszystkich jego zależności może potrwać do 2 godzin. Jeśli chcesz wykorzystać ten gotowy obraz, aby zaoszczędzić czas, możesz przejść do następnej sekcji.

Uruchamiając aplikacje badawcze w Google Cloud, możesz instalować i wdrażać aplikacje na wiele sposobów. W tej części ćwiczenia w Codelabs utworzysz obraz maszyny wirtualnej, który będzie kompilowany na obrazie maszyny wirtualnej slurm-gcp (CentOS7). Podczas tworzenia kompilator, wszystkie funkcje Gromacsa i zostanie zainstalowany Gromacs.

Potok Gromacs Cloud Build w repozytorium RCC Apps zawiera instrukcje dotyczące instalacji Gromacs. Proces instalacji używa narzędzia Packer do wdrożenia maszyny wirtualnej, która instaluje Spack, która z kolei instaluje kompilator GCC@9.2.0 oraz Gromacs@2021.2 z włączoną akceleracją GPU.

  1. Otwórz Cloud Shell w GCP.
  2. Klonowanie repozytorium FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Skompilować obraz za pomocą Google Cloud Build.
cd rcc-apps
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async

Stan procesu kompilacji możesz sprawdzić w panelu Google Cloud Build.

Proces kompilacji może potrwać do 2 godzin. Aby przyspieszyć ten proces, możesz zmodyfikować schemat pliku konfiguracji kompilacji, aby zmienić typ maszyny. Pozwoli to zwiększyć wydajność kompilacji. Można to zrobić za pomocą zmiennej kompilacji _MACHINE_TYPE. Na przykład:

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

Gdy kompilacja się zakończy, w Twoim projekcie Google Cloud pojawi się obraz maszyny wirtualnej, którego możesz użyć do wdrożenia klastra.

4. Wdrażanie autoskalowanego klastra HPC za pomocą Terraform

W tej sekcji użyjesz Terraform do wdrożenia autoskalowanego klastra HPC z zainstalowanym algorytmem szeregowania zadań Slurm. Ten klaster zostanie wdrożony z węzłami obliczeniowymi, z których każdy ma 8 procesorów wirtualnych i 1 GPU Nvidia® Tesla V100.

  1. Otwórz Cloud Shell w GCP.
  2. Klonowanie repozytorium FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Przejdź do katalogu gromacs terraform:
cd ~/rcc-apps/gromacs/tf/slurm
  1. Utwórz i sprawdź plan Terraform. Ustaw zmienne środowiskowe GMX_NAME, GMX_PROJECT i GMX_ZONE, aby określić nazwę klastra, projekt GCP i strefę, w której chcesz przeprowadzić wdrożenie. W razie wątpliwości zapoznaj się z poniższymi uwagami
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE> 
export GMX_NAME="gromacs" 
  1. Jeśli w poprzedniej sekcji tego ćwiczenia z programowania utworzyłeś własny obraz maszyny wirtualnej, musisz też ustawić zmienną środowiskową GMX_IMAGE

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

  1. Utwórz plan za pomocą polecenia Make, które uruchomi terraform init && terraform plan.
make plan
  1. wdrożyć klaster. Proces konfiguracji trwa tylko kilka minut, ponieważ Gromacs i jego zależności są wstępnie zainstalowane w klastrze.
make apply
  1. Połącz się z węzłem logowania utworzonym w poprzednim kroku przez SSH. Możesz zobaczyć ten węzeł w poprzednim kroku (prawdopodobnie nosi on nazwę gromacs-login0). Możesz to zrobić, klikając przycisk SSH obok listy maszyn wirtualnych w pozycji menu konsoli Compute Engine -> maszynie wirtualnej.

Opcja: ta para poleceń gcloud określi nazwę węzła logowania i nazwę SSH, aby uzyskać do niego dostęp:

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. Aby sprawdzić konfigurację klastra po nawiązaniu połączenia z węzłem logowania, sprawdź, czy zainstalowano 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. Sprawdź, czy /opt/share/gromacs zawiera poniższą zawartość.
$ ls /opt/share/gromacs/
benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr

5. Przeprowadź analizę porównawczą RIB

Gromacs to oprogramowanie badawcze używane do symulowania dynamiki molekularnej i obliczania struktur cząsteczkowych przy ograniczeniach minimalizacji energii. Testy porównawcze przedstawione na obrazie maszyny wirtualnej do tego ćwiczenia z programowania dotyczą dynamiki molekularnej, ewolucji układów atomów.

W dynamice cząsteczkowej położenie, prędkość i przyspieszenia atomów są symulowane z wykorzystaniem praw dynamiki Newtona :

638fa1fba54c3874.png

gdzie wektor pozycji to pozycja atomu i, t to czas, 72a717ea69626d54.png to masa atomu i, a b5e52e17becb80ec.png to siła niepowiązana na atom i, ponieważ atom j, a 538199b3881cd305.png to siła powstała w wyniku wiązań wzajemnych. Biorąc pod uwagę temperaturę, ciśnienie, położenie atomów i szybkość atomów, siły oblicza się, a system jest integrowany numerycznie w celu uzyskania nowych prędkości i pozycji atomów. Ten proces powtarza się w celu przeprowadzenia symulacji dynamiki cząsteczkowej w danym okresie.

Do zdjęcia Gromacs (utworzonego lub dostarczonego) są dostępne 3 testy porównawcze

  1. benchMEM
  2. benchRIB
  3. benchPEP

Te testy porównawcze pochodzą z kanału Dr. Zestaw testów porównawczych Free Gromacs Benchmarks Kutznera to standardowy zestaw przejściowych symulacji dynamiki cząsteczkowej. Każda wartość porównawcza różni się pod względem liczby atomów i czasu trwania symulacji. Odpowiednie konfiguracje dla każdej symulacji znajdziesz w tabeli poniżej.

Dane / testy porównawcze

benchMEM

benchRIB

benchPEP

Liczba Atomów

81 743

2 136 412

12 495 503

Rozmiar systemu / nm

10,8 x 10,2 x 9,6

31,2 × 31,2 × 31,2

50,0 × 50,0 × 50,0

Czas kroku / fs

2

4

2

Promień odcięcia / nm

1

1

1,2

Odstępy w siatce PME / nm

0,12

0,135

0,16

Aby uruchomić test porównawczy, prześlij zadanie zbiorcze Slurm. Domyślnie udostępniony skrypt wsadowy uruchamia test porównawczy benchRIB. Talie wejściowe definiujące konfiguracje na potrzeby podanych testów porównawczych są zawarte w obrazie maszyny wirtualnej Gromacs w sekcji /opt/share/gromacs. Dodatkowo na stronie /opt/share jest dostępny przykładowy skrypt bash, który służy do uruchamiania Gromacsa.

W tej sekcji musisz połączyć się z węzłem login klastra przez SSH.

  1. Przesyłanie zadania wsadowego za pomocą polecenia sbatch
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh

Spowoduje to zakolejkowanie zadania do wykonania, a Slurm udostępni Ci węzeł obliczeniowy. Po uruchomieniu polecenia sinfo zobaczysz, że węzeł obliczeniowy jest w stanie alloc#, co oznacza, że węzeł obliczeniowy jest przydzielony do zadania, ale jest w trakcie udostępniania. Po uruchomieniu zadania węzeł zostanie ustawiony na stan 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

Poczekaj na zakończenie zadania. Domyślna analiza porównawcza (porównawcza) symuluje około 8 mln atomów i została skonfigurowana do uruchomienia 5000 kroków w czasie (z 4 krokami czasowymi/fs), co zajmuje około 6 minut. Stan zadania możesz monitorować za pomocą tego polecenia:

watch squeue

Kiedy zadanie zniknie z kolejki, możesz je zamknąć, naciskając klawisze Ctrl+C.

  1. Po zakończeniu zadania powinien pojawić się katalog o nazwie run/ zawierający dane wyjściowe symulacji (w sekcji run/MEM) oraz plik dziennika w bieżącym katalogu o nazwie gromacs.out. Katalog run/MEM zawiera 2 pliki ener.edr i md.log. Plik ener.edr przechowuje energię systemu, temperaturę, ciśnienie, rozmiar pudełka, gęstość i elementy wirusowe w przenośnym formacie binarnym. Zgodnie z sugestią rozszerzenia plik md.log zawiera dzienniki symulacji Gromacsa oraz informacje o wydajności symulacji, a także informacje z logowania informacji z rozwiązań cząstek i PME. Zawartość pliku gromacs.out zawiera standardowe dane wyjściowe z gmx mdrun powinny wyglądać podobnie do przedstawionych poniżej.
$ 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. Gratulacje

Dzięki tym ćwiczeniom w programie udało Ci się stworzyć autoskalowany, chmurowy klaster HPC oraz przeprowadzić symulację dynamiki molekularnej z akceleracją za pomocą GPU, korzystając z Gromacs w Google Cloud.

Czyszczenie

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte podczas tego ćwiczenia z programowania:

ZALECANA: usuń klaster HPC za pomocą Terraform

  1. Otwórz Cloud Shell i przejdź do przykładowego katalogu gromacs/tf/slurm
cd ~/rcc-apps/gromacs/tf/slurm
  1. Uruchomić polecenie zniszcz, aby usunąć wszystkie zasoby.
make destroy

LUB usuń projekt (najbardziej skuteczny i niszczycielski).

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby ćwiczeń z programowania.

Uwaga: usunięcie projektu spowoduje, że:

  • Wszystkie dane projektu zostaną usunięte. Jeśli w ramach ćwiczenia z programowania był używany istniejący projekt, usunięcie go spowoduje również usunięcie wszystkich innych zadań wykonanych w tym projekcie.
  • Niestandardowe identyfikatory projektu zostaną utracone. Być może w trakcie tworzenia tego projektu został utworzony niestandardowy identyfikator projektu, którego chcesz używać w przyszłości. Aby zachować adresy URL, które używają identyfikatora projektu, na przykład adres URL appspot.com, usuń wybrane zasoby w projekcie, zamiast usuwać cały projekt.

Jeśli planujesz skorzystać z wielu ćwiczeń z programowania i krótkich wprowadzeń, ponowne wykorzystanie projektów może pomóc Ci uniknąć przekroczenia limitów projektów.

  1. W konsoli Cloud otwórz stronę Zarządzanie zasobami. Otwórz stronę Zarządzanie zasobami
  2. Na liście projektów wybierz projekt do usunięcia, a następnie kliknij Usuń c01e35138ac49503.png.
  3. W oknie wpisz identyfikator projektu i kliknij Wyłącz, aby usunąć projekt.