top of page

Singularity - קונטיינר לעבודה בסביבה מרובת ביצועים

Singularity היא תוכנה חוצה פלטפורמות מחשוב, המבוססת קוד פתוח ומאפשרת וירטואליזציה וכמיסת קוד (Software container) ברמת מערכת ההפעלה.

אחד השימושים העיקריים של תוכנת Singularity הוא בהנגשת אריזת קוד ויבילות קוד (Portable application) לעולמות המחשוב המדעי ומחשוב עתיר ביצועים. הצורך ביבילות קוד, המאפשר מעבר מהמחשב האישי לשרת מרוחק ולסביבה מרובת משאבי מחשוב ועד הענן הציבורי, יחד עם הצורך בריבוי מופעי הרצה, הם בין הצרכים העיקריים במחשוב מדעי עתיר ביצועים לטובת הרצת סימולציות מורכבות לאימון, למידה עמוקה ועוד. צרכים אלו מקבלים מענה דרך שימוש בפתרון Singularity.

השימוש בקוד ארוז מבוסס Singularity מאפשר למפתחי תוכנה ואלגוריתמים לנייד קוד בצורה פשוטה מפלטפורמה אחת לאחרת בשקיפות ובקלות ובאופן כזה לנצל בקלות משאבי מחשוב רבים ומגוונים לטובת פתרון בעיות שמצריכות משאבים רבים. פתרון זה מאפשר שסביבות שלמות ניתנות להעתקה ולביצוע בפלטפורמות אחרות.

לקריאה נוספת: https://he.wikipedia.org/wiki/Singularity_(תוכנה)

מודול singularity ב-NegevHPC הינו למעשה מערכת containers המותאמת באופן ייחודי למערכות HPC. המידע ששימש לצורך יצירת המדריך הזה, וכן הסבר על קבצי ההגדרות של של קונטיינר ב-singularity ניתן למצוא כאן :https://sylabs.io/guides/3.5/user-guide/mpi.htmlhttps://sylabs.io/guides/3.5/user-guide/definition_files.html

על מנת להתחיל לעבוד עם המודול נציץ את הפקודות הבאות:

module load singularity

source $set_singularity_env

הערה חשובה: על מנת לערוך שינויים או ליצור קונטיינרים מקבצי הגדרות כמו במדריך עליכם להיות בעלי יכולת של fakeroot, בשלב זה יכולת זו נמסרת במשורה.

כעת נפרט כיצד ניתן ליצור קונטיינר, לשלוח אותו כעבודה ב-SLURM ולקבל תוצאות:

ישנן שני צורות עבודה:

1. יצירת קובץ defs אשר מכיל את כל ההגדרות הדרושות ליצירת הקונטיינר שלכם.

2. הורדת קונטיינר בסיסי והגדרה ידנית של כל הפארמטרים בו.

עבור מדריך זה נתמקד בצורה הראשונה.

ניצור תוכנית mpi בסיסית שתדפיס "Hello, I am rank 0/1" כשהתוכנית תורץ על ידי SLURM. קובץ ההגדרות שלנו יהיה בנוי באופן הבא:

התוכנית אותה נריץ בקונטיינר היא:

כאשר נריץ את הפקודה הבאה אז singularity תיצור לנו את הקונטיינר עם כל ההגדרות הנדרשות על מנת לקמפל את קובץ התוכנית.

חשוב מאוד להוסיף את האפשרויות של ה- fakeroot ושל sandbox מכיוון שהראשונה מאפשרת לנו להתחבר לקונטיינר שלנו עם הרשאות אדמין (root) - כלומר ניתן לשנות אותו מבפנים ממש כמו אדמין - והאפשרות השנייה אומרת ל-singularity לבנות את הקונטיינר בצורה שתאפשר לשנות אותו לאחר יצירתו.

הפקודה הזו יכולה לארוך זמן, תלוי כמובן בגודל השינוים שאנחנו רוצים שיבוצעו במהלך הבנייה של הקונטיינר.

כעת נכנס לקונטיינר ונבצע בו מספר שינויים:

אחרי כמה דקות של התקנה נראה כי nano הותקן ומוכר בתוך הקונטיינר:

כעת אחרי שהתוכנה קומפלה והקונטיינר הוכן נריץ אותו על הקלסטר:

תחילה נראה מהו הפלט לו אנחנו מצפים:

הסקריפט שלנו ייראה באופן הבא וההגשה ל-SLURM מתבצעת כמו הגשת עבודה רגילה לכל דבר:

אחרי שהעבודה הסתיימה הפלט שלה אמור להיות :

קבלת תוצאות:

בגלל ש-singularity מחקה את סביבת העבודה איתה התחברנו לקונטיינר אזי אפשר לעבוד עם הקונטיינר כאילו אנחנו עובדים בתוך הסביבה שלנו, כשהכוונה היא שניתן ליצור קבצי תוצאות בתיקייה בה נמצא הקונטיינר ואחרי הריצה לקחת משם את תוצאות החישוב.

הערה על המערכת:

המערכת יכולה לעבוד לא רק עם containers הנמצאים בספרייה הרחבה שלה בכתובת : <library://<exp: centos, אלא היא גם יכולה לעבוד עם images של Docker

בגלל העובדה שהטכנולוגיה הזו היא ללא ספק רחבה קצרה היריעה מלהתעמק בכל התכונות שלה עבור כל מקרה פרטי שיכול להתעורר ולכן מצורפים פה קישורים להתעמקות גדולה יותר ובתקווה שתענה על כל שאלה שיכולה לעלות מהשימוש בטכנולוגיה:

https://singularity.lbl.gov/faq https://sylabs.io/guides/3.3/user-guide/index.html https://singularity-tutorial.github.io/ https://github.com/singularityhub https://singularityhub.github.io/ https://github.com/sylabs/singularity

RECENT POST
bottom of page