Jalankan Simulasi Dinamika Molekul Gromacs dengan Fluid Numerics' Slurm-GCP

1. Pengantar

Terakhir diperbarui: 25-04-2022

Yang akan Anda buat

Dalam codelab ini, Anda akan men-deploy cluster High Performance Computing (HPC) dengan penskalaan otomatis di Google Cloud.Deployment Terraform akan membuat cluster ini dengan Gromacs yang diinstal melalui Spack. Cluster akan dikelola dengan penjadwal tugas Slurm. Saat cluster dibuat, Anda akan menjalankan benchmark benchMEM, benchPEP, atau benchRIB.

Yang akan Anda pelajari

  • Cara men-deploy cluster HPC yang mendukung penjadwal tugas Slurm
  • Cara menjalankan simulasi dinamika molekul yang dipercepat oleh GPU dengan Gromacs di Google Cloud menggunakan tugas batch Slurm

Yang Anda butuhkan

2. Penyiapan

Untuk menyelesaikan codelab ini , Anda harus mengaktifkan Compute Engine API dan Cloud Build API. Untuk mengaktifkan Compute Engine dan Cloud Build API, buka Cloud Shell dan jalankan perintah berikut. Jangan lupa untuk mengganti project-id dengan di bawah.

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

Perhatian: Jika Anda berencana menggunakan SSH pihak ketiga (misalnya, OpenSSH) untuk terhubung ke cluster, pastikan Anda melampirkan kunci ssh ke profil Cloud Identity menggunakan Login OS. Pelajari lebih lanjut cara menambahkan kunci SSH ke profil Cloud Identity Anda.

3. [OPSIONAL] Membuat Image VM GCP dengan Gromacs

Untuk codelab ini, kami telah menyediakan image siap pakai untuk Anda, karena proses build dapat memerlukan waktu hingga 2 jam untuk menginstal Gromacs dan semua dependensinya. Jika Anda ingin menggunakan gambar standar ini untuk menghemat waktu, Anda dapat langsung melanjutkan ke bagian berikutnya.

Saat menjalankan aplikasi penelitian di Google Cloud, ada banyak opsi untuk menginstal dan men-deploy aplikasi Anda. Di bagian codelab ini, Anda akan membuat image virtual machine yang dibangun di atas image VM slurm-gcp (CentOS7). Selama proses pembuatan, compiler, semua milik Gromacs dependensi, dan Gromacs akan diinstal.

Pipeline Gromacs Cloud Build di repositori RCC Apps merangkum petunjuk yang diperlukan untuk menginstal Gromacs. Proses penginstalannya menggunakan Packer untuk men-deploy VM yang menginstal Spack, yang kemudian menginstal compiler GCC@9.2.0 dan Gromacs@2021.2 dengan akselerasi GPU diaktifkan.

  1. Buka Cloud Shell Anda di GCP.
  2. Meng-clone repositori FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Bangun image menggunakan Google Cloud Build.
cd rcc-apps
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async

Anda dapat memeriksa status proses build di dasbor Google Cloud Build

Proses build dapat memerlukan waktu hingga dua jam. Untuk mempercepatnya,Anda dapat mempertimbangkan untuk mengubah skema file konfigurasi build guna mengubah jenis mesin agar dapat meningkatkan performa build. Hal ini dapat dilakukan menggunakan variabel build _MACHINE_TYPE. Contoh:

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

Setelah build selesai, Anda akan memiliki image VM yang tersedia di project Google Cloud yang dapat digunakan untuk men-deploy cluster.

4. Men-deploy cluster HPC penskalaan otomatis dengan Terraform

Di bagian ini, Anda akan menggunakan Terraform untuk men-deploy cluster HPC penskalaan otomatis, yang dilengkapi dengan scheduler tugas Slurm. Cluster ini akan di-deploy dengan compute node yang masing-masing memiliki 8 vCPU dan 1 GPU Nvidia® Tesla V100.

  1. Buka Cloud Shell Anda di GCP.
  2. Meng-clone repositori FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Ubah ke direktori gromacs terraform:
cd ~/rcc-apps/gromacs/tf/slurm
  1. Membuat dan meninjau rencana terraform. Setel variabel lingkungan GMX_NAME, GMX_PROJECT, dan GMX_ZONE untuk menentukan nama cluster, project GCP, dan zona tempat Anda ingin men-deploy. Tinjau catatan di bawah jika Anda tidak yakin
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE> 
export GMX_NAME="gromacs" 
  1. Jika membuat image VM sendiri di bagian sebelumnya dari codelab ini, Anda juga harus menetapkan variabel lingkungan GMX_IMAGE

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

  1. Buat rencana dengan perintah make, yang akan menjalankan terraform init && terraform plan.
make plan
  1. Men-deploy cluster. Proses penyiapan hanya memerlukan waktu beberapa menit karena Gromacs dan dependensinya sudah terinstal sebelumnya di cluster Anda.
make apply
  1. Jalankan SSH ke node login yang dibuat di langkah sebelumnya. Anda dapat melihat node ini pada langkah sebelumnya (mungkin disebut gromacs-login0). Anda dapat melakukannya dengan mengklik tombol SSH di samping daftar Instance VM di item menu konsol Compute Engine -> di instance VM.

Opsi: Pasangan perintah gcloud ini akan mengetahui nama node login dan SSH ke dalamnya:

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. Setelah Anda terhubung ke node login, pastikan Gromacs sudah terinstal untuk memverifikasi penyiapan cluster Anda
$ 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. Pastikan /opt/share/gromacs memiliki konten yang tercantum di bawah.
$ ls /opt/share/gromacs/
benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr

5. Menjalankan Benchmark benchRIB

Gromacs adalah software riset yang digunakan untuk menyimulasikan dinamika molekul dan menghitung struktur molekul berdasarkan batasan minimalisasi energi. Benchmark yang disediakan dalam image VM untuk codelab ini berfokus pada dinamika molekul, evolusi sistem atom.

Dalam dinamika molekul, posisi, kecepatan, dan percepatan atom disimulasikan menggunakan hukum gerak Newton :

638fa1fba54c3874.pngS

dengan, vektor posisi adalah posisi atom i, t adalah waktu, 72a717ea69626d54.pngS adalah massa atom i, dan b5e52e17becb80ec.png adalah gaya tidak terikat pada atom i karena atom j dan 538199b3881cd305.pngS adalah gaya karena interaksi terikat. Dengan mempertimbangkan suhu, tekanan, posisi atom, dan kecepatan atom, gaya dihitung dan sistem terintegrasi secara numerik untuk mendapatkan kecepatan dan posisi atom baru. Proses ini diulang untuk menyimulasikan dinamika molekul selama periode waktu tertentu.

Gambar Gromacs (baik yang Anda buat maupun yang disediakan) dilengkapi dengan tiga benchmark

  1. benchMEM
  2. benchRIB
  3. benchPEP

Tolok ukur ini berasal dari Dr. Rangkaian Free Gromacs Benchmark Kutzner dan merupakan kumpulan standar simulasi dinamika molekul sementara. Setiap benchmark bervariasi dalam jumlah atom dan durasi simulasi. Konfigurasi yang relevan untuk setiap simulasi diberikan dalam tabel di bawah.

Metrik / Tolok Ukur

benchMEM

benchRIB

benchPEP

Jumlah Atom

81.743.

2.136.412

12.495.503

Ukuran Sistem / 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

Langkah Waktu / fs

2

4

2

Radii Cutoff / nm

1

1

1,2

Spasi petak PME / nm

0,12

0,135

0,16

Untuk menjalankan benchmark, Anda harus mengirimkan tugas batch Slurm. Secara default, skrip batch yang disediakan menjalankan benchmark benchRIB. Presentasi input yang menentukan konfigurasi untuk benchmark yang disediakan disertakan dalam image VM Gromacs di bagian /opt/share/gromacs. Selain itu, contoh skrip bash untuk menjalankan Gromacs tersedia di /opt/share.

Untuk bagian ini, Anda harus menjalankan SSH ke node login cluster

  1. Mengirim tugas batch menggunakan perintah sbatch
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh

Ini akan mengantrekan tugas untuk dieksekusi dan Slurm akan menyediakan node komputasi untuk Anda. Saat menjalankan sinfo, Anda akan melihat bahwa node komputasi berada dalam status alloc#, yang berarti bahwa node komputasi dialokasikan untuk tugas Anda, tetapi sedang dalam proses penyediaan. Setelah tugas Anda berjalan, node akan ditetapkan ke status 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

Tunggu tugas selesai. Tolok ukur default (benchRIB) menyimulasikan sekitar 8 juta atom dan dikonfigurasi untuk menjalankan 5.000 langkah timestep (dengan 4 timesteps/fs) dan memakan waktu sekitar 6 menit untuk menyelesaikannya. Anda dapat memantau status pekerjaan dengan perintah ini:

watch squeue

Saat tugas Anda hilang dari antrean, Anda dapat keluar dengan ctrl-C.

  1. Setelah tugas selesai, Anda akan melihat direktori bernama run/ yang berisi output simulasi (di bagian run/MEM) dan file log di direktori Anda saat ini yang disebut gromacs.out. Direktori run/MEM berisi dua file ener.edr dan md.log. File ener.edr menyimpan energi, suhu, tekanan, ukuran kotak, kepadatan, dan virus sistem dalam format biner portabel. Seperti yang disarankan oleh ekstensi, file md.log berisi log untuk simulasi Gromacs dan menyertakan informasi tentang performa simulasi selain informasi logging dari pemecah partikel dan PME. Konten gromacs.out berisi output standar dari gmx mdrun akan terlihat seperti yang ditunjukkan di bawah ini.
$ 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. Selamat

Dalam codelab ini, Anda telah membuat cluster HPC berbasis cloud dengan penskalaan otomatis dan menjalankan simulasi dinamika molekul yang dipercepat oleh GPU dengan Gromacs di Google Cloud.

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam codelab ini:

DIREKOMENDASIKAN: Menghapus cluster HPC dengan Terraform

  1. Buka Cloud Shell dan buka direktori contoh gromacs/tf/slurm
cd ~/rcc-apps/gromacs/tf/slurm
  1. Jalankan make hancurkan untuk menghapus semua sumber daya.
make destroy

ATAU, Menghapus project (paling efektif dan destruktif)

Cara termudah untuk meniadakan penagihan adalah dengan menghapus project yang Anda buat untuk codelab.

Perhatian: Menghapus project memiliki efek berikut:

  • Semua hal dalam project akan dihapus. Jika Anda menggunakan project yang sudah ada untuk codelab ini, saat menghapusnya, Anda juga akan menghapus semua pekerjaan lain yang telah dilakukan di project tersebut.
  • Project ID kustom akan hilang. Saat membuat project ini, Anda mungkin telah membuat project ID kustom yang masih ingin Anda gunakan pada masa mendatang. Untuk mempertahankan URL yang menggunakan project ID, seperti URL appspot.com, hapus resource yang dipilih di dalam project, bukan menghapus keseluruhan project.

Jika Anda berencana untuk mempelajari beberapa codelab dan panduan memulai, menggunakan kembali project dapat membantu Anda agar tidak melampaui batas kuota project.

  1. Di Cloud Console, buka halaman Manage resource. Buka halaman Kelola resource
  2. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete c01e35138ac49503.png.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.