פרוס אשכול HPC עם שינוי גודל אוטומטי עם Slurm

ברוך הבא ל- Codelab של Google להפעלת אשכול Slurm ב- Google Cloud Platform! בסוף קוד קוד זה אתה אמור להבין היטב את קלות ההקצאה וההפעלה של אשכול Slurm בעל שינוי גודל אוטומטי.

c16fa310c142ac6f.png

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

אם אתה מתכנן להשתמש בשילובי Slurm ב- Google Cloud Platform , או אם יש לך שאלות, שקול להצטרף לקבוצת הדיון של Google Cloud & Slurm !

על Slurm

a739730a41acff0a.png

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

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

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

מה תלמד

  • כיצד להתקין אשכול Slurm באמצעות Terraform
  • כיצד להפעיל עבודה באמצעות SLURM
  • כיצד לשאול מידע על אשכול ולפקח על עבודות הפעלה ב- SLURM
  • כיצד לשנות את הצמתים באופן אוטומטי כדי להתאים פרמטרים ודרישות עבודה ספציפיות
  • היכן למצוא עזרה עם Slurm

תנאים מוקדמים

  • חשבון Google Cloud Platform ופרויקט עם חיוב
  • חוויית לינוקס בסיסית

הגדרת סביבה בקצב עצמי

צור פרויקט

אם עדיין אין לך חשבון Google (Gmail או G Suite), עליך ליצור חשבון . היכנס למסוף Google Cloud Platform ( console.cloud.google.com ) ופתח את דף ניהול משאבים :

359c06e07e6d699f.png

לחץ על צור פרויקט.

25c23d651abb837b.png

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

לאחר מכן, יהיה עליך להפעיל חיוב במסוף המפתחים כדי להשתמש במשאבי Google Cloud.

ריצה דרך קוד קוד זה לא אמורה לעלות לך יותר מכמה דולרים, אך זה יכול להיות יותר אם תחליט להשתמש במשאבים רבים יותר או אם תשאיר אותם פועלים (ראה סעיף "מסקנה" בסוף מסמך זה). מחשבון התמחור של Google Cloud Platform זמין כאן .

משתמשים חדשים של פלטפורמת הענן של Google זכאים לניסיון חינם של 300 דולר .

מעטפת גוגל בענן

בעוד ש- Google Cloud ניתן להפעיל מרחוק מהמחשב הנייד שלך, בקוד קוד זה נשתמש ב- Google Cloud Shell , סביבת שורת פקודה הפועלת בענן.

הפעל את Google Cloud Shell

מתוך מסוף ה- GCP לחץ על סמל מעטפת הענן בסרגל הכלים הימני העליון:

dbad104cef962719.png

לאחר מכן לחץ על התחל מעטפת ענן :

4e50db320508ac88.png

זה צריך לקחת רק כמה רגעים כדי לספק ולהתחבר לסביבה:

20b0aa80492144d.png

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

לאחר החיבור למעטפת הענן, אתה אמור לראות שאתה מאומת וכי הפרויקט כבר מוגדר ל- PROJECT_ID שלך:

$ gcloud auth list

פלט פקודה:

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
$ gcloud config list project

פלט פקודה:

[core]
project = <PROJECT_ID>

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

$ gcloud config set project <PROJECT_ID>

פלט פקודה:

Updated property [core/project].

הורד את תצורת ה- Slurm Terraform

בהפעלה של Cloud Shell, בצע את הפקודה הבאה כדי לשכפל (להוריד) את מאגר Git המכיל את Slurm for Google Cloud Platform Terraform:

git clone https://github.com/SchedMD/slurm-gcp.git

עבור לספריית תצורת פריסת Slurm על ידי ביצוע הפקודה הבאה:

cd slurm-gcp

הגדר תצורה של Slurm Terraform tfvars

הקובץ basic.tfvars.example מפרט את תצורת הפריסה, כולל הרשת, המופעים והאחסון לפרוס. העתק אותו לקובץ חדש, אותו נקרא "קובץ tfvars", ולאחר מכן ערוך לפי הצורך.

cd tf/example/basic
cp basic.tfvars.example basic.tfvars

בהפעלה של Cloud Shell, פתח את קובץ basic.tfvars . באפשרותך להשתמש בעורך שורת הפקודה המועדף עליך (vi, nano, emacs וכו ') או להשתמש בעורך קוד המסוף בענן כדי להציג את תוכן הקובץ:

214f43bba6c917aa.png

עיין בתוכן קובץ tfvars.

cluster_name = "g1"
project      = "<project>"
zone         = "us-west1-b"

# network_name            = "<existing network name>"
# subnetwork_name         = "<existing subnetwork name>"
# shared_vpc_host_project = "<vpc host project>"

# disable_controller_public_ips = true
# disable_login_public_ips      = true
# disable_compute_public_ips    = true

# suspend_time  = 300

controller_machine_type = "n1-standard-2"
controller_image        = "projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
controller_disk_type    = "pd-standard"
controller_disk_size_gb = 50
# controller_labels = {
#   key1 = "val1"
#   key2 = "val2"
# }
# controller_service_account = "default"
# controller_scopes          = ["https://www.googleapis.com/auth/cloud-platform"]
# cloudsql = {
#   server_ip = "<cloudsql ip>"
#   user      = "slurm"
#   password  = "verysecure"
#   db_name   = "slurm_accounting"
# }
# controller_secondary_disk      = false
# controller_secondary_disk_size = 100
# controller_secondary_disk_type = "pd-ssd"
#
# When specifying an instance template, specified controller fields will
# override the template properites.
# controller_instance_template = null

login_machine_type = "n1-standard-2"
login_image        = "projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
login_disk_type    = "pd-standard"
login_disk_size_gb = 20
# login_labels = {
#   key1 = "val1"
#   key2 = "val2"
# }
# login_node_count = 1
# login_node_service_account = "default"
# login_node_scopes          = [
#   "https://www.googleapis.com/auth/monitoring.write",
#   "https://www.googleapis.com/auth/logging.write"
# ]
#
# When specifying an instance template, specified login fields will
# override the template properties.
# login_instance_template = null

# Optional network storage fields
# network_storage is mounted on all instances
# login_network_storage is mounted on controller and login instances
# network_storage = [{
#   server_ip     = "<storage host>"
#   remote_mount  = "/home"
#   local_mount   = "/home"
#   fs_type       = "nfs"
#   mount_options = null
# }]
#
# login_network_storage = [{
#   server_ip     = "<storage host>"
#   remote_mount  = "/net_storage"
#   local_mount   = "/shared"
#   fs_type       = "nfs"
#   mount_options = null
# }]

# compute_node_service_account = "default"
# compute_node_scopes          = [
#   "https://www.googleapis.com/auth/monitoring.write",
#   "https://www.googleapis.com/auth/logging.write"
# ]

partitions = [
  { name                 = "debug"
    machine_type         = "n1-standard-2"
    static_node_count    = 0
    max_node_count       = 10
    zone                 = "us-west1-b"
    image                ="projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
    image_hyperthreads   = false
    compute_disk_type    = "pd-standard"
    compute_disk_size_gb = 20
    compute_labels       = {}
    cpu_platform         = null
    gpu_count            = 0
    gpu_type             = null
    network_storage      = []
    preemptible_bursting = false
    vpc_subnet           = null
    exclusive            = false
    enable_placement     = false
    regional_capacity    = false
    regional_policy      = {}
    instance_template    = null
  },
  #  { name                 = "partition2"
  #    machine_type         = "n1-standard-16"
  #    static_node_count    = 0
  #    max_node_count       = 20
  #    zone                 = "us-west1-b"
  #    image                = "projects/schedmd-slurm-public/global/images/family/schedmd-slurm-20-11-4-hpc-centos-7"
  #    image_hyperthreads   = false
  #
  #    compute_disk_type    = "pd-ssd"
  #    compute_disk_size_gb = 20
  #    compute_labels       = {
  #      key1 = "val1"
  #      key2 = "val2"
  #    }
  #    cpu_platform         = "Intel Skylake"
  #    gpu_count            = 8
  #    gpu_type             = "nvidia-tesla-v100"
  #    network_storage      = [{
  #      server_ip     = "none"
  #      remote_mount  = "<gcs bucket name>"
  #      local_mount   = "/data"
  #      fs_type       = "gcsfuse"
  #      mount_options = "file_mode=664,dir_mode=775,allow_other"
  #    }]
  #    preemptible_bursting = true
  #    vpc_subnet           = null
  #    exclusive            = false
  #    enable_placement     = false
  #
  #    ### NOTE ####
  #    # regional_capacity is under development. You may see slowness in
  #    # deleting lots of instances.
  #    #
  #    # With regional_capacity : True, the region can be specified in the zone.
  #    # Otherwise the region will be inferred from the zone.
  #    zone = "us-west1"
  #    regional_capacity    = True
  #    # Optional
  #    regional_policy      = {
  #        locations = {
  #            "zones/us-west1-a" = {
  #                preference = "DENY"
  #            }
  #        }
  #    }
  #
  #    When specifying an instance template, specified compute fields will
  #    override the template properties.
  #    instance_template = "my-template"
]

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

  • cluster_name: שם אשכול Slurm
  • פרויקט: מזהה פרויקט ענן של גוגל למקומות בהם יפרסו משאבים
  • zone: אזור הענן של Google אשר יכיל את הבקר ומופעי הכניסה של אשכול זה - מידע נוסף
  • network_name: רשת ענן וירטואלית פרטית לפרוס את אשכול ה- Slurm לתוכה
  • subnetwork_name: רשת משנה ענן וירטואלי פרטי לפרוס את אשכול ה- Slurm לתוכו
  • shared_vpc_host_project: רשת VPC משותפת לפריסת אשכול Slurm לתוכה
  • disable_controller_public_ips: להקצות IP חיצוני לבקר Slurm?
  • disable_login_public_ips: להקצות IP חיצוני לצומת הכניסה Slurm?
  • disable_compute_login_ips: להקצות IP חיצוני לצומת הכניסה Slurm?
  • suspend_time: זמן ההמתנה לאחר שהצומת אינו פעיל לפני השעיית הצומת
  • controller_machine_type: סוג מופע של צומת בקר
  • controller_image: תמונת GCP המשמשת ליצירת מופע בקר Slurm
  • controller_disk_type: סוג דיסק האתחול של מופע הבקר
  • controller_disk_size_gb: גודל דיסק האתחול של מופע בקר
  • controller_labels: תווית (ים) לחיבור למופע הבקר
  • controller_service_account: חשבון שירות שישמש במופע הבקר
  • controller_scopes: היקף הגישה של מופע הבקר
  • cloudsql: שרת CloudSQL של ​​Google לשימוש כמסד הנתונים Slurm במקום לארח מסד נתונים במופע הבקר
  • server_ip: IP של שרת CloudSQL
  • משתמש: שם משתמש CloudSQL
  • סיסמה: סיסמת CloudSQL
  • db_name: שם מסד הנתונים של CloudSQL
  • controller_secondary_disk: להוסיף דיסק משני לאחסון שרת NFS?
  • controller_secondary_disk_type: סוג הדיסק המשני של הבקר
  • controller_secondary_disk_size_gb: גודל הדיסק המשני של הבקר
  • controller_instance_template: תבנית המופע של GCP לשימוש במופע הבקר. כל שדות המחשוב שצוינו יעקפו את מאפייני התבנית. לְמָשָׁל. אם צוין controller_image, הוא יחליף את התמונה בתבנית המופע.
  • login_machine_type: סוג מופע של צומת כניסה (נגיש ל- SSH)
  • login_image: תמונת GCP המשמשת ליצירת מופע הכניסה של Slurm
  • login_disk_type: סוג דיסק האתחול של מופע הכניסה
  • login_disk_size_gb: גודל דיסק האתחול של מופע הכניסה
  • login_labels: תווית (ים) לצירוף למופע הכניסה
  • login_node_count: מספר צמתי הכניסה ליצור
  • login_node_service_account: חשבון שירות לשימוש במופעי הכניסה
  • login_node_scopes: היקף הגישה של מופע הכניסה
  • login_instance_template: תבנית המופע של GCP לשימוש במופע הכניסה. כל שדות המחשוב שצוינו יעקפו את מאפייני התבנית. לְמָשָׁל. אם צוין login_image, הוא יחליף את התמונה בתבנית המופע.
  • network_storage: אחסון רשת להתקנה בכל הצמתים. שדות יתווספו ישירות ל- fstab. ניתן לחזור על כך עבור תוספות נוספות.
  • server_ip: IP של שרת אחסון
  • remote_mount: שם הרכבה באחסון (שם מערכת הקבצים)
  • local_mount: ספריית הרכבה מקומית
  • fs_type: סוג מערכת הקבצים (NFS, CIFS, ברק, GCSFuse מותקן אוטומטית)
  • mount_options: אפשרויות הרכבה (כלומר ברירות מחדל, _netdev)
  • login_network_storage: אחסון רשת להתקנה על צמתים להתחברות ובקר. NFS, CIFS, זוהר ו- GCSFuse יותקנו באופן אוטומטי. ניתן לחזור על כך עבור תוספות נוספות.
  • server_ip: IP של שרת אחסון
  • remote_mount: שם הרכבה באחסון (שם מערכת הקבצים)
  • local_mount: ספריית הרכבה מקומית
  • fs_type: סוג מערכת הקבצים (NFS, CIFS, ברק, GCSFuse מותקן באופן אוטומטי)
  • mount_options: אפשרויות הרכבה (כלומר ברירות מחדל, _netdev)
  • compute_node_service_account: חשבון שירות שישמש במופעי החישובים
  • compute_node_scopes: גישה להיקף של מופעי החישוב
  • מחיצות: תצורת מחיצה Slurm. ניתן לחזור על מחיצות נוספות.
  • שם: שם המחיצה
  • machine_type: חישוב סוג מופע (ים) של צומת
  • static_node_count: מספר צמתי החישוב המופעלים תמיד
  • max_node_count: המספר המרבי של צמתי המחשוב הכוללים המותרים - מקסימום 64K
  • zone: אזור ענן גוגל שיכיל את משאבי המחיצה הזו - מידע נוסף
  • תמונה: חישוב סוג מכונת הצומת
  • image_hyperthreads: מפעילים או משביתים את הליכי ההשחלה במופע
  • compute_disk_type : סוג דיסק האתחול של מופע חישוב (pd-standard, pd-ssd)
  • compute_disk_size_gb: גודל דיסק האתחול של מופע חישוב
  • compute_labels: תווית (ים) לצרף למופע החישוב
  • cpu_platform: פלטפורמת CPU מינימאלית הנדרשת לכל צמתי החישוב
  • gpu_count: מספר GPUs שצריך לצרף לכל מופע במחיצה
  • gpu_type: סוג GPU לחיבור למופעי המחיצה
  • network_storage: אחסון רשת להתקנה על כל צמתי החישוב במחיצה. שדות יתווספו ישירות ל- fstab. ניתן לחזור על כך עבור תושבות נוספות.
  • server_ip: IP של שרת אחסון
  • remote_mount: שם הרכבה באחסון (שם מערכת הקבצים)
  • local_mount: ספריית הרכבה מקומית
  • fs_type: סוג מערכת הקבצים (NFS, CIFS, ברק, GCSFuse מותקן באופן אוטומטי)
  • mount_options: אפשרות הרכבה
  • פרץ מראש: האם המקרים יהיו מקרים מונעים?
  • vpc_subnet: רשת משנה ענן וירטואלי פרטי לפרוס את מחיצת Slurm לתוכה
  • בלעדי: אפשר Slurm להקצות צמתים שלמים למשרות
  • enable_placement: הפעלמדיניות מיקום בה מקרים ימוקמו קרוב אחד לשני עבור זמן אחזור רשת בין המופעים.
  • regional_capacity: אפשר למקם מופע בכל אזור באזור בהתאם לזמינות
  • regional_policy: אם regional_capacity נכון, מדיניות זו היא לקבוע באיזה אזור להשתמש ובכל אזורים באזור זה שלא להשתמש בהם
  • Instance_template: תבנית המופע של GCP לשימוש עבור מופעי חישוב. כל שדות המחשוב שצוינו יעקפו את מאפייני התבנית. לְמָשָׁל. אם מוגדרת תמונה, היא תחליף את התמונה בתבנית המופע.

תצורה מתקדמת

אם תרצה, תוכל לבחור להתקין חבילות ותוכנות נוספות כחלק מתהליך פריסת האשכול. באפשרותך להתקין תוכנה באשכול slurm שלך בדרכים מרובות המתוארות ב"התקנת אפליקציות באשכול Slurm ב- Compute Engine " , או על ידי התאמה אישית של התמונה שפרסה Slurm. נכון לעכשיו Slurm פורסת תמונת VM מסופקת על ידי SchedMD המבוססת על תמונת VMC של Google Cloud בענן , ומעליה מותקנת Slurm.

על מנת להשתמש בתמונה משלך, בנה תמונה עם תצורה משלך בהתבסס על תמונת ה- SchedMD VM הציבורית הרשומה בקובץ tfvars. לאחר מכן, החלף את תמונת ה- URI שצוינה בקובץ tfvars בתמונה משלך ובדוק את השינוי.

פתרון תקלות

לאורך קוד קוד זה, עיין בסעיף פתרון בעיות במאגר ה- ReadMe של מאגר Slurm-GCP.

הבעיות הנפוצות ביותר הן טעויות שנעשו בתצורה של קובץ tfvars והגבלות מכסות. קוד קוד זה נועד לפעול במסגרת הקצאת המכסות הסטנדרטית של משתמש חדש ובתוך האשראי החינמי של 300 דולר שמשתמש חדש מקבל. אם ניסיון ליצור VMs נכשל, בדוק בקובץ /var/log/slurm/resume.log בצומת הבקר כדי לבדוק אם קיימות שגיאות API.

פרוס את התצורה

בהפעלה של Cloud Shell, בצע את הפקודה הבאה slurm-gcp/tf/example :

terraform init
terraform apply -var-file=basic.tfvars

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

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

הפעולה יכולה להימשך כמה דקות, אז אנא התאזר בסבלנות .

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

Apply complete! Resources: 8 added, 0 changed, 0 destroyed.

Outputs:

controller_network_ips = [
  [
    "10.0.0.2",
  ],
]
login_network_ips = [
  [
    "10.0.0.3",
  ],
]

אמת את יצירת המופע של VM

פתח את תפריט הניווט ובחר Compute Engine > Instances VM.

d5832bdd527794ed.png

אתה אמור לראות בקר ומופע של התחברות VM רשומים:

7a1fc9603758d58d.png

תחת מקרים של VM סקור את שני המופעים של מכונות וירטואליות שנוצרו על ידי Terraform.

השמות יהיו שונים אם שינית את השדה cluster_name .

  • בקר g1
  • g1-login0

גש לאשכול Slurm

חזור לכרטיסייה עורך הקוד / מעטפת הענן. הפעל את הפקודה הבאה בכניסה למופע שלך, והחלף את אזור הצומת g1-login0 על ידי <ZONE> (צריך להיות us-central1-b ):

gcloud compute ssh g1-login0 --zone=<ZONE>

פקודה זו g1-login0 למכונה הווירטואלית g1-login0 .

שיטה נוספת לגשת בקלות לצומת הכניסה היא על ידי לחיצה על כפתור "SSH" לצד ה- g1-login0 VM בדף מופעי VM כדי לפתוח כרטיסייה חדשה עם חיבור SSH.

8c373a87d13620f7.png

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

WARNING: The public SSH key file for gcloud does not exist.
WARNING: The private SSH key file for gcloud does not exist.
WARNING: You do not have an SSH key for gcloud.
WARNING: SSH keygen will be executed to generate a key.
This tool needs to create the directory [/home/user/.ssh] before being
 able to generate SSH keys.

Do you want to continue (Y/n)?

אם כן, הזן Y. אם תתבקש לבחור משפט סיסמה, השאר אותו ריק על ידי לחיצה על Enter פעמיים .

אם ההודעה הבאה מופיעה עם הכניסה:

*** Slurm is currently being configured in the background. ***
A terminal broadcast will announce when installation and configuration is
complete.

המתן ואל תמשיך במעבדה עד שתראה את ההודעה הזו (בערך 5 דקות):

*** Slurm login setup complete ***

לאחר שתראה את ההודעה לעיל, יהיה עליך להתנתק g1-login0 שוב אל g1-login0 כדי להמשיך במעבדה. לשם כך, לחץ על CTRL + C כדי לסיים את המשימה.

לאחר מכן בצע את יציאת הפקודה הבאה של המופע שלך:

exit

כעת התחבר מחדש ל- VM המחובר שלך. הפעל את הפקודה הבאה בכניסה למופע שלך, והחלף את אזור הצומת g1-login0 <ZONE> :

gcloud compute ssh g1-login0 --zone=<ZONE>

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

סיור בכלי ה- CLI של Slurm

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

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

בצע את הפקודה sinfo כדי להציג את מצב המשאבים של האשכול שלנו:

sinfo

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

PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite     10  idle~ g1-compute-0-[0-9]

אתה יכול לראות את 10 הצמתים שלנו, המוכתבים על ידי "max_node_count" של מחיצת הבאגים של 10, מסומנים כ"סרק ~ "(הצומת נמצא במצב סרק ולא מוקצה, מוכן להסתובב).

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

squeue

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

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

הפקודות של Slurm "srun" ו- "sbatch" משמשות להפעלת עבודות המוכנסות לתור. "srun" מריץ עבודות מקבילות, ויכול לשמש עטיפה עבור mpirun. "sbatch" משמש להגשת עבודת אצווה לשיבוש, ויכול להתקשר ל- srun פעם אחת או פעמים בתצורות שונות. "sbatch" יכול לקחת סקריפטים אצווהיים, או להשתמש בו באמצעות האפשרות-גלישה להפעלת העבודה כולה משורת הפקודה.

בואו ננהל עבודה כדי שנוכל לראות את Slurm בפעולה ולקבל עבודה בתור שלנו!

הפעל עבודת סלורם וגודל האשכול

עכשיו שיש לנו את אשכול ה- Slurm שלנו, בואו ננהל עבודה ונגדיל את האשכול שלנו.

הפקודה "sbatch" משמשת להפעלת פקודות וסקריפטים של אצווה Slurm. בואו להריץ סקריפט sbatch פשוט שיפעיל "שם מארח" על גבי מחשבי ה-וירטואליים המוקלטים אוטומטית.

בזמן שאתה מחובר ל- g1-login0, הפעל את הפקודה הבאה:

sbatch -N2 --wrap="srun hostname"

פקודה זו מפעילה את הפקודה אצווה Slurm. הוא מציין ש- sbatch יריץ 2 צמתים עם האפשרות "-N". הוא מציין גם כי כל אחד מהצמתים יפעיל פקודה "שם מארח srun" באפשרות "–עטפה".

כברירת מחדל, sbatch יכתוב את הפלט שלו ל- "slurm-% j.out" בספריית העבודה שממנה מופעלת הפקודה, כאשר% j מוחלף במזהה Job בהתאם לדפוסי שם הקובץ Slurm . בדוגמה שלנו sbatch מופעל מתיקיית המשתמש / הבית, שהיא מערכת קבצים משותפת מבוססת NFS המתארחת בבקר כברירת מחדל. זה מאפשר לצמתי חישוב לשתף נתוני קלט ופלט במידת הצורך. בסביבת ייצור, אחסון העבודה צריך להיות נפרד מהאחסון / בית כדי למנוע השפעות ביצועים על פעולות האשכול. ניתן לציין קבצי אחסון נפרדים בקובץ tfvars באפשרויות "רשת_האחסון".

לאחר ביצוע סקריפט ה- sbatch באמצעות שורת הפקודה sbatch הוא יחזיר מזהה משימה עבור המשימה המתוזמנת, למשל:

Submitted batch job 2

אנו יכולים להשתמש במזהה המשרה שהוחזר על ידי פקודת sbatch כדי לעקוב אחר וביצוע המשימות וניהולם. בצע את הפקודה הבאה כדי להציג את תור העבודה Slurm:

squeue

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

JOBID PARTITION               NAME     USER ST       TIME  NODES   NODELIST(REASON)
    2     debug g1-compute-0-[0-1] username  R       0:10      2 g1-compute-0-[0-1]

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

אתה יכול לבצע את הפקודה sinfo כדי להציג את אשכול Slurm מסתובב:

sinfo

פעולה זו תציג את הצמתים המופיעים ב squeue במצב "alloc #", כלומר הצמתים מוקצים:

PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite      8  idle~ g1-compute-0-[2-9]
debug*       up   infinite      2 alloc#  g1-compute-0-[0-1]

תוכל גם לבדוק את החלק של מופעי VM ב- Google Cloud Console כדי להציג את הצמתים שהוקצו לאחרונה. ייקח מספר דקות לסובב את הצמתים ולהפעיל את Slurm לפני שהעבודה מוקצית לצמתים שהוקצו לאחרונה. רשימת המקרים של ה- VM שלך תידמה בקרוב לדברים הבאים:

9997efff595f1e.png

ברגע שהצמתים מריצים את העבודה המופעים יעברו למצב "להקצה", כלומר המשרות מוקצות למשרה:

PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite      8  idle~ g1-compute-0-[2-9]
debug*       up   infinite      2  alloc g1-compute-0-[0-1]

לאחר סיום משימה, היא לא תופיע עוד ברשימה, וצמתים ה"הקצאה "ב- sinfo יחזרו למצב" סרק ". הפעל מעת לעת "squeue" עד לסיום העבודה, לאחר דקה או שתיים.

קובץ הפלט slurm-% j.out ייכתב לתיקיית NFS המשותפת / הביתית שלך ויכיל את שמות המארח. פתח או חתול את קובץ הפלט (בדרך כלל slurm-2 out), תוכן קובץ הפלט יכיל:

g1-compute-0-0
g1-compute-0-1

עבודה נהדרת, ניהלת עבודה וגדלת את אשכול ה- Slurm שלך!

עכשיו בוא ננהל עבודת MPI בצמתים שלנו. בזמן שאתה מחובר ל- g1-login0, השתמש ב- wget כדי להוריד תוכנית MPI שנכתבה בשפת התכנות C:

wget https://raw.githubusercontent.com/mpitutorial/mpitutorial/gh-pages/tutorials/mpi-hello-world/code/mpi_hello_world.c

כדי להשתמש בכלי OpenMPI עליך לטעון את מודולי OpenMPI על ידי הפעלת פקודה זו:

module load openmpi

נשתמש בכלי "mpicc" כדי לקמפל את קוד MPI C. בצע את הפקודה הבאה:

mpicc mpi_hello_world.c -o mpi_hello_world

זה מקמץ את קוד C שלנו לקוד מכונה כדי שנוכל להריץ את הקוד באשכול שלנו דרך Slurm.

לאחר מכן, השתמש בעורך הטקסט המועדף עליך כדי ליצור סקריפט sbatch בשם " helloworld_batch ":

vi helloworld_batch

הקלד i כדי להיכנס למצב הכניסה vi.

העתק והדבק את הטקסט הבא בקובץ כדי ליצור סקריפט sbatch פשוט:

#!/bin/bash
#
#SBATCH --job-name=hello_world
#SBATCH --output=hello_world-%j.out
#
#SBATCH --nodes=2

srun mpi_hello_world

שמור ועזב את עורך הקוד על ידי לחיצה על escape והקלדת ": wq" ללא מרכאות.

סקריפט זה מגדיר את סביבת ביצוע המטלות של Slurm ומשימותיה. ראשית, סביבת הביצוע מוגדרת כ- bash. לאחר מכן, התסריט מגדיר את אפשרויות Slurm תחילה עם שורות "#SBATCH". שם התפקיד מוגדר כ- "שלום_עולם".

קובץ הפלט מוגדר כ- "hello_world_% j.out" כאשר% j מוחלף במזהה המשרה בהתאם לדפוסי שם הקובץ Slurm . קובץ פלט זה נכתב לספריה שממנה מופעל סקריפט sbatch. בדוגמה שלנו זו תיקיית המשתמש / הבית, שהיא מערכת קבצים משותפת מבוססת NFS. זה מאפשר לצמתי חישוב לשתף נתוני קלט ופלט אם תרצה בכך. בסביבת ייצור, אחסון העבודה צריך להיות נפרד מהאחסון / בית כדי למנוע השפעות ביצועים על פעולות האשכול.

לבסוף, מספר הצמתים שאותם סקריפט אמור לפעול מוגדר כ -2.

לאחר הגדרת האפשרויות ניתנות פקודות ההפעלה. סקריפט זה יפעיל את קוד mpi_hello_world באופן מקבילי באמצעות הפקודה srun, המהווה תחליף נפתח לפקודת mpirun.

ואז בצע את סקריפט sbatch באמצעות שורת הפקודה sbatch:

sbatch helloworld_batch

הפעלת sbatch תחזיר מזהה משרה למשימה המתוזמנת, לדוגמא:

Submitted batch job 3

פעולה זו תריץ את הפקודה שם מארח על פני 2 צמתים, עם משימה אחת לכל צומת, וכן הדפסת הפלט לקובץ hello_world-3.out .

מכיוון שהיו לנו 2 צמתים שהוקצו כבר עבודה זו תפעל במהירות.

עקוב אחר גלילה עד לסיום העבודה וכבר לא מופיע ברשימה:

squeue

לאחר השלמתך פתח או חתול את הקובץ hello_world-3.out ואשר שהוא רץ ב- g1-compute-0- [0-1]:

Hello world from processor g1-compute-0-0, rank 0 out of 2 processors
Hello world from processor g1-compute-0-1, rank 1 out of 2 processors

לאחר שהייתי סרק במשך 5 דקות (ניתן להגדרה עם שדה ה- suspend_time של YAML, או השדה SuspendTime של slurm.conf) יוקצה צמתי החישוב המסופקים באופן דינמי לשחרור משאבים. באפשרותך לאמת זאת על ידי הפעלת sinfo מעת לעת וצפייה בגודל האשכול יורד ל 0:

PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite     10  idle~ g1-compute-0-[0-9]

נסה לסובב יותר מקרים, עד שמכסתך המותרת באזור בו פרסת את האשכול, והפעלת יישומי MPI שונים.

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

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

האם אתה בונה משהו מגניב באמצעות הפונקציונליות החדשה של GCP-native של Slurm? יש שאלות? יש לך הצעה לתכונות? פנה עוד היום לצוות Google Cloud דרך אתר פתרונות המחשוב הביצועים הגבוהים של Google Cloud , או שוחח איתנו בקבוצת הדיונים של Google Cloud & Slurm !

נקו את פריסת הטרפורם

יציאת הצומת slurm:

exit

תן לכל צמתים המוטלטים אוטומטית להצטמצם לפני שתמחק את הפריסה. ניתן גם למחוק את הצמתים האלה באופן ידני על ידי הפעלת "gcloud מחשב מופעים למחוק <שם מופע>" עבור כל מופע, או על ידי שימוש בממשק המשתמש של המסוף לבחירת מספר צמתים ולחיצה על "מחק".

אתה יכול לנקות בקלות את פריסת ה- Terraform לאחר שסיימנו על ידי ביצוע הפקודה הבאה מ- Google Cloud Shell שלך, לאחר התנתקות מ- g1-login0:

cd ~/slurm-gcp/tf/examples/basic
terraform destroy -var-file=basic.tfvars

כשתתבקש, הקלד כן כדי להמשיך. פעולה זו עשויה לארוך מספר דקות, אנא התאזר בסבלנות.

מחק את הפרויקט

כדי לנקות, אנחנו פשוט מוחקים את הפרויקט שלנו.

  • בתפריט הניווט בחר IAM & Admin
  • לאחר מכן לחץ על הגדרות בתפריט המשנה
  • לחץ על סמל פח האשפה עם הטקסט "מחק פרויקט"
  • פעל לפי הוראות ההנחיה

מה סיקרנו

  • כיצד להשתמש בפריסת Slurm ב- GCP באמצעות Terraform.
  • כיצד להפעיל עבודה באמצעות Slurm ב- GCP.
  • כיצד לשאול מידע על אשכול ולפקח על עבודות הפעלה ב- Slurm.
  • כיצד לשנות את מידת הצמתים האוטומטית עם Slurm ב- GCP כדי להתאים לפרמטרים ולדרישות ספציפיות.
  • כיצד לקמפל ולהריץ יישומי MPI ב- Slurm ב- GCP.

מצא תמיכה ב- Slurm

אם אתה זקוק לתמיכה בשימוש בשילובים אלה בסביבות בדיקה או ייצור, אנא צור קשר ישירות עם SchedMD באמצעות דף יצירת הקשר שלהם כאן: https://www.schedmd.com/contact.php

תוכל גם להשתמש במדריכים לפתרון בעיות הזמינים:

לבסוף, תוכל גם לפרסם את שאלתך בקבוצת הדיונים של Google Cloud & Slurm הנמצאת כאן: https://groups.google.com/g/google-cloud-slurm-discuss

למד עוד

מָשׁוֹב

אנא שלח משוב על קוד קוד זה באמצעות קישור זה . משוב לוקח פחות מ -5 דקות להשלים. תודה!