Sıvı Sayıları ile Gromacs Moleküler Dinamik Simülasyonları Çalıştırın' Slurm-GCP

1. Giriş

Son güncelleme tarihi: 25.04.2022

Oluşturacağınız nedir?

Bu codelab'de Google Cloud üzerinde otomatik ölçeklendirmeli Yüksek Performanslı Bilişim (HPC) kümesi dağıtacaksınız.Terraform dağıtımı, bu kümeyi Spack aracılığıyla yüklenen Gromacs ile oluşturur. Küme, Slurm iş planlayıcısıyla yönetilir. Küme oluşturulduğunda benchMEM, benchPEP veya karşılaştırmalı değerlendirmeleri çalıştırırsınız.

Neler öğreneceksiniz?

  • Slurm iş planlayıcısını destekleyen HPC kümesi dağıtma
  • Slurm toplu işi kullanarak Google Cloud'da Gromacs ile GPU hızlandırmalı moleküler dinamik simülasyonları çalıştırma

Gerekenler

2. Kurulum

Bu codelab'i tamamlamak için Compute Engine ve Cloud Build API'lerini etkinleştirmeniz gerekir. Compute Engine ve Cloud Build API'lerini etkinleştirmek için Cloud Shell'inizi açın ve aşağıdaki komutları çalıştırın. Proje kimliğinizi aşağıdaki ile değiştirmeyi unutmayın.

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

Dikkat: Kümenize bağlanmak için üçüncü taraf SSH (ör. OpenSSH) kullanmayı planlıyorsanız OS Girişi'ni kullanarak bulut kimliği profilinize bir ssh anahtarı eklediğinizden emin olun. Cloud Identity profilinize SSH anahtarları ekleme hakkında daha fazla bilgi edinin.

3. [İSTEĞE BAĞLI] Gromacs ile GCP Sanal Makine Görüntüsü oluşturma

Derleme işleminin Gromacs'ı ve tüm bağımlılarını yüklemesi 2 saati bulabileceğinden, bu codelab'de sizin için önceden oluşturulmuş bir görüntü sağladık. Biraz zaman kazanmak için bu önceden oluşturulmuş görüntüyü kullanmak istiyorsanız bir sonraki bölüme atlayabilirsiniz.

Google Cloud'da araştırma uygulamaları çalıştırırken uygulamanızı yüklemek ve dağıtmak için yararlanabileceğiniz birçok seçenek vardır. Codelab'in bu bölümünde, slurm-gcp (CentOS7) sanal makine görüntüsünün üstünde oluşturulan bir sanal makine görüntüsü oluşturacaksınız. Oluşturma işlemi sırasında derleyici, tüm Gromacs' ve Gromacs yüklenecektir.

RCC Apps deposundaki Gromacs Cloud Build ardışık düzeni, Gromacs'i yüklemek için gerekli talimatları içerir. Yükleme işlemi, Spack'i yükleyen bir sanal makine dağıtmak için Packer'i kullanır. Bu sanal makine de GCC@9.2.0 derleyiciyi ve GPU hızlandırma etkin şekilde Gromacs@2021.2'yi yükler.

  1. GCP'de Cloud Shell'inizi açın.
  2. FluidNumerics/rcc-apps deposunu klonlama
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Google Cloud Build'i kullanarak görüntüyü derleyin.
cd rcc-apps
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async

Derleme sürecinizin durumunu Google Cloud Build kontrol panelinden kontrol edebilirsiniz

Derleme işlemi iki saat sürebilir. Bu süreci hızlandırmak için derleme yapılandırma dosyası şemanızda değişiklik yaparak makine türünü değiştirerek derleme performansını artırabilirsiniz. Bu işlem, _MACHINE_TYPE derleme değişkeni kullanılarak yapılabilir. Örneğin:

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

Derlemeniz tamamlandıktan sonra Google Cloud projenizde kümenizi dağıtmak için kullanabileceğiniz bir sanal makine görüntüsü olacak.

4. Terraform ile otomatik ölçeklendirmeli HPC kümesi dağıtma

Bu bölümde, Slurm iş planlayıcı yüklüyken otomatik ölçeklendirmeli bir HPC kümesi dağıtmak için Terraform'u kullanacaksınız. Bu küme, her biri 8 vCPU ve 1 Nvidia® Tesla V100 GPU'ya sahip işlem düğümleriyle dağıtılacaktır.

  1. GCP'de Cloud Shell'inizi açın.
  2. FluidNumerics/rcc-apps deposunu klonlama
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. gromacs terraform dizinine geçin:
cd ~/rcc-apps/gromacs/tf/slurm
  1. Bir Terraform planı oluşturup inceleyin. Kümenizin adını, GCP projenizi ve dağıtım yapmak istediğiniz alt bölgeyi belirtmek için GMX_NAME, GMX_PROJECT ve GMX_ZONE ortam değişkenlerini ayarlayın. Emin değilseniz lütfen aşağıdaki notu inceleyin
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE> 
export GMX_NAME="gromacs" 
  1. Bu codelab'in önceki bölümünde kendi sanal makine görüntünüzü oluşturduysanız GMX_IMAGE ortam değişkenini de ayarlamanız gerekir.

disa aktarma GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss- bilgiler

  1. terraform init && terraform plan komutunu çalıştıracak "make" komutunu kullanarak planı oluşturun.
make plan
  1. Kümeyi dağıtın. Gromacs ve bağımlılıkları kümenize önceden yüklenmiş olarak geldiğinden kurulum işlemi yalnızca birkaç dakika sürer.
make apply
  1. Önceki adımda oluşturulan login düğümüne SSH uygulayın. Bu düğümü önceki adımda görebilirsiniz (muhtemelen gromacs-login0 olarak adlandırılır). Bu işlemi konsol menü öğesindeki Compute Engine -> Sanal Makine Örnekleri listesinin yanında bulunan SSH düğmesini tıklayarak yapabilirsiniz. sanal makine örneğidir.

Seçenek: Bu gcloud komutu çifti, giriş düğümü adını ve SSH'yi buna göre çözer:

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. Giriş düğümüne bağlandıktan sonra küme kurulumunuzu doğrulamak için Gromacs'ın yüklü olup olmadığını kontrol edin.
$ 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 sitesinin aşağıda listelenen içeriğe sahip olduğunu doğrulayın.
$ ls /opt/share/gromacs/
benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr

5. BenchRIB Karşılaştırmasını çalıştır

Gromacs, minimum enerji kısıtlamaları altında moleküler dinamikleri simüle etmek ve moleküler yapıları hesaplamak için kullanılan bir araştırma yazılımıdır. Bu codelab için sanal makine görüntüsünde sağlanan karşılaştırmalar, moleküler dinamiklere, yani atom sistemlerinin evrimine odaklanmaktadır.

Moleküler dinamiklerde atomların konumları, hızları ve ivmeleri Newton'un hareket yasaları kullanılarak simüle edilir :

638fa1fba54c3874.png

Burada konum vektörü, i atomunun konumu, t zaman, 72a717ea69626d54.png i atomunun kütlesi; b5e52e17becb80ec.png ise j atomundan dolayı i atomu üzerinde bağlanmamış kuvvettir. 538199b3881cd305.png ise bağlı etkileşimlerden kaynaklanan kuvvetlerdir. Sıcaklık, basınç, atom konumları ve atom hızları dikkate alınarak güçler hesaplanıp sistem, yeni atom hızları ve konumları elde edecek şekilde sayısal olarak entegre edilir. Bu işlem, belirli bir süre boyunca moleküler dinamiklerin simülasyonunu yapmak için tekrarlanır.

Gromacs görseli (sizin oluşturduğunuz veya sağladığınız) üç karşılaştırmayla birlikte gelir

  1. benchMEM
  2. benchRIB
  3. benchPEP

Bu karşılaştırmalar, Dr. Kutzner'ın Free Gromacs Karşılaştırmaları seti, geçici moleküler dinamik simülasyonlarından oluşan standart bir settir. Her karşılaştırma değeri, atom sayısı ve simülasyonun süresi açısından değişiklik gösterir. Her simülasyonla ilgili yapılandırmalar aşağıdaki tabloda verilmiştir.

Metrik / Karşılaştırma

benchMEM

benchRIB

benchPEP

Atom Sayısı

81.743

2.136.412

12.495.503

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

Zaman Adımı / fs

2

4

2

Kesme Yarıçapı / nm

1

1

1.2

PME ızgara aralığı / nm

0,12

0,135

0,16

Karşılaştırmayı çalıştırmak için bir Slurm toplu işi göndermeniz gerekir. Varsayılan olarak, sağlanan toplu komut dosyası, karşılaştırmalı değerlendirmeyi çalıştırır. Sağlanan karşılaştırmalar için yapılandırmaları tanımlayan giriş grupları, /opt/share/gromacs altındaki Gromacs sanal makine görüntüsüne dahil edilir. Ayrıca, /opt/share altında Gromacs çalıştırmak için örnek bir bash komut dosyası mevcuttur.

Bu bölümde, kümenin login düğümüne SSH kullanmanız gerekir

  1. Sbatch komutunu kullanarak toplu iş gönderme
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh

Bu işlem, işi yürütme için sıraya alır ve Slurm sizin için bir işlem düğümü sağlar. sinfo öğesini çalıştırdığınızda bir işlem düğümünün alloc# durumunda olduğunu görürsünüz. Bu, işlem düğümünün işinize ayrılmış ancak temel hazırlık sürecinde olduğunu gösterir. İşiniz çalışmaya başladıktan sonra, düğüm alloc durumuna ayarlanır.

$ 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

İşin tamamlanmasını bekleyin. Varsayılan karşılaştırma (benchRIB), yaklaşık 8 milyon atomu simüle eder ve 5.000 zaman adımı (4 zaman adımı/fs ile) çalıştıracak ve tamamlanması yaklaşık 6 dakika sürecek şekilde yapılandırılmıştır. Şu komutla işinizin durumunu izleyebilirsiniz:

watch squeue

İşiniz sıradan kaldırıldığında ctrl-C tuşlarına basarak çıkış yapabilirsiniz.

  1. İş tamamlandığında, simülasyon çıkışını (run/MEM altında) içeren run/ adında bir dizin ve geçerli dizininizde gromacs.out adlı bir günlük dosyası görürsünüz. run/MEM dizini, ener.edr ve md.log adlı iki dosya içerir. ener.edr dosyası sistemin enerjilerini, sıcaklığını, basıncını, kutu boyutunu, yoğunluğunu ve sanal verilerini taşınabilir bir ikili biçimde depolar. Uzantının önerdiği gibi, md.log dosyası Gromacs simülasyonuna ait günlükleri, ayrıca parçacık ve PME çözücülerinden alınan bilgileri günlüğe kaydetmenin yanı sıra simülasyon performansı hakkında bilgiler içerir. gromacs.out dosyasının içeriği, aşağıda gösterilene benzer bir şekilde gmx mdrun hizmetinden standart çıkış içerir.
$ 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. Tebrikler

Bu codelab'de, otomatik ölçeklendirmeli, bulutta yerel bir HPC kümesi oluşturdunuz ve Google Cloud'da Gromacs ile GPU ile hızlandırılmış moleküler dinamikler simülasyonu çalıştırdınız.

Temizleme

Bu codelab'de kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla:

ÖNERİLİR: HPC kümesini Terraform ile silin

  1. Cloud Shell'inizi açın ve gromacs/tf/slurm örnek dizinine gidin
cd ~/rcc-apps/gromacs/tf/slurm
  1. Tüm kaynakları silmek için yap kaldırma komutunu çalıştırın.
make destroy

VEYA, Projeyi silin (en etkili ve yıkıcı)

Faturalandırmayı ortadan kaldırmanın en kolay yolu, codelab için oluşturduğunuz projeyi silmektir.

Dikkat: Bir projeyi silmenin aşağıdaki etkileri vardır:

  • Projedeki her şey silinir. Bu codelab için mevcut bir projeyi kullandıysanız bu projeyi sildiğinizde, projede yaptığınız diğer çalışmaları da silmiş olursunuz.
  • Özel proje kimlikleri kaybolur. Bu projeyi oluştururken, gelecekte kullanmak istediğiniz özel bir proje kimliği oluşturmuş olabilirsiniz. Proje kimliğini kullanan URL'leri (ör. appspot.com URL'si) korumak için projenin tamamını silmek yerine proje içindeki seçili kaynakları silin.

Birden fazla codelab'i ve hızlı başlangıç kılavuzunu keşfetmeyi planlıyorsanız projeleri yeniden kullanarak proje kota sınırlarını aşmaktan kaçınabilirsiniz.

  1. Cloud Console'da Kaynakları yönetin sayfasına gidin. Kaynakları yönetin sayfasına gidin
  2. Proje listesinde, silmek istediğiniz projeyi seçin ve ardından Sil c01e35138ac49503.png simgesini tıklayın.
  3. İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.