نشر مجموعة HPC للتوسع التلقائي باستخدام Sلون

1. نظرة عامة

مرحبًا بك في الدرس التطبيقي حول الترميز من Google لتشغيل مجموعة Sclaimm على Google Cloud Platform. في نهاية هذا الدرس التطبيقي، يجب أن تصبح على دراية جيدة بمدى سهولة توفير وتشغيل مجموعة Slockm التي يتم تغيير حجمها تلقائيًا.

c16fa310c142ac6f.png

تعاونت خدمة Google Cloud مع SchedMD لإطلاق مجموعة من الأدوات التي تسهِّل عليك إطلاق أداة إدارة أعباء العمل في Syrm على Compute Engine وتوسيع مجموعتك الحالية بشكل ديناميكي عندما تحتاج إلى موارد إضافية. تم إنشاء هذا الدمج من قِبل الخبراء في SchedMD وفقًا لأفضل ممارسات Stillm.

إذا كنت تخطط لاستخدام عمليات دمج Slockm على Google Cloud Platform أو إذا كانت لديك أي أسئلة، يُرجى الانضمام إلى Google Cloud مجموعة المناقشة في منتدى Slossm

لمحة عن Slockm

a739730a41acff0a.png

رسم معماري أساسي لمجموعة Slockm المستقلة في Google Cloud Platform.

و"Sلورم" هي من كبار مدراء أعباء العمل في مجموعات "HPC" حول العالم. يوفّر تطبيق Slossm نظامًا مفتوح المصدر ومواجهًا للأخطاء وقابلاً للتطوير بشكل كبير، بالإضافة إلى نظام جدولة المهام ومهامّ لإدارة مجموعات Linux الصغيرة والكبيرة. لا يتطلب Sلونه إجراء أي تعديلات في النواة لتشغيله، وهو مستقل نسبيًا. كمدير لإدارة أعباء العمل العنقودية، لدى Slossm ثلاث وظائف رئيسية:

  1. إنه يخصص إمكانية الوصول الحصري أو غير الحصري إلى الموارد (العُقد الحوسبة) للمستخدمين لبعض الوقت حتى يتمكنوا من أداء العمل.
  2. يوفر إطارًا لبدء العمل وتنفيذه ومراقبته (عادةً مهمة موازية) على مجموعة العُقد المخصصة.
  3. يحكم في النزاعات على الموارد من خلال إدارة قائمة انتظار الأعمال المعلَّقة.

ما ستتعرَّف عليه

  • كيفية إعداد مجموعة Surm باستخدام Terraform
  • كيفية تشغيل وظيفة باستخدام SLURM
  • كيفية الاستعلام عن معلومات المجموعة ومراقبة الوظائف الجارية في SLURM
  • كيفية قياس العُقد تلقائيًا لتلائم مَعلمات ومتطلبات وظيفية محدّدة
  • كيفية الحصول على مساعدة بشأن Slossm

المتطلبات الأساسية

  • حساب Google Cloud Platform ومشروع يتضمّن الفوترة
  • تجربة Linux الأساسية

2. ضبط إعدادات الجهاز

إعداد بيئة ذاتية

إنشاء مشروع

إذا لم يكن لديك حساب على Google (على Gmail أو G Suite)، عليك إنشاء حساب. سجِّل الدخول إلى وحدة تحكّم Google Cloud Platform ( console.cloud.google.com) وافتح صفحة إدارة الموارد:

359c06e07e6d699f.png

انقر على إنشاء مشروع.

25c23d651abb837b.png

أدخِل اسم مشروع. تذكّر رقم تعريف المشروع (المميّز باللون الأحمر في لقطة الشاشة أعلاه). يجب أن يكون رقم تعريف المشروع اسمًا فريدًا في جميع مشاريع Google Cloud. إذا لم يكن اسم مشروعك فريدًا، ستنشئ Google Cloud رقم تعريف مشروع عشوائيًا استنادًا إلى اسم المشروع.

بعد ذلك، عليك تفعيل الفوترة في Developers Console لاستخدام موارد Google Cloud.

لا ينبغي أن يكلفك تنفيذ هذا الدرس التطبيقي أكثر من بضعة دولارات، ولكن قد تزيد التكاليف إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل (راجع قسم "الخاتمة" في نهاية هذا المستند). تتوفّر حاسبة أسعار Google Cloud Platform هنا.

المستخدمون الجدد في Google Cloud Platform مؤهّلون للحصول على فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

Google Cloud Shell

يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ولكن في هذا الدرس التطبيقي حول الترميز، سنستخدم Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

تشغيل Google Cloud Shell

من وحدة تحكّم Google Cloud Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

dbad104cef962719.png

بعد ذلك، انقر على بدء Cloud Shell:

4e50db320508ac88.png

ينبغي ألا تستغرق إدارة الحسابات والاتصال بالبيئة أكثر من بضع لحظات.

20b0aa80492144d.png

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل على Google Cloud، ما يحسّن أداء الشبكة بشكل كبير ويبسّط المصادقة. يمكنك، إن لم يكن كل عملك، في هذا التمرين من خلال متصفح ويب أو جهاز Google Chromebook.

بعد الربط بـ Cloud Shell، من المفترض أن ترى أنّه قد تمت مصادقتك وأنّ المشروع سبق أن تم ضبطه على 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].

3- تجهيز ومراجعة تهيئة Slumm Terraform

تنزيل إعدادات Surm Terraform

في جلسة Cloud Shell، نفِّذ الأمر التالي لنسخ (تنزيل) مستودع Git الذي يحتوي على Syrm لملفات Google Cloud Platform Terraform:

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

بدِّل إلى دليل ضبط نشر Slossm من خلال تنفيذ الأمر التالي:

cd slurm-gcp

إعداد Slashm Terraform tfvars

يوضح ملف basic.tfvars.example كيفية ضبط عملية النشر، بما في ذلك الشبكة والمثيلات ومساحة التخزين المطلوب نشرها. انسخه إلى ملف جديد، والذي سنسميه "ملف tfvars"، ثم عدّله حسب الحاجة.

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

في جلسة Cloud Shell، افتح ملف tfvars basic.tfvars. يمكنك استخدام محرِّر سطر الأوامر المفضَّل لديك (vi وnano وemacs وما إلى ذلك) أو استخدام أداة تعديل الرموز في Cloud Console لعرض محتوى الملف:

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: اسم المجموعة الطريفة
  • المشروع: رقم تعريف مشروع Google Cloud الذي سيتم نشر الموارد فيه
  • المنطقة: Google Cloud Zone التي ستتضمّن وحدة التحكّم ومثيلات تسجيل الدخول إلى هذه المجموعة - مزيد من المعلومات
  • network_name: شبكة السحابة الإلكترونية الخاصة الافتراضية لنشر مجموعة Slockm في
  • subnetwork_name: الشبكة الفرعية الافتراضية الخاصة على السحابة الإلكترونية لنشر مجموعة Syrm في
  • shared_vpc_host_project: شبكة VPC المشتركة لنشر مجموعة Syrm في
  • disable_controller_public_ips: هل تريد تخصيص عنوان IP خارجي لوحدة التحكّم في Syrm؟
  • disable_login_public_ips: هل تريد تخصيص عنوان IP خارجي لعقدة تسجيل الدخول إلى Surem؟
  • disable_compute_login_ips: هل تريد تخصيص عنوان IP خارجي لعقدة تسجيل الدخول إلى Syrm؟
  • suspend_time: وقت الانتظار بعد أن تكون العقدة غير نشطة قبل تعليق العقدة.
  • controller_machine_type: لعقدة وحدة التحكّم نوع المثيل
  • controller_image: صورة Google Cloud Platform المستخدَمة لإنشاء مثيل وحدة التحكّم في Sclaimm
  • controller_disk_type: نوع قرص تشغيل مثيل وحدة التحكّم
  • controller_disk_size_gb: حجم قرص تشغيل مثيل وحدة التحكّم
  • controller_labels: التصنيفات المطلوب إرفاقها بمثيل وحدة التحكّم
  • controller_service_account: حساب الخدمة المطلوب استخدامه على مثيل وحدة التحكّم
  • controller_scopes: نطاق الوصول لمثيل وحدة التحكُّم
  • cloudsql: خادم Google CloudSQL لاستخدامه كقاعدة بيانات Sclaimm بدلاً من استضافة قاعدة بيانات على مثيل وحدة التحكّم
  • server_ip: عنوان IP لخادم CloudSQL
  • user: اسم مستخدم CloudSQL
  • كلمة المرور: كلمة مرور CloudSQL
  • db_name: اسم قاعدة بيانات CloudSQL
  • controller_secondary_disk: هل تريد إضافة قرص ثانوي لتخزين خادم NFS؟
  • controller_secondary_disk_type: نوع القرص الثانوي لوحدة التحكّم
  • controller_secondary_disk_size_gb: حجم القرص الثانوي لوحدة التحكّم
  • controller_instance_template: وهو نموذج مثيل Google Cloud Platform المطلوب استخدامه لمثيل وحدة التحكّم. ستلغي أي حقول حوسبة محدّدة خصائص النموذج. على سبيل المثال: إذا تم تحديد console_image، فسيتم استبدال الصورة في نموذج المثيل.
  • login_machine_type: عقدة تسجيل الدخول (التي يمكن الوصول إليها عبر بروتوكول النقل الآمن) نوع المثيل
  • login_image: صورة Google Cloud Platform المستخدَمة لإنشاء مثيل تسجيل الدخول إلى Syrm
  • login_disk_type: نوع قرص تشغيل مثيل تسجيل الدخول
  • login_disk_size_gb: حجم قرص تشغيل مثيل تسجيل الدخول
  • login_labels: التصنيفات المطلوب إرفاقها بمثيل تسجيل الدخول
  • login_node_count: عدد عُقد تسجيل الدخول المطلوب إنشاؤها
  • login_node_service_account: حساب الخدمة المُستخدَم في نُسخ تسجيل الدخول
  • login_node_scopes: نطاق الوصول لمثيل تسجيل الدخول
  • login_instance_template: يمثّل نموذج مثيل Google Cloud Platform المطلوب استخدامه لمثيل تسجيل الدخول. ستلغي أي حقول حوسبة محدّدة خصائص النموذج. على سبيل المثال: إذا تم تحديد Login_image، سيتم استبدال الصورة في نموذج المثيل.
  • network_storage: مساحة تخزين الشبكة لتثبيتها على جميع العُقد. ستتم إضافة الحقول مباشرةً إلى fstab. يمكن تكرار عمليات التثبيت الإضافية.
  • server_ip: عنوان IP لخادم التخزين
  • remote_mount: اسم قاعدة التخزين (اسم نظام الملفات)
  • local_mount: دليل التثبيت المحلي
  • fs_type: نوع نظام الملفات (NFS وCIFS وLuctre وGCSFuse تم تثبيته تلقائيًا)
  • mount_options: خيارات التثبيت (أي الإعدادات التلقائية، _netdev)
  • login_network_storage: مساحة تخزين على الشبكة لتثبيتها على عُقد تسجيل الدخول ووحدة التحكّم. سيتم تثبيت NFS وCIFS وListre وGCSFuse تلقائيًا. يمكن تكرار عمليات التثبيت الإضافية.
  • server_ip: عنوان IP لخادم التخزين
  • remote_mount: اسم قاعدة التخزين (اسم نظام الملفات)
  • local_mount: دليل التثبيت المحلي
  • fs_type: نوع نظام الملفات (NFS وCIFS وLuctre وGCSFuse تم تثبيته تلقائيًا)
  • mount_options: خيارات التثبيت (أي الإعدادات التلقائية، _netdev)
  • compute_node_service_account: حساب الخدمة المطلوب استخدامه على مثيلات الحوسبة
  • compute_node_scopes: نطاق الوصول لمثيلات الحوسبة
  • الأقسام: إعدادات قسم Slum. ويمكن تكرارها في أقسام إضافية.
  • name: اسم القسم
  • machine_type: احتساب نوع المثيل للعُقد
  • static_node_count: عدد عُقد الحوسبة المفعّلة دائمًا
  • max_node_count: الحد الأقصى لعدد عُقد الحوسبة المسموح بها - 64 ألفًا كحد أقصى
  • المنطقة: Google Cloud Zone التي ستتضمّن موارد هذا القسم - مزيد من المعلومات
  • image: احتساب نوع جهاز عُقد الصورة
  • image_hyperthreads: تفعيل ميزة Hyperthreads على المثيل أو إيقافها
  • compute_disk_type: نوع قرص تشغيل مثيل الحوسبة (pd-standard، pd-ssd)
  • compute_disk_size_gb: حجم قرص تشغيل مثيل الحوسبة
  • compute_labels: التصنيفات المطلوب إرفاقها بمثيل الحوسبة
  • cpu_platform: الحد الأدنى من النظام الأساسي لوحدة المعالجة المركزية المطلوب لجميع عُقد الحوسبة
  • gpu_count: عدد وحدات معالجة الرسومات المراد إرفاقها بكل مثيل في القسم
  • gpu_type: نوع وحدة معالجة الرسومات للإرفاق بمثيلات القسم
  • network_storage: مساحة تخزين على الشبكة لتثبيتها على جميع عُقد الحوسبة في القسم. ستتم إضافة الحقول مباشرةً إلى fstab. يمكن تكرار عمليات التثبيت الإضافية.
  • server_ip: عنوان IP لخادم التخزين
  • remote_mount: اسم قاعدة التخزين (اسم نظام الملفات)
  • local_mount: دليل التثبيت المحلي
  • fs_type: نوع نظام الملفات (NFS وCIFS وListre وGCSFuse تم تثبيته تلقائيًا)
  • mount_options: خيار التثبيت
  • preemptible_bursting: هل ستكون المثيلات مثيلات استباقية؟
  • vpc_subnet: شبكة فرعية Virtual Private Cloud لنشر قسم Syrm فيها
  • حصريًا: تفعيل Stillm لتخصيص العُقد بأكملها للمهام
  • enable_placement: فعِّل سياسات مواضع الإعلانات التي ستكون فيها المثيلات قريبة من بعضها بعضًا بسبب وقت استجابة الشبكة المنخفض بين المثيلات.
  • regional_capacity: السماح بوضع مثيل في أي منطقة في المنطقة بناءً على مدى التوفّر
  • regional_policy: إذا كانت هذه السياسة صحيحة، ستحدّد هذه السياسة المنطقة التي يجب استخدامها وأي مناطق يجب عدم استخدامها في تلك المنطقة
  • Instance_template: نموذج مثيل GCP لاستخدامه في مثيلات الحوسبة. ستلغي أي حقول حوسبة محدّدة خصائص النموذج. على سبيل المثال: إذا تم تحديد صورة، سيتم استبدال الصورة في نموذج المثيل.

إعداد متقدم

يمكنك، إن أردت، اختيار تثبيت حزم وبرامج إضافية كجزء من عملية نشر المجموعة. يمكنك تثبيت برامج على مجموعة Slum من خلال عدة طرق موضحة في قسم "تثبيت التطبيقات في مجموعة Slum على Compute Engine" أو من خلال تخصيص الصورة التي ينشرها تطبيق S باسم. ينشر تطبيق Syrm حاليًا صورة جهاز افتراضي من SchedMD تستند إلى صورة Google Cloud HPC VM، مع تثبيت Syrm فوقها.

لاستخدام صورتك، أنشِئ صورة بإعداداتك الخاصة استنادًا إلى صورة SchedMD VM متاحة للجميع مُدرَجة في ملف tfvars. بعد ذلك، استبدِل معرّف الموارد المنتظم (URI) للصورة المحدّد في ملف tfvars بصورتك الخاصة واختبِر التغيير.

تحديد المشاكل وحلّها

في هذا الدرس التطبيقي حول الترميز، يُرجى الرجوع إلى قسم تحديد المشاكل وحلّها في الملف التمهيدي الخاص بمستودع Syrm-GCP.

والمشاكل الأكثر شيوعًا التي تحدث هي الأخطاء التي تحدث عند ضبط ملف tfvars والقيود المفروضة على الحصة. تم تصميم هذا الدرس التطبيقي حول الترميز ليتم تشغيله ضمن حصة الحصة العادية للمستخدم الجديد وفي حدود الرصيد المجاني الذي يبلغ 300 دولار أمريكي (أو ما يعادله بالعملة المحلية) الذي يحصل عليه المستخدم الجديد. إذا تعذّرت محاولة إنشاء أجهزة افتراضية، يُرجى مراجعة الملف /var/log/sclaimm/resume.log على عقدة وحدة التحكّم للتحقّق من أخطاء واجهة برمجة التطبيقات.

4. نشر الإعدادات والتحقّق منها

نشر عملية الإعداد

في جلسة Cloud Shell، يمكنك تنفيذ الأمر التالي من مجلد slurm-gcp/tf/example:

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

سيُطلب منك قبول الإجراءات الموضّحة، وذلك بناءً على الإعدادات التي تم ضبطها. أدخِل yes (نعم). لبدء عملية النشر يمكنك أيضًا عرض الإعدادات التي سيتم نشرها من خلال تشغيل "خطة 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",
  ],
]

التأكّد من إنشاء مثيل الجهاز الافتراضي

افتح قائمة التنقل واختَر Compute Engine >. مثيلات الجهاز الافتراضي (VM):

d5832bdd527794ed.png

من المفترض أن تظهر لك وحدة تحكّم ومثيل جهاز افتراضي لتسجيل الدخول مدرَجين على النحو التالي:

7a1fc9603758d58d.png

ضِمن المثيلات الافتراضية، راجِع حالتَي الجهاز الافتراضيتَين اللتين أنشأتهما باستخدام Terraform.

ستكون الأسماء مختلفة في حال تعديل الحقل cluster_name.

  • g1-controller
  • g1-login0

5- تسجيل الدخول إلى Slossm Cluster

الوصول إلى "المجموعة المتشابكة"

ارجع إلى علامة التبويب "أداة تعديل الرموز" أو Cloud Shell. شغِّل الأمر التالي لتسجيل الدخول إلى المثيل، مع استبدال <ZONE> لمنطقة العقدة g1-login0 (يجب أن يكون us-central1-b):

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

سيؤدي هذا الأمر إلى تسجيل دخولك إلى الجهاز الافتراضي على "g1-login0".

هناك طريقة أخرى للوصول بسهولة إلى عقدة تسجيل الدخول وهي النقر على "SSH" بجانب الجهاز الافتراضي g1-login0 في صفحة مثيلات الأجهزة الافتراضية لفتح علامة تبويب جديدة باستخدام اتصال بروتوكول النقل الآمن.

8c373a87d13620f7.png

إذا كانت هذه هي المرة الأولى التي استخدمت فيها Cloud Shell، فقد ترى رسالة مثل الرسالة أدناه تطلب منك إنشاء مفتاح 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 لمتابعة التمرين. للقيام بذلك، اضغط على CTRL + C لإنهاء المهمة.

ثم نفِّذ تسجيل خروج الأمر التالي من المثيل:

exit

يمكنك الآن إعادة الاتصال بالجهاز الافتراضي (VM) لتسجيل الدخول. شغِّل الأمر التالي لتسجيل الدخول إلى المثيل، مع استبدال <ZONE> لمنطقة العقدة g1-login0:

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

كما ذكرنا أعلاه، قد تضطر إلى الانتظار دقيقة أو دقيقتين قبل أن تتمكن من الاتصال وتكتمل جميع جوانب الإعداد.

جولة في أدوات Slossm CLI

تم تسجيل دخولك الآن إلى عقدة تسجيل الدخول إلى Syrm في مجموعتك. هذه هي العقدة المخصّصة لتفاعل المستخدم/المشرف، وجدولة مهام Slockm، والنشاط الإداري.

هيا ننفّذ أمرَين لتعريفك بسطر أوامر Slookm.

نفِّذ الأمر sinfo لعرض حالة موارد المجموعة:

sinfo

يظهر نموذج ناتج المعلومات أدناه. تقدم sinfo تقريرًا بالعُقد المتاحة في المجموعة وحالة هذه العُقد ومعلومات أخرى، مثل التقسيم ومدى التوفّر وأي قيود زمنية مفروضة على تلك العُقد.

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

يمكنك الاطّلاع على العُقد العشر التي تحدد القيمة max_node_count في قسم تصحيح الأخطاء. من 10، مميزة بأنها "خاملة~" (العقدة في وضع الخمول وغير المخصص، وجاهزة للإنشاء).

بعد ذلك، نفِّذ الأمر squeue لعرض حالة قائمة انتظار المجموعة:

squeue

يظهر الناتج المتوقع لقائمة الانتظار أدناه. يعرض قائمة الانتظار حالة قائمة الانتظار للمجموعة. يشمل ذلك كل معرّف لكل مهمة مجدولة على المجموعة، والقسم الذي تم تعيين المهمة له، واسم المهمة، والمستخدم الذي أطلق المهمة، وحالة المهمة، ووقت ساعة الحائط التي كانت تعمل بها المهمة، والعُقد المخصصة لها. ليس لدينا أي مهام قيد التشغيل، لذا محتوى هذا الأمر فارغ.

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

أوامر Sclaimm إلى "srun" و "sbatch" لتشغيل الوظائف الموضوعة في قائمة الانتظار. "تشغيل" تقوم بتشغيل الوظائف المتوازية، ويمكن استخدامها كبرنامج تضمين لـ mpirun. "دفعة" يُستخدم لإرسال مهمة مجمعة من أجل تشويه، ويمكن استدعاء دالة srun مرة واحدة أو عدة مرات بتكوينات مختلفة. "دفعة" يمكنها أخذ نصوص برمجية دُفعة أو استخدامها مع الخيار –wrap لتشغيل المهمة بأكملها من سطر الأوامر.

لنقم بتشغيل وظيفة لنتمكّن من رؤية Sulum أثناء تنفيذها والحصول على وظيفة في قائمة الانتظار!

6- ابدأ مهمة Slashm ووسِّع المجموعة العنقودية.

تنفيذ مهمة Slockm وتوسيع المجموعة

الآن بعد تشغيل مجموعة Sclaimm، لنقم بتشغيل مهمة وتوسيع نطاق المجموعة.

"التدريب" يُستخدَم الأمر لتشغيل أوامر دفعة Sclaimm والنصوص البرمجية. لنشغّل نصًا برمجيًا مجمّعًا يؤدي إلى تشغيل "اسم المضيف" (hostname) على أجهزةنا الافتراضية المعدّلة تلقائيًا.

أثناء تسجيل الدخول إلى g1-login0، شغِّل الأمر التالي:

sbatch -N2 --wrap="srun hostname"

يشغِّل هذا الأمر أمر دفعة Sclaimm. يحدد هذا الحقل أن الدفعة ستُشغل عقدتين بـ "-N" الخيار. وتحدد أيضًا أن كل من هذه العقد سيشغل "اسم مضيف srun". في الأمر " –wrap" الخيار.

بشكل تلقائي، سيكتب sbatch الناتج إلى "sclaimm-%j.out" في دليل العمل الذي يتم تشغيل الأمر منه، حيث يتم استبدال %j بمعرّف المهمة وفقًا لأنماط اسم ملف Slashm. في مثالنا الذي تم تشغيله من المجلد الرئيسي للمستخدم، وهو نظام ملفات مشترك مستند إلى نظام تخزين ملفات الشبكة (NFS) تتم استضافته على وحدة التحكم بشكل افتراضي. يسمح هذا لعُقد الحوسبة بمشاركة بيانات المدخلات والمخرجات إذا لزم الأمر. في أي بيئة إنتاج، يجب أن تكون مساحة التخزين المستخدمة منفصلة عن وحدة التخزين المنزلية لتجنُّب تأثيرات الأداء على عمليات التجميع. يمكن تحديد وحدات تخزين منفصلة في ملف tfvars في "network_storage". الخيارات.

بعد تنفيذ النص البرمجي sbatch باستخدام سطر الأوامر sbatch، سيعرض معرّف المهمة للمهمة المُجدوَلة، على سبيل المثال:

Submitted batch job 2

يمكننا استخدام معرف المهمة الذي يعرضه الأمر sbatch لتتبع وإدارة تنفيذ المهمة والموارد. نفِّذ الأمر التالي لعرض قائمة انتظار مهام Sclaimm:

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]

نظرًا لعدم توفّر أي عُقد حوسبة، سينشئ Sclaimm تلقائيًا مثيلات حوسبة وفقًا لمتطلبات الوظيفة. وهناك ميزتان للطبيعة التلقائية لهذه العملية. أولاً، يلغي ذلك العمل المطلوب عادةً في مجموعة أجهزة HPC لإدارة العُقد يدويًا، وضبط البرامج، ودمج العُقدة في المجموعة، ثم نشر المهمة. ثانيًا، يسمح للمستخدمين بتوفير المال بسبب تقليص العُقد غير المستخدمة وغير المستخدمة حتى يتم تشغيل الحد الأدنى من عدد العُقد.

يمكنك تنفيذ الأمر sinfo لعرض مجموعة Slum التي تدور لأعلى:

sinfo

سيؤدي ذلك إلى عرض العُقد المدرجة في قائمة الانتظار في "#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]

يمكنك أيضًا مراجعة قسم مثيلات الأجهزة الافتراضية في Google Cloud Console للاطّلاع على العُقد المتوفرة حديثًا. سيستغرق الأمر بضع دقائق لتدوير العُقد وتشغيل Sclearm قبل تخصيص المهمة إلى العُقد المخصصة حديثًا. ستشبه قائمة مثيلات الأجهزة الافتراضية قريبًا ما يلي:

9997efff595f1e.png

بعد تشغيل العُقد للمهمة، ستنتقل المثيلات إلى "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]

بعد اكتمال إحدى المهام، لن يتم إدراجها في قائمة الانتظار، و"alloc" ستعود العقد في sinfo إلى "الخامل" الولاية. تشغيل "squeue" بشكل دوري حتى تكتمل المهمة، بعد دقيقة أو دقيقتين.

ستتم كتابة ملف الإخراج syrm-%j.out في مجلد /الصفحة الرئيسية الذي تمت مشاركته عبر NFS، وسيحتوي على أسماء المضيفين. افتح ملف الإخراج (عادةً ما يكون syrm-2.out)، حيث سيحتوي محتوى ملف الإخراج على:

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

أحسنت، لقد أديت مهمة ووسّعت مجموعة Syrm الخاصة بك!

7. تنفيذ مهمة MPI

لننفِّذ الآن مهمة 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 الخاص بنا إلى التعليمات البرمجية للجهاز حتى نتمكن من تشغيل التعليمة البرمجية عبر المجموعة العنقودية من خلال Syrm.

بعد ذلك، يمكنك استخدام محرِّر النصوص المفضَّل لديك لإنشاء نص برمجي مقسَّم باسم "helloworld_batch":

vi helloworld_batch

اكتب i للدخول إلى وضع إدراج vi.

انسخ النص التالي والصقه في الملف لإنشاء نص برمجي بسيط:

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

srun mpi_hello_world

احفظ أداة تعديل الرموز واخرج منها من خلال الضغط على مفتاح Escape وكتابة ":wq". بدون علامات اقتباس.

يحدد هذا النص البرمجي بيئة تنفيذ دُفعة Sclaimm ومهامه. أولاً، يتم تعريف بيئة التنفيذ على أنها bash. بعد ذلك، يُحدد النص البرمجي خيارات Syrm أولاً باستخدام علامة " #SBATCH" الخطوط. يتم تعريف اسم الوظيفة على أنه "hello_world".

تم ضبط ملف الإخراج على "hello_world_%j.out" حيث يتم استبدال %j بمعرّف الوظيفة وفقًا لأنماط أسماء ملفات Stillm. وتتم كتابة ملف الإخراج هذا إلى الدليل الذي يتم تشغيل النص البرمجي للتشغيل منه. في المثال الخاص بنا، هذا هو مجلد /home الخاص بالمستخدم، وهو نظام ملفات مشترك مستند إلى NFS. يسمح هذا لعُقد الحوسبة بمشاركة بيانات المدخلات والمخرجات إذا لزم الأمر. في أي بيئة إنتاج، يجب أن تكون مساحة التخزين المستخدمة منفصلة عن وحدة التخزين المنزلية لتجنُّب تأثيرات الأداء على عمليات التجميع.

أخيرًا، يتم تحديد عدد العُقد التي يجب تشغيل هذا النص البرمجي عليها على أنها 2.

بعد تحديد الخيارات، يتم توفير الأوامر القابلة للتنفيذ. سيشغل هذا النص البرمجي التعليمة البرمجية mpi_hello_world بطريقة متوازية باستخدام الأمر srun، وهو بديل مستجد للأمر mpirun.

بعد ذلك، يمكنك تنفيذ النص البرمجي sbatch باستخدام سطر الأوامر sbatch:

sbatch helloworld_batch

سيؤدي تنفيذ دفعات بشكل مجمّع إلى عرض معرّف وظيفة للمهمة المُجدوَلة، على سبيل المثال:

Submitted batch job 3

سيؤدي ذلك إلى تشغيل الأمر hostname على مستوى عقدتَين، مع تحديد مهمة واحدة لكل عقدة، بالإضافة إلى طباعة الناتج في ملف hello_world-3.out.

سيتم تنفيذ هذه المهمة بسرعة بما أنّ لدينا عقدتين سبق توفيرهما.

راقِب الانتظار حتى تكتمل المهمة وتصبح غير مدرَجة:

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 دقائق (يمكن ضبطها باستخدام حقل annotate_time في YAML أو حقل Comment_Time في sclaimm.conf)، فسيتم إلغاء تخصيص عُقد الحوسبة المُدارة ديناميكيًا لإصدار الموارد. ويمكنك التحقق من ذلك عن طريق تشغيل المعلومات المعلوماتية بشكل دوري وملاحظة انخفاض حجم المجموعة إلى 0:

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

جرِّب إدارة المزيد من المثيلات بما يصل إلى الحصة المسموح بها في المنطقة التي نشرت فيها المجموعة، وتشغيل تطبيقات مختلفة لمجال MPI.

8. الخاتمة

تهانينا، لقد أنشأت مجموعة Slockm على Google Cloud Platform واستخدمت أحدث ميزاتها لتوسيع نطاق مجموعتك تلقائيًا لتلبية طلب أعباء العمل. يمكنك استخدام هذا النموذج لتشغيل أي مجموعة متنوعة من المهام، ويمكن توسيعه إلى مئات الحالات في دقائق عن طريق طلب العُقد في Sclaimm ببساطة.

إذا أردت مواصلة تعلُّم استخدام Slashm على Google Cloud Platform، يُرجى الحرص على مواصلة استخدام " بناء مجموعات HPC الموحّدة باستخدام Slookm" درس تطبيقي حول الترميز. سيرشدك هذا الدرس التطبيقي حول الترميز خلال عملية إعداد مجموعتَين متحدتَين من Slockm في السحابة الإلكترونية لتمثيل الطرق التي يمكن من خلالها تحقيق إنشاء اتحاد متعدد المجموعات، سواء داخل مقر المؤسسة أو في السحابة الإلكترونية.

هل أنت بصدد إنشاء تطبيق رائع باستخدام وظيفة Syrm الجديدة المستنِدة إلى Google Cloud Platform؟ هل لديك أسئلة؟ هل لديك اقتراح بشأن ميزة؟ يمكنك التواصل مع فريق Google Cloud اليوم من خلال الموقع الإلكتروني لحلول الحوسبة العالية الأداء من Google Cloud أو الدردشة معنا في Google Cloud مجموعة مناقشة Slossm

تنظيف عملية نشر Terraform

تسجيل الخروج من عقدة تشوه:

exit

السماح بتصغير أي عُقد معدَّلة تلقائيًا قبل حذف عملية النشر يمكنك أيضًا حذف هذه العُقد يدويًا من خلال تنفيذ الأمر "gcloud compute جهازًا delete <Instance Name>" لكل مثيل، أو باستخدام واجهة المستخدم الرسومية لوحدة التحكم لاختيار عُقد متعددة والنقر على "حذف".

يمكنك بسهولة تنظيم عملية نشر Terraform بعد الانتهاء من تنفيذ الأمر التالي من Google Cloud Shell، بعد تسجيل الخروج من g1-login0:

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

اكتب yes (نعم) عندما يُطلب منك ذلك للمتابعة. يمكن أن تستغرق هذه العملية عدة دقائق، يُرجى الانتظار.

حذف المشروع

للتنظيف، نحذف مشروعنا ببساطة.

  • في قائمة التنقل، حدد "إدارة الهوية وإمكانية الوصول" وحدة تحكّم المشرف
  • ثم انقر على الإعدادات في القائمة الفرعية
  • النقر على رمز سلة المهملات الذي يتضمن النص "حذف المشروع"
  • اتّباع تعليمات المطالبات

المواضيع التي تناولناها

  • كيفية نشر Syrm على Google Cloud Platform باستخدام Terraform.
  • كيفية تشغيل وظيفة باستخدام Syrm على Google Cloud Platform.
  • طريقة الاستعلام عن معلومات المجموعة ومراقبة المهام التنفيذية في Syrm
  • كيفية قياس العُقد تلقائيًا باستخدام S باسم على Google Cloud Platform لاستيعاب مَعلمات ومتطلبات وظيفية محدّدة
  • كيفية تجميع تطبيقات MPI وتشغيلها على Sclaimm على Google Cloud Platform.

العثور على دعم Sلون

إذا كنت بحاجة إلى دعم بشأن استخدام عمليات الدمج هذه في بيئات الاختبار أو الإنتاج، يُرجى التواصل مع شركة SchedMD مباشرةً باستخدام صفحة التواصل الخاصة بها هنا: https://www.schedmd.com/contact.php

يمكنك أيضًا استخدام أدلة تحديد المشاكل وحلّها المتاحة:

أخيرًا، يمكنك أيضًا نشر سؤالك على Google Cloud يمكن العثور على مجموعة نقاش Stillm هنا: https://groups.google.com/g/google-cloud-slurm-discuss

مزيد من المعلومات

ملاحظات

يُرجى إرسال ملاحظاتك حول هذا الدرس التطبيقي حول الترميز باستخدام هذا الرابط. يستغرق اكتمال إرسال الملاحظات أقل من 5 دقائق. شكرًا