1. מבוא
עדכון אחרון: 25 באפריל 2022
מה תפַתחו
ב-Codelab הזה, תפרסו אשכול מחשוב ביצועים (HPC) עם התאמה לעומס (auto-scaling) ב-Google Cloud.פריסה של Terraform יוצרת את האשכול הזה עם גרומאקים מותקנים דרך Spack. האשכול ינוהל באמצעות מתזמן המשימות של Slurm. לאחר יצירת האשכול, תפעילו את benchMEM, benchPEP או benchRIBs.
מה תלמדו
- איך לפרוס אשכול HPC שתומך במתזמן המשימות של Slurm
- איך להריץ סימולציות של דינמיקה מולקולרית עם האצה של GPU ב-Gromacs ב-Google Cloud, באמצעות משימת Slurm באצווה
מה צריך להכין
2. הגדרה
כדי להשלים את ה-Codelab הזה , צריך להפעיל את ממשקי ה-API של Compute Engine ושל Cloud Build. כדי להפעיל את ממשקי ה-API של Compute Engine ו-Cloud Build, עליכם לפתוח את Cloud Shell ולהריץ את הפקודות הבאות. חשוב לזכור להחליף את project-id ב-
שלמטה.
gcloud config set project <PROJECT_ID> gcloud services enable compute.googleapis.com gcloud services enable cloudbuild.googleapis.com
זהירות: אם אתם מתכננים להשתמש ב-SSH של צד שלישי (למשל OpenSSH) כדי להתחבר לאשכול, חשוב שתצרפו מפתח SSH לפרופיל Cloud Identity שלכם באמצעות OS Login. מידע נוסף על הוספת מפתחות SSH לפרופיל Cloud Identity
3. [אופציונלי] יצירת תמונת VM של GCP באמצעות Gramacs
עבור ה-Codelab הזה, סיפקנו לך תמונה שהוכנה מראש, כי תהליך ה-build יכול להימשך שעתיים עד להתקנת Gramacs וכל יחסי התלות שלו. אם אתם רוצים להשתמש בתמונה שהוגדרה מראש כדי לחסוך זמן, אפשר לדלג קדימה לקטע הבא.
כשמריצים מחקר על אפליקציות ב-Google Cloud, יש הרבה אפשרויות להתקנה ופריסה של האפליקציה. בחלק הזה של ה-Codelab, יוצרים תמונת מכונה וירטואלית שמבוססת על תמונת ה-VM מסוג slurm-gcp (CentOS7). במהלך היצירה, המהדר צריך להזין את כל של יחסי התלות, ו-Gromacs יותקנו.
צינור עיבוד הנתונים של Gromacs Cloud Build במאגר של RCC Apps כולל את ההוראות הנדרשות להתקנת Gumacs. בתהליך ההתקנה נעשה שימוש ב-Packer כדי לפרוס מכונה וירטואלית (VM) שמתקינה את Spack, והמהדר (compiler) GCC@9.2.0 ו-Gromacs@2021.2 מופעלים, כשהאצת GPU מופעלת.
- פותחים את Cloud Shell ב-GCP.
- שכפול המאגר של FluidNumerics/rcc-apps
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- יצירת התמונה באמצעות Google Cloud Build.
cd rcc-apps gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async
אפשר לבדוק את הסטטוס של תהליך ה-build במרכז הבקרה של Google Cloud Build
תהליך ה-build יכול להימשך שעתיים. כדי להאיץ את זה,כדאי לשנות את הסכימה של קובץ תצורת build כדי לשנות את סוג המכונה כדי לשפר את הביצועים של ה-build. אפשר לעשות זאת באמצעות משתנה ה-build _MACHINE_TYPE. לדוגמה:
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64
בסיום ה-build תהיה לכם תמונת VM זמינה בפרויקט ב-Google Cloud, ותוכלו להשתמש בה כדי לפרוס את האשכול.
4. פריסה של אשכול HPC עם התאמה אוטומטית לעומס (auto-scaling) באמצעות Terraform
בקטע הזה תשתמשו ב-Terraform כדי לפרוס אשכול HPC עם התאמה אוטומטית לעומס (auto-scaling), כאשר מתזמן המשימות של Slurm מותקן. האשכול הזה ייפרס עם צומתי מחשוב שלכל אחד מהם יש 8 vCPU ו-GPU אחד של Nvidia® Tesla V100.
- פותחים את Cloud Shell ב-GCP.
- שכפול המאגר של FluidNumerics/rcc-apps
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- שינוי לספריית tromacs terraform:
cd ~/rcc-apps/gromacs/tf/slurm
- תיצרו ותבדקו תוכנית שטח. מגדירים את משתני הסביבה
GMX_NAME
,GMX_PROJECT
ו-GMX_ZONE
כדי לציין את שם האשכול, הפרויקט ב-GCP ואת התחום שבו רוצים לפרוס. אם לא ברור לך איזו הערה אפשר לבדוק בהמשך
export GMX_PROJECT=<PROJECT_ID> export GMX_ZONE=<ZONE> export GMX_NAME="gromacs"
- אם יצרתם תמונת VM משלכם בקטע הקודם ב-Codelab הזה, צריך להגדיר גם את משתנה הסביבה GMX_IMAGE
ייצוא GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-previous"
- יוצרים את התוכנית באמצעות פקודת make, שתריץ את
terraform init && terraform plan
.
make plan
- פורסים את האשכול. תהליך ההגדרה נמשך רק כמה דקות, מכיוון ש-Gromacs ויחסי התלות שלו מותקנים מראש באשכול.
make apply
- SSH לצומת login שנוצר בשלב הקודם. אפשר לראות את הצומת הזה בשלב הקודם (כנראה נקרא gromacs-login0). כדי לעשות זאת, לוחצים על לחצן SSH שלצד רשימת המכונות הווירטואליות בתפריט המסוף Compute Engine -> מופע של מכונה וירטואלית.
אפשרות: צמד פקודות 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}
- לאחר ההתחברות לצומת ההתחברות, כדי לאמת את הגדרת האשכול, יש לוודא ש-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
- צריך לוודא שהתוכן שמפורט למטה ב-
/opt/share/gromacs
.
$ ls /opt/share/gromacs/ benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr
5. הפעלת נקודת ההשוואה ב-BnchRIB
Gromacs היא תוכנת מחקר שמשמשת להדמיה של דינמיקה מולקולרית ולחישוב מבנים מולקולריים בכפוף למגבלות של צמצום אנרגיה. נקודות ההשוואה שמופיעות בתמונת ה-VM ב-Codelab מתמקדות בדינמיקה מולקולרית, בהתפתחות של מערכות של אטומים.
בדינמיקה מולקולרית, המיקומים, המהירויות והתאוצות של אטומים מדומים באמצעות חוקי התנועה של ניוטון :
כאשר, הוא המיקום של האטום i, t הוא זמן,
הוא המסה של האטום i ו-
הוא הכוח הלא-מקושר על האטום i עקב האטום j ו-
הם הכוחות שנובעים מאינטראקציות קשורות. בהתחשב בטמפרטורה, בלחץ, במיקומים של האטום ובמהירויות האטומים, הכוחות מחושבים והמערכת משולבת מבחינה מספרית כדי לקבל מהירויות אטום ומיקומים חדשים. התהליך הזה חוזר על עצמו כדי לדמות את הדינמיקה המולקולרית במשך פרק זמן נתון.
תמונת Gramacs (זו שיצרת או זו שסיפקת) כוללת שלוש נקודות השוואה
- benchMEM
- benchRIB
- benchPEP
נקודות ההשוואה האלה מגיעות מ-Dr. נקודות ההשוואה של Free Gumacs של קוצנר , הן קבוצה סטנדרטית של סימולציות של דינמיקה מולקולרית חולפת. כל נקודת השוואה משתנה במספר האטומים ובמשך הסימולציה. ההגדרות הרלוונטיות לכל סימולציה מפורטות בטבלה הבאה.
מדד / נקודת השוואה | benchMEM | benchRIB | benchPEP |
מספר עדכוני ה-Atom | 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 |
Time Step / fs | 2 | 4 | 2 |
חיתוך Radii / nm | 1 | 1 | 1.2 |
ריווח של רשתות PME / nm | 0.12 | 0.135 | 0.16 |
כדי להריץ את נקודת ההשוואה, צריך לשלוח משימת אצווה של Slurm. כברירת מחדל, הסקריפט המאצווה שסופק מפעיל את נקודת ההשוואה ב-BnchRIB. חבילות הקלט שמגדירות את ההגדרות של נקודות ההשוואה שסופקו כלולות בתמונה של ה-VM של Gramacs בקטע /opt/share/gromacs
. בנוסף, סקריפט bash לדוגמה להרצת Gumacs זמין ב-/opt/share
.
בקטע הזה, צריך SSH לצומת login של האשכול
- שליחת משימה באצווה באמצעות פקודת 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) שמוגדרת כברירת מחדל מדמה כ-8 מיליון אטומים ומוגדרת להפעלה של 5,000 שלבי זמן (עם 4 שלבים/fs) והשלמת הפעולה נמשכת כ-6 דקות. אתם יכולים לעקוב אחרי סטטוס המשימה באמצעות הפקודה הבאה:
watch squeue
כשהמשימה נעלמת מהתור, אפשר לצאת באמצעות Ctrl-C.
- בסיום המשימה, אמורה להופיע ספרייה בשם
run/
שמכילה את פלט הסימולציה (בקטעrun/MEM
) וקובץ יומן בספרייה הנוכחית בשםgromacs.out
. הספרייהrun/MEM
מכילה שני קבצים:ener.edr
ו-md.log
. הקובץener.edr
מאחסן את האנרגיות, הטמפרטורה, הלחץ, גודל הקופסה, הצפיפות ווריאנטים של המערכת בפורמט בינארי ונייד. כפי שהתוסף מרמז, הקובץmd.log
מכיל יומנים עבור הסימולציה של Garmacs, וכן מידע על ביצועי הסימולציה, בנוסף למידע על רישום המידע מפתרונות החלקיקים ומפתרונות ה-PME. התוכן של 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. מזל טוב
בשיעור ה-Codelab הזה, יצרתם אשכול HPC מבוסס-ענן עם התאמה אוטומטית לעומס (auto-scaling), והרצתם סימולציית דינמיקה מולקולרית מואצת של GPU עם Gramacs ב-Google Cloud!
מנקה
כדי לא לצבור חיובים לחשבון Google Cloud עבור המשאבים שבהם השתמשתם ב-Codelab הזה:
מומלץ: למחוק את אשכול ה-HPC באמצעות Terraform
- פותחים את המעטפת של Cloud Shell ועוברים לספרייה לדוגמה
gromacs/tf/slurm
.
cd ~/rcc-apps/gromacs/tf/slurm
- מריצים את האפשרות 'השמדת' כדי למחוק את כל המשאבים.
make destroy
או, מוחקים את הפרויקט (היעיל וההרסני ביותר)
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם עבור Codelab.
זהירות: למחיקת פרויקט יש את ההשפעות הבאות:
- התוכן של הפרויקט נמחק כולו. אם השתמשתם בפרויקט קיים ב-Codelab הזה, כשמוחקים אותו, נמחקות גם כל העבודה האחרות שביצעתם בפרויקט.
- מאבדים את מזהה הפרויקט בהתאמה אישית. כשיצרתם את הפרויקט, יכול להיות שיצרתם מזהה פרויקט מותאם אישית שבו תרצו להשתמש בעתיד. כדי לשמור על כתובות ה-URL שמשתמשות במזהה הפרויקט, כמו appspot.com, צריך למחוק את המשאבים שנבחרו בפרויקט אבל לא את הפרויקט כולו.
אם אתם מתכננים להיעזר בכמה מעבדי קוד ומדריכים למתחילים, שימוש חוזר בפרויקטים יכול לעזור לכם להימנע מחריגה ממכסות הפרויקטים.
- במסוף Cloud, עוברים לדף Manage resources. כניסה לדף Manage resources
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ואז לוחצים על מחיקה
.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.