फ़्लुइड अंकों की मदद से ग्रोमैक्स मॉलिक्यूलर डाइनैमिक्स सिम्युलेशन चलाएं' Slurm-GCP

1. परिचय

पिछली बार अपडेट किए जाने की तारीख: 25-04-2022

आपको क्या बनाना होगा

इस कोडलैब में, Google Cloud पर ऑटो-स्केलिंग हाई परफ़ॉर्मेंस कंप्यूटिंग (एचपीसी) क्लस्टर का डिप्लॉयमेंट किया जाएगा.टेराफ़ॉर्म डिप्लॉयमेंट, Spack की मदद से इंस्टॉल किए गए Gromacs के साथ यह क्लस्टर बनाता है. क्लस्टर को Slumm जॉब शेड्यूलर की मदद से मैनेज किया जाएगा. क्लस्टर बन जाने के बाद, benchMEM, benchPEP या benchRIB बेंचमार्क चलाना होगा.

आपको इनके बारे में जानकारी मिलेगी

  • Slumm जॉब शेड्यूलर के साथ काम करने वाला HPC क्लस्टर कैसे डिप्लॉय करें
  • Slumm बैच जॉब का इस्तेमाल करके, Google Cloud पर Gromacs से जीपीयू एक्सेलरेटेड मॉलिक्यूलर डाइनैमिक सिम्युलेशन चलाने का तरीका

आपको इन चीज़ों की ज़रूरत होगी

2. सेटअप

इस कोडलैब को पूरा करने के लिए , आपको Compute Engine और Cloud Build API चालू करने होंगे. Compute Engine और Cloud Build API चालू करने के लिए, अपना Cloud Shell खोलें और इन निर्देशों को चलाएं. अपने प्रोजेक्ट-आईडी को नीचे दिए गए से बदलना न भूलें.

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

चेतावनी: अगर आपको अपने क्लस्टर से कनेक्ट करने के लिए तीसरे पक्ष के एसएसएच (जैसे, OpenSSH) का इस्तेमाल करना है, तो ओएस लॉगिन का इस्तेमाल करके, अपनी क्लाउड आइडेंटिटी प्रोफ़ाइल में ssh कुंजी जोड़ना न भूलें. अपनी Cloud Identity प्रोफ़ाइल में SSH कुंजियां जोड़ने के बारे में ज़्यादा जानें.

3. [ज़रूरी नहीं] Gromacs की मदद से GCP वीएम इमेज बनाएं

इस कोडलैब के लिए, हमने आपके लिए पहले से बनी हुई इमेज उपलब्ध कराई है. ऐसा इसलिए, क्योंकि Gromacs और इससे जुड़ी सभी डिपेंडेंसी को इंस्टॉल करने में बिल्ड प्रोसेस को पूरा होने में दो घंटे लग सकते हैं. अगर आपको कुछ समय बचाने के लिए, पहले से बनी इस इमेज का इस्तेमाल करना है, तो अगले सेक्शन पर जाएं.

Google Cloud पर रिसर्च ऐप्लिकेशन चलाते समय, आपके पास ऐप्लिकेशन इंस्टॉल करने और उसे डिप्लॉय करने के कई विकल्प होते हैं. कोडलैब के इस सेक्शन में, आपको एक वर्चुअल मशीन इमेज बनानी होगी, जो slurm-gcp (CentOS7) वीएम इमेज के ऊपर बनती है. बनाने की प्रक्रिया के दौरान, कंपाइलर, सभी Gromacs डिपेंडेंसी और Gromacs इंस्टॉल कर दिए जाएंगे.

आरसीसी ऐप्लिकेशन रिपॉज़िटरी में मौजूद Gromacs Cloud Build पाइपलाइन में, Gromacs इंस्टॉल करने के लिए ज़रूरी निर्देश शामिल होते हैं. इंस्टॉल करने की प्रोसेस में, Spack इंस्टॉल करने वाली वीएम को डिप्लॉय करने के लिए, Packer का इस्तेमाल किया जाता है. इससे जीपीयू ऐक्सेलरेशन चालू होने पर, GCC@9.2.0 कंपाइलर और Gromacs@2021.2 इंस्टॉल हो जाते हैं.

  1. जीसीपी पर अपना क्लाउड शेल खोलें.
  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 के डैशबोर्ड पर जाकर, बिल्ड प्रोसेस की स्थिति देखी जा सकती है

बिल्ड प्रोसेस पूरी होने में दो घंटे लग सकते हैं. इस काम में तेज़ी लाने के लिए,मशीन टाइप को बदलकर बिल्ड कॉन्फ़िगरेशन फ़ाइल स्कीमा में बदलाव किया जा सकता है. इससे बिल्ड की परफ़ॉर्मेंस को बेहतर बनाने में मदद मिलती है. _MACHINE_TYPE बिल्ड वैरिएबल का इस्तेमाल करके ऐसा किया जा सकता है. उदाहरण के लिए:

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

बिल्ड पूरा हो जाने के बाद, आपके Google Cloud प्रोजेक्ट में एक वीएम इमेज उपलब्ध होगी. इसका इस्तेमाल आप अपने क्लस्टर को डिप्लॉय करने के लिए कर सकते हैं.

4. टेराफ़ॉर्म की मदद से, ऑटो-स्केलिंग एचपीसी क्लस्टर डिप्लॉय करें

इस सेक्शन में, आपको अपने-आप स्केलिंग वाला HPC क्लस्टर डिप्लॉय करने के लिए, टेरेस का इस्तेमाल करना होगा. इस क्लस्टर में, Slumm का जॉब शेड्यूलर इंस्टॉल किया गया होगा. इस क्लस्टर को कंप्यूट नोड के साथ डिप्लॉय किया जाएगा. हर क्लस्टर में आठ vCPU और एक Nvidia® Tesla V100 जीपीयू का ऐक्सेस होगा.

  1. जीसीपी पर अपना क्लाउड शेल खोलें.
  2. FluidNumerics/rcc-apps रिपॉज़िटरी का क्लोन बनाएं
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. ग्रोमैक टेराफ़ॉर्म डायरेक्ट्री में बदलाव करें:
cd ~/rcc-apps/gromacs/tf/slurm
  1. टेराफ़ॉर्म प्लान बनाएं और उसकी समीक्षा करें. अपने क्लस्टर का नाम, GCP प्रोजेक्ट, और जिस ज़ोन के लिए आपको डिप्लॉय करना है उसकी जानकारी देने के लिए, एनवायरमेंट वैरिएबल GMX_NAME, GMX_PROJECT, और GMX_ZONE सेट करें. अगर आपको पक्के तौर पर नहीं पता है, तो कृपया नीचे दिया गया नोट देखें
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE> 
export GMX_NAME="gromacs" 
  1. अगर आपने इस कोडलैब के पिछले सेक्शन में अपनी वीएम इमेज बनाई है, तो आपको GMX_IMAGE एनवायरमेंट वैरिएबल भी सेट करना होगा

GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest" को एक्सपोर्ट करें

  1. बनाने के निर्देश की मदद से वह प्लान बनाएं जो terraform init && terraform plan को चलाएगा.
make plan
  1. क्लस्टर को डिप्लॉय करें. सेटअप प्रोसेस में सिर्फ़ कुछ मिनट लगते हैं, क्योंकि आपके क्लस्टर पर Gromacs और इसकी डिपेंडेंसी पहले से इंस्टॉल होती हैं.
make apply
  1. पिछले चरण में बनाए गए लॉगिन नोड में एसएसएच जोड़ें. इस नोड को आप पिछले चरण में देख सकते हैं (इसे शायद gromacs-login0 कहा जाता है). इसके लिए, कंसोल मेन्यू आइटम Compute Engine -> में वीएम इंस्टेंस की सूची के बगल में मौजूद एसएसएच बटन पर क्लिक करें VM इंस्टेंस.

विकल्प: gcloud कमांड का यह जोड़ा इसमें लॉगिन नोड नाम और एसएसएच ढूंढेंगे:

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 एक रिसर्च सॉफ़्टवेयर है जिसका इस्तेमाल मॉलिक्यूलर डाइनैमिक्स को सिम्युलेट करने और एनर्जी मिनिमाइज़ेशन कंस्ट्रेंट के तहत मॉलिक्यूलर स्ट्रक्चर की गणना करने में किया जाता है. इस कोडलैब के लिए, वीएम इमेज में दिए गए मानदंड, मॉलिक्यूलर डाइनैमिक पर फ़ोकस करते हैं. यह ऐटम के सिस्टम के विकास पर फ़ोकस करता है.

मॉलिक्यूलर डाइनैमिक में, न्यूटन के गति के नियमों का इस्तेमाल करके, परमाणुओं की स्थिति, वेग, और त्वरण का सिम्युलेट किया जाता है :

638fa1fba54c3874.png

जहां पोज़िशन वेक्टर ऐटम i की स्थिति है, t समय, ऐटम i का द्रव्यमान 72a717ea69626d54.png, ऐटम i पर नॉन-बंध्ड बल j और 538199b3881cd305.png, बॉन्ड इंटरैक्शन की वजह से लगने वाले बल हैं.b5e52e17becb80ec.png तापमान, दबाव, परमाणु की स्थिति, और परमाणु वेग को देखते हुए, बलों की गणना की जाती है और नए परमाणु वेग और स्थितियों का पता लगाने के लिए सिस्टम को संख्या के रूप में जोड़ा जाता है. इस प्रोसेस को एक तय समयावधि के लिए मॉलिक्यूलर डाइनैमिक्स को सिम्युलेट करने के लिए दोहराया जाता है.

Gromacs की इमेज (आपकी बनाई गई या दी गई इमेज) तीन मानदंड के साथ आती है

  1. benchMEM
  2. benchRIB
  3. benchPEP

ये मानदंड Dr. कुट्ज़नर का फ़्री ग्रोमैक्स बेंचमार्क का सेट और यह अस्थायी मॉलिक्यूलर डाइनैमिक सिम्युलेशन का स्टैंडर्ड सेट है. हर बेंचमार्क, ऐटम की संख्या और सिम्युलेशन की अवधि के हिसाब से अलग-अलग होता है. हर सिम्युलेशन के लिए कॉन्फ़िगरेशन नीचे दिए गए टेबल में दिए गए हैं.

मेट्रिक / बेंचमार्क

benchMEM

benchRIB

benchPEP

ऐटम की संख्या

81,743

21,36,412

1,24,95,503

सिस्टम साइज़ / एनएम

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 ग्रिड के बीच की दूरी / nm

0.12

0.135

0.16

मानदंड का इस्तेमाल करने के लिए, आपको Slarm बैच जॉब सबमिट करना होगा. डिफ़ॉल्ट रूप से, दी गई बैच स्क्रिप्ट, benchRIB बेंचमार्क को चलाती है. /opt/share/gromacs में दिए गए बेंचमार्क के कॉन्फ़िगरेशन को तय करने वाले इनपुट डेक, Gromacs VM की इमेज में शामिल किए गए हैं. इसके अलावा, Gromacs चलाने के लिए, बैश स्क्रिप्ट का उदाहरण /opt/share में उपलब्ध है.

इस सेक्शन के लिए, आपको क्लस्टर के लॉग इन नोड से एसएसएच का इस्तेमाल करना होगा

  1. sbatch कमांड का इस्तेमाल करके बैच जॉब सबमिट करें
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh

ऐसा करने पर, जॉब को पूरा करने के लिए सूची में जोड़ दिया जाएगा. साथ ही, Slarm आपके लिए एक कंप्यूट नोड का प्रावधान करेगा. 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) करीब 80 लाख ऐटम के हिसाब से काम करता है. इसे 5,000 टाइमस्टेप (चार टाइमस्टेप/fs के साथ) चलाने के लिए कॉन्फ़िगर किया गया है और इसे पूरा करने में करीब 6 मिनट लगते हैं. इस निर्देश से काम की स्थिति पर नज़र रखी जा सकती है:

watch squeue

जब आपका काम सूची से हट जाए, तो ctrl-C का इस्तेमाल करके बाहर निकला जा सकता है.

  1. काम पूरा होने के बाद, आपको run/ नाम की एक डायरेक्ट्री दिखेगी जिसमें सिम्युलेशन आउटपुट (run/MEM से कम) होगा. साथ ही, आपकी मौजूदा डायरेक्ट्री में gromacs.out नाम की एक लॉग फ़ाइल भी दिखेगी. run/MEM डायरेक्ट्री में दो फ़ाइलें ener.edr और md.log हैं. ener.edr फ़ाइल में सिस्टम की ऊर्जा, तापमान, दबाव, बॉक्स के साइज़, सघनता, और वायरल को पोर्टेबल बाइनरी फ़ॉर्मैट में सेव किया जाता है. जैसा कि एक्सटेंशन से पता चलता है, md.log फ़ाइल में ग्रोमैक्स सिम्युलेशन के लॉग शामिल हैं. साथ ही, इसमें पार्टिकल-पार्टिकल और पीएमई सॉल्वर से मिली जानकारी के अलावा, सिम्युलेशन की परफ़ॉर्मेंस की भी जानकारी शामिल है. 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. बधाई हो

इस कोडलैब में, आपने ऑटो-स्केलिंग, क्लाउड-नेटिव HPC क्लस्टर बनाया है. साथ ही, Google Cloud पर Gromacs की मदद से, जीपीयू एक्सेलरेटेड मॉलिक्यूलर डाइनैमिक्स सिम्युलेशन चलाया है!

साफ़ किया जा रहा है

इस कोडलैब में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते पर लगने वाले शुल्क से बचने के लिए:

सुझाया गया: Tenraform वाला HPC क्लस्टर मिटाएं

  1. अपना क्लाउड शेल खोलें और gromacs/tf/slurm की उदाहरण डायरेक्ट्री पर जाएं
cd ~/rcc-apps/gromacs/tf/slurm
  1. सभी संसाधनों को मिटाने के लिए, Make delete चलाएं.
make destroy

या, प्रोजेक्ट मिटाएं (सबसे असरदार और नुकसान पहुंचाने वाला)

कोडलैब के लिए बनाया गया प्रोजेक्ट मिटाना, बिलिंग को आसानी से हटाने का सबसे आसान तरीका है.

चेतावनी: किसी प्रोजेक्ट को मिटाने से ये असर होते हैं:

  • प्रोजेक्ट में मौजूद पूरा कॉन्टेंट मिटा दिया जाता है. अगर आपने इस कोडलैब के लिए किसी मौजूदा प्रोजेक्ट का इस्तेमाल किया है, तो उसे मिटाने पर, प्रोजेक्ट में आपके किए गए अन्य काम भी मिट जाएंगे.
  • कस्टम प्रोजेक्ट आईडी मौजूद नहीं हैं. इस प्रोजेक्ट को बनाते समय, हो सकता है कि आपने ऐसा कस्टम प्रोजेक्ट आईडी बनाया हो जिसे आपको आने वाले समय में इस्तेमाल करना हो. प्रोजेक्ट आईडी का इस्तेमाल करने वाले यूआरएल, जैसे कि appspot.com के यूआरएल को सुरक्षित रखने के लिए, पूरा प्रोजेक्ट मिटाने के बजाय, प्रोजेक्ट में चुने गए रिसॉर्स मिटाएं.

अगर आपको एक से ज़्यादा कोडलैब और क्विकस्टार्ट को एक्सप्लोर करना है, तो प्रोजेक्ट का दोबारा इस्तेमाल करने से, आपको प्रोजेक्ट के लिए तय की गई सीमा पार करने से बचने में मदद मिल सकती है.

  1. Cloud Console में, संसाधन मैनेज करें पेज पर जाएं. 'संसाधन मैनेज करें' पेज पर जाएं
  2. प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे मिटाना है. इसके बाद, मिटाएं c01e35138ac49503.png पर क्लिक करें.
  3. डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए शट डाउन करें पर क्लिक करें.