نظام مجموعة CycleCloud GridEngine

مشروع مجموعة CycleCloud GridEngine README

يمكن تمكين فتح Grid Scheduler (محرك الشبكة) بسهولة على مجموعة Azure CycleCloud عن طريق تعديل "run_list" في تعريف نظام المجموعة. تتكون مجموعة محرك الشبكة من مكونين أساسيين. الأولى هي العقدة "الرئيسية"، التي توفر نظام ملفات مشترك حيث يتم تشغيل برنامج Grid Engine. والثاني هو مجموعة عقد "التنفيذ"، وهي المضيفين الذين يركبون نظام الملفات المشتركة ويشغلون المهام التي يتم إرسالها. على سبيل المثال، قد يبدو مقتطف قالب مجموعة محرك الشبكة البسيط كما يلي:

[cluster grid-engine]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[configuration]]]
    run_list = role[sge_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[configuration]]]
    run_list = role[sge_execute_role]

Note

تحتوي أسماء الأدوار على "sge" لأسباب قديمة: محرك الشبكة كان منتجا ل Sun Microsystems.

يؤدي استيراد مجموعة وبدء تشغيلها مع تعريف في CycleCloud إلى عقدة "رئيسية" واحدة. يمكن إضافة عقد "التنفيذ" إلى نظام المجموعة عبر الأمر cyclecloud add_node . على سبيل المثال ، لإضافة 10 عقد أخرى "تنفيذ":

cyclecloud add_node grid-engine -t execute -c 10

التحجيم التلقائي لمحرك الشبكة

يدعم Azure CycleCloud التحجيم التلقائي لمحرك الشبكة. يعني هذا السلوك أن البرنامج يراقب باستمرار حالة قائمة الانتظار الخاصة بك ويحول العقد تلقائيا إلى تشغيل أو إيقاف التشغيل حسب الحاجة لإكمال حمل العمل بكفاءة من حيث الوقت والتكلفة. يمكنك تمكين التحجيم التلقائي لمحرك الشبكة عن طريق إضافة Autoscale = true إلى تعريف نظام المجموعة الخاص بك:

[cluster grid-engine]
Autoscale = True

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

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

[cluster grid-engine]
Autoscale = True

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A3  # 4 cores

    [[[configuration]]]
    run_list = role[sge_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4  # 8 cores

    [[[configuration]]]
    run_list = role[sge_execute_role]

[[nodearray gpu]]
    MachineType = Standard_NV12 # 2 GPUs
    ImageName = cycle.image.centos7

    # Set the number of cores to the number of GPUs for autoscaling purposes
    CoreCount = 2  

    [[[configuration]]]
    run_list = role[sge_execute_role]
    gridengine.slot_type = gpu
    gridengine.slots = 2

في المثال الموضح، يوجد الآن مصفوفتان للعقدة: إحداهما عبارة عن مصفوفة عقدة "تنفيذ" قياسية، والثانية تسمى "GPU" توفر MachineType التي تحتوي على وحدتي معالجة رسومات NVIDIA (Standard_NV12 في Azure). لاحظ أيضا أن هناك الآن عنصرين جديدين في قسم التكوين إلى جانب وصفة "csge:sgeexec". تخبر الإضافة gridengine.slot_type = gpu مجدول محرك الشبكة أن هذه العقد يجب أن تسمى عقد "gpu" وبالتالي يجب تشغيل وظائف "gpu" فقط. اسم 'gpu' عشوائي، ولكن الاسم الذي يصف العقدة هو الأكثر فائدة. قم بتعيين gridengine.slots = 2، الذي يخبر البرنامج بالتأكد من أن هذا النوع من العقدة يمكنه تشغيل مهمتين فقط في وقت واحد (Standard_NV12 يحتوي فقط على وحدتي معالجة الرسومات).

بشكل افتراضي، يعين Grid Engine عدد الفتحات لكل عقدة استنادا إلى عدد وحدة المعالجة المركزية للنظام. في هذه الحالة، قد يؤدي هذا السلوك الافتراضي إلى تشغيل عدد كبير جدا من المهام بشكل متزامن على عقدة واحدة. في المثال الموضح، CoreCount=2 يتم تعيين على nodearray لمطابقة عدد وحدات معالجة الرسومات المتوفرة على MachineType، ما يسمح ل CycleCloud بتحجيم هذا الصفيف بشكل صحيح على GPU مقابل عدد وحدة المعالجة المركزية.

يمكنك التحقق من عدد الفتحات slot_type أجهزتك عن طريق تشغيل الأمر :

    -bash-4.1# qstat -F slot_type
    queuename                      qtype resv/used/tot. load_avg arch          states
    ---------------------------------------------------------------------------------
    all.q@ip-0A000404              BIP   0/0/4          0.17     linux-x64
        hf:slot_type=execute
    ---------------------------------------------------------------------------------
    all.q@ip-0A000405              BIP   0/0/2          2.18     linux-x64
        hf:slot_type=gpu
    ---------------------------------------------------------------------------------
    all.q@ip-0A000406              BIP   0/0/4          0.25     linux-x64

لاحظ أن هناك واحدا من كل "slot_type" محدد "execute" و"gpu". يتم تكوين slot_types بشكل فردي، وعدد فتحات فتحة "التنفيذ" هو 4، وهو عدد وحدات المعالجة المركزية على الجهاز. عدد الفتحات لنوع فتحة "gpu" هو 2، والذي حددناه في قالب تكوين نظام المجموعة. الجهاز الثالث هو العقدة الرئيسية التي لا تدير الوظائف.

الاستخدام المتقدم لمحرك الشبكة

تتيح إعدادات التكوين هذه التخصيص المتقدم للعقد وصفائف العقد. على سبيل المثال، إذا كانت المهام تتطلب قدرا محددا من الذاكرة، على سبيل المثال 10 غيغابايت لكل منها، فيمكنك تحديد عقدة "تنفيذ" تقوم بتشغيل الأجهزة بذاكرة 60 غيغابايت، ثم إضافة خيارات gridengine.slots = 6 التكوين للتأكد من أنه يمكن تشغيل 6 مهام فقط بشكل متزامن على هذا النوع من العقد (ضمان أن كل وظيفة تحتوي على 10 غيغابايت على الأقل من الذاكرة للعمل معها).

العقد المجمعة في محرك الشبكة

عند إرسال مهمة متوازية إلى محرك الشبكة، سلوك التحجيم التلقائي الافتراضي الذي يستخدمه CycleCloud لمعالجة كل مهمة MPI كطلب عقدة مجمعة. العقد المجمعة مقترنة بإحكام ومناسبة بشكل مثالي لسير عمل MPI.

عندما تنضم مجموعة من العقد المجمعة إلى مجموعة محرك الشبكة، يتم استخدام معرف المجموعة لكل عقدة كقيمة للقيمة affinity_groupالمعقدة . من خلال طلب affinity_group تحديد للوظائف، فإنه يسمح لجدولة محرك الشبكة بالتأكد من أن الوظائف تهبط فقط على الأجهزة الموجودة في نفس المجموعة.

تطلب أتمتة CycleCloud تلقائيا العقد المجمعة وتعينها لمجموعات الترابط المتوفرة عند مواجهة مهام متوازية.

إرسال المهام إلى محرك الشبكة

الطريقة الأكثر عمومية لإرسال المهام إلى مجدول محرك الشبكة هي الأمر:

qsub my_job.sh

يرسل هذا الأمر مهمة تعمل على عقدة من نوع "execute"، وهي عقدة معرفة بواسطة nodearray "execute". لتشغيل مهمة على nodearray من نوع مختلف، على سبيل المثال نوع عقدة "gpu" المعروض، نقوم بتعديل الإرسال لدينا:

qsub -l slot_type=gpu my_gpu_job.sh

يضمن هذا الأمر تشغيل المهمة فقط على "slot_type" من "gpu".

إذا تم حذف slot_type، يتم تعيين "تنفيذ" تلقائيا إلى المهمة. يمكن للمستخدم تعديل الآلية التي تعين تلقائيا slot_type للوظائف. يمكن إنشاء برنامج نصي python موجود في /opt/cycle/jetpack/config/autoscale.py والذي يجب أن يحدد دالة واحدة "sge_job_handler". تتلقى هذه الدالة تمثيل قاموس للوظيفة، على غرار إخراج qstat -j JOB_ID أمر ويجب أن ترجع قاموسا للموارد الثابتة التي تحتاج إلى تحديث للوظيفة.

على سبيل المثال، يقوم البرنامج النصي التالي بتعيين وظيفة إلى slot_type "gpu" إذا كان اسم الوظائف يتضمن الأحرف "gpu". يسمح للمستخدمين بإرسال وظائفهم تلقائيا دون تغيير معلمات الوظيفة، مع التأكد من تشغيل الوظائف والتحجيم التلقائي للعقد الصحيحة:

#!/usr/env python
#
# File: /opt/cycle/jetpack/config/autoscale.py
#
def sge_job_handler(job):
  # The 'job' parameter is a dictionary containing the data present in a 'qstat -j JOB_ID':
    hard_resources = {'slot_type': 'execute', 'affinity_group' : 'default' }

  # Don't modify anything if the job already has a slot type
  # You could modify the slot type at runtime by not checking this
  if 'hard_resources' in job and 'slot_type' in job['hard_resources']:
      return hard_resources

  # If the job's script name contains the string 'gpu' then it's assumed to be a GPU job.
  # Return a dictionary containing the new job_slot requirement to be updated.
  # For example: 'big_data_gpu.sh' would be run on a 'gpu' node.
  if job['job_name'].find('gpu') != -1:
      hard_resources {'slot_type': 'gpu'}
  else:
      return hard_resources

المعلمة "الوظيفة" التي تم تمريرها هي قاموس يحتوي على البيانات في استدعاء qstat -j JOB_ID :

{
    "job_number": 5,
    "job_name": "test.sh",
    "script_file": "test.sh",
    "account": "sge",
    "owner": "cluster.user",
    "uid": 100,
    "group": "cluster.user",
    "gid": 200,
    "submission_time": "2013-10-09T09:09:09",
    "job_args": ['arg1', 'arg2', 'arg3'],
    "hard_resources": {
       'mem_free': '15G',
       'slot_type': 'execute'
    }
}

يمكنك استخدام وظيفة البرمجة النصية هذه لتعيين slot_type تلقائيا استنادا إلى أي معلمة مهمة محددة، مثل الوسيطات أو متطلبات الموارد مثل الذاكرة أو المستخدم المرسل.

لنفترض أنك أرسلت 5 وظائف لكل "slot_type":

qsub -t 1:5 gpu_job.sh
qsub -t 1:5 normal_job.sh

سيكون هناك الآن 10 وظائف في قائمة الانتظار. بسبب البرنامج النصي المحدد، سيتم تكوين الوظائف الخمس التي تحتوي على "gpu" في الاسم تلقائيا للتشغيل فقط على عقد "slot_type=gpu". ستكتشف آلية التحجيم التلقائي CycleCloud أن هناك 5 وظائف "gpu" و5 مهام "تنفيذ". نظرا لأن nodearray 'gpu' يتم تعريفه على أنه يحتوي على فتحتين لكل عقدة، فسيبدأ CycleCloud 3 من هذه العقد (5/2= 2.5 تم تقريبها إلى 3).

هناك 5 وظائف عادية، نظرا لأن نوع الجهاز ل nodearray "execute" يحتوي على 4 وحدات معالجة مركزية لكل منها، فسيبدأ CycleCloud 2 من هذه العقد لمعالجة المهام (5/4=1.25 مقربة إلى 2). بعد فترة بدء تشغيل قصيرة، يتم تمهيد العقد التي تم تشغيلها حديثا وتكوين نفسها. بمجرد أن تصبح جاهزة، يتم تشغيل جميع الوظائف العشر حتى الاكتمال. ثم يتم إيقاف تشغيل العقد ال 5 تلقائيا قبل أن تبدأ دورة فوترة أخرى بموفر السحابة.

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

qsub -ac average_runtime=10 job_with_duration_of_10m.sh

مرجع تكوين محرك الشبكة

فيما يلي خيارات التكوين الخاصة بمحرك الشبكة التي يمكنك تبديلها لتخصيص الوظائف:

خيارات تكوين SGE-Specific Description
gridengine.slots عدد الفتحات لعقدة معينة لتقديم تقرير إلى Grid Engine. عدد الفتحات هو عدد المهام المتزامنة التي يمكن للعقدة تنفيذها، ويتم تعيين هذه القيمة افتراضيا إلى عدد وحدات المعالجة المركزية على جهاز معين. يمكنك تجاوز هذه القيمة في الحالات التي لا تقوم فيها بتشغيل المهام استنادا إلى وحدة المعالجة المركزية ولكن على الذاكرة ووحدات معالجة الرسومات وما إلى ذلك.
gridengine.slot_type اسم نوع "الفتحة" التي توفرها العقدة. الإعداد الافتراضي هو "execute". عندما يتم تمييز مهمة بالمورد الثابت "slot_type="، يتم تشغيل هذه الوظيفة فقط على جهاز من نفس نوع الفتحة. يسمح لك وضع العلامات هذا بإنشاء تكوينات برامج وأجهزة مختلفة لكل عقدة والتأكد من جدولة مهمة مناسبة دائما على النوع الصحيح من العقدة.
gridengine.ignore_fqdn الافتراضي: صحيح. تعيين إلى خطأ إذا لم تكن جميع العقد في نظام المجموعة جزءا من مجال DNS واحد.
gridengine.version الافتراضي: "2011.11". يحدد خيار التكوين هذا إصدار Grid Engine لتثبيته وتشغيله. حاليا ، هو الخيار الافتراضي والوحيد المتاح. قد يتم دعم الإصدارات الأخرى من برنامج Grid Engine في المستقبل.
gridengine.root الافتراضي: '/sched/sge/sge-2011.11' هذا الموقع هو المكان الذي يقوم فيه محرك الشبكة بتثبيت وتركيب كل عقدة في النظام. من الأفضل الحفاظ على هذه القيمة دون تغيير. ومع ذلك، إذا قمت بالتعديل، فتأكد من تعيين نفس القيمة على كل عقدة في نظام المجموعة.

يدعم CycleCloud مجموعة قياسية من سمات الضبط التلقائي عبر المجدولات:

Attribute Description
cyclecloud.cluster.autoscale.stop_enabled تمكين autostop على هذه العقدة. [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs مقدار الوقت (بالثوان) للعقدة للجلوس الخامل بعد إكمال المهام قبل أن يتم النضوب التلقائي.
cyclecloud.cluster.autoscale.idle_time_before_jobs مقدار الوقت (بالثوان) للعقدة للجلوس الخامل قبل إكمال المهام قبل أن يتم النضوب التلقائي.

المشاكل المعروفة

  • qsh الأمر لجلسة العمل التفاعلية لا يعمل. استخدم qrsh كبديل.
  • لا يحترم exclusive=1 التحجيم التلقائي المجمع، مما قد يتسبب في عدد أقل من العقد مما كان متوقعا للبدء.

Note

على الرغم من أن Windows هو منصة GridEngine مدعومة رسميا، حاليا، لا يدعم CycleCloud تشغيل GridEngine على Windows.

تتعلق هذه الصفحة بقدرات وتكوين استخدام (Altair) GridEngine مع CycleCloud.

تكوين الموارد

يطابق تطبيق cyclecloud-gridengine موارد sge مع موارد سحابة Azure لتوفير أدوات غنية للقياس التلقائي وتكوين نظام المجموعة. يتم نشر التطبيق تلقائيا للمجموعات التي تم إنشاؤها عبر واجهة مستخدم CycleCloud أو يمكن تثبيته على أي مضيف مسؤول GridEngine على نظام مجموعة موجود.

تثبيت أو ترقية cyclecloud-gridengine

تتوفر حزمة cyclecloud-gridengine في GitHub كأداة إصدار. يتبع التثبيت والترقية نفس العملية. يتطلب التطبيق python3 مع virtualenv.

tar xzf cyclecloud-gridengine-pkg-*.tar.gz
cd cyclecloud-gridengine
./install.sh

ملفات مهمة

يقوم التطبيق بتحليل تكوين sge في كل مرة يتم تشغيلها - الوظائف وقوائم الانتظار والمجمعات. يتم توفير المعلومات في stderr وstdout للأمر وإلى ملف سجل، سواء على مستويات قابلة للتكوين. يتم تسجيل جميع أوامر إدارة GridEngine مع الوسيطات إلى الملف أيضا.

Description Location
تكوين التحجيم التلقائي /opt/cycle/gridengine/autoscale.json
سجل التحجيم التلقائي /opt/cycle/jetpack/logs/autoscale.log
سجل تتبع qconf /opt/cycle/jetpack/logs/qcmd.log

قوائم انتظار SGE ومجموعات المضيفين والبيئات المتوازية

تضيف الأداة المساعدة azgecyclecloud-gridengine autoscale المضيفين إلى نظام المجموعة وفقا لتكوين نظام المجموعة. تنفذ عمليات التحجيم التلقائي الإجراءات التالية.

  1. اقرأ طلب مورد الوظيفة وابحث عن جهاز ظاهري مناسب للبدء
  2. بدء تشغيل الجهاز الظاهري وانتظر حتى يكون جاهزا
  3. قراءة قائمة الانتظار والبيئة المتوازية من الوظيفة
  4. استنادا إلى قائمة الانتظار/pe، قم بتعيين المضيف إلى مجموعة مضيفة مناسبة
  5. إضافة المضيف إلى نظام المجموعة وإلى أي قائمة انتظار أخرى تحتوي على مجموعة المضيفين

ضع في اعتبارك تعريف قائمة الانتظار التالي لقائمة انتظار تسمى short.q

hostlist              @allhosts @mpihg01 @mpihg02 @lowprio 
...
seq_no                10000,[@lowprio=10],[@mpihg01=100],[@mpihg02=200]
pe_list               NONE,[@mpihg01=mpi01], \
                      [@mpihg02=mpi02]

إرسال وظيفة عن طريق qsub -q short.q -pe mpi02 12 my-script.sh البدء في تأجير جهاز ظاهري واحد. عند إضافة نظام المجموعة، فإنه ينضم إلى مجموعة المضيف @mpihg02 لأن هذه هي المجموعة المضيفة المتوفرة لقائمة الانتظار والبيئة المتوازية. كما تنضم إلى @allhosts ، وهي مجموعة مضيفة خاصة.

إذا قمت بإرسال وظيفة باستخدام qsub -q short.q my-script.sh بيئة متوازية pe ولم تحدد ذلك، فإن الجهاز الظاهري الناتج ينضم إلى @allhosts ومجموعات المضيفين @lowpriority المرتبطة بقائمة الانتظار التي لم يتم تعيين أي PES لها.

أخيرا ، يتم إرسال الوظيفة مع qsub -q short.q -pe mpi0* 12 my-script.sh نتائج في جهاز ظاهري تمت إضافته إلى @mpihg01 أو @mpihg02 اعتمادا على تنبؤات تخصيص CycleCloud.

البيئات المتوازية تساوي ضمنيا مجموعة موضع cyclecloud. يتم تقييد الأجهزة الظاهرية في PE لتكون داخل نفس الشبكة. إذا كنت ترغب في استخدام PE لا يحتفظ بمجموعة مواضع ، فاستخدم autoscale.json لإلغاء الاشتراك.

هنا نقوم بإلغاء الاشتراك في مجموعات المواضع ل make pe:

"gridengine": {
    "pes": {
      "make": {
        "requires_placement_groups": false
      }
    },

مجموعات موضع CycleCloud

تقوم مجموعات وضع CycleCloud بتعيين واحد إلى واحد إلى Azure VMSS مع SinglePlacementGroup - تشترك الأجهزة الظاهرية في مجموعة إيداع في Infiniband Fabric وتشارك فقط مع الأجهزة الظاهرية داخل مجموعة الموضع. للحفاظ على هذه الصوامع بشكل حدسي ، تقوم مجموعات المواضع بتعيين 1: 1 مع بيئة GridEngine المتوازية أيضا.

يؤدي تحديد بيئة متوازية لوظيفة ما إلى تقييد المهمة لتشغيلها في مجموعة موضع عبر منطق تعيين مجموعة المضيف الذكية. يمكنك تعطيل هذا السلوك من خلال التكوين المقابل في autoscale.json: "required_placement_groups" : false.

تكوين التحجيم التلقائي

يقوم هذا المكون الإضافي تلقائيا بتحجيم الشبكة لتلبية متطلبات حمل العمل. يحدد ملف التكوينautoscale.json سلوك التحجيم التلقائي لمحرك الشبكة.

  • تعيين تفاصيل اتصال cyclecloud
  • تعيين مؤقت الإنهاء للعقد الخاملة
  • يتم دعم التحجيم التلقائي متعدد الأبعاد. يمكنك تكوين السمات التي يجب استخدامها في حزم الوظائف، على سبيل المثال، الفتحات أو الذاكرة
  • تسجيل قوائم الانتظار والبيئات المتوازية ومجموعات المضيفين التي ستتم إدارتها
Configuration Type Description
url String رابط CC
username/password String تفاصيل اتصال CC
cluster_name String اسم مجموعة CC
default_resources Map ربط مورد عقدة بمورد مضيف محرك شبكة للتحجيم التلقائي
idle_timeout Int وقت الانتظار قبل إنهاء العقد الخاملة (العقد)
boot_timeout Int وقت الانتظار قبل إنهاء العقد أثناء مراحل التكوين الطويلة (s)
gridengine.relevant_complexes قائمة (سلسلة) مجمعات محرك الشبكة التي يجب مراعاتها في التحجيم التلقائي، على سبيل المثال، الفتحات، mem_free
gridengine.logging File موقع ملف تكوين التسجيل
gridengine.pes Struct حدد سلوك PEs، على سبيل المثال، requires_placement_group = false

يأخذ برنامج التحجيم التلقائي في الاعتبار المورد ذي الصلة فقط

مورد آخر للتحجيم التلقائي

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

لنفترض أننا نريد التحجيم التلقائي بواسطة طلب مورد الوظيفة ل m_mem_free.

  1. أضف m_mem_free إلى gridengine.relevant_resources
  2. الارتباط m_mem_free بمورد الذاكرة على مستوى العقدة في autoscale.json

يمكن أن تكون هذه السمات مراجع node.* في _default/الموارد.

Node Type Description
nodearray String اسم cyclecloud nodearray
placement_group String اسم مجموعة موضع cyclecloud داخل nodearray
vm_size String اسم منتج الجهاز الظاهري، على سبيل المثال، "Standard_F2s_v2"
vcpu_count Int وحدات المعالجة المركزية الظاهرية المتوفرة على العقدة كما هو موضح في صفحات المنتج الفردية
pcpu_count Int وحدات المعالجة المركزية الفعلية المتوفرة على العقدة
memory String الذاكرة المادية التقريبية المتوفرة في الجهاز الظاهري مع مؤشر الوحدة، على سبيل المثال، "8.0g"

توجد سمات أخرى في node.resources.* مساحة الاسم، على سبيل المثال، 'node.resources.

Node Type Description
ncpus String عدد وحدات المعالجة المركزية المتوفرة في الجهاز الظاهري
pcpus String عدد وحدات المعالجة المركزية الفعلية المتوفرة في الجهاز الظاهري
ngpus Integer عدد وحدات معالجة الرسومات المتوفرة في الجهاز الظاهري
memb String الذاكرة الفعلية التقريبية المتوفرة في الجهاز الظاهري مع مؤشر الوحدة، على سبيل المثال، "8.0b"
memkb String الذاكرة الفعلية التقريبية المتوفرة في الجهاز الظاهري مع مؤشر الوحدة، على سبيل المثال، "8.0k"
memmb String الذاكرة الفعلية التقريبية المتوفرة في الجهاز الظاهري مع مؤشر الوحدة، على سبيل المثال، "8.0m"
memgb String الذاكرة المادية التقريبية المتوفرة في الجهاز الظاهري مع مؤشر الوحدة، على سبيل المثال، "8.0g"
memtb String الذاكرة الفعلية التقريبية المتوفرة في الجهاز الظاهري مع مؤشر الوحدة، على سبيل المثال، "8.0t"
slots Integer نفس ncpus
slot_type String تسمية الإضافة للملحقات. غير مستخدم.
m_mem_free String الذاكرة الحرة المتوقعة على مضيف التنفيذ، على سبيل المثال، "3.0g"
mfree String مثل _m / _mem / مجانا

تخطيط الموارد

هناك أيضا رياضيات متاحة default_resources - تقليل الفتحات على صفيف عقدة معينة بمقدار اثنين وإضافة مورد docker إلى جميع العقد:

    "default_resources": [
    {
      "select": {"node.nodearray": "beegfs"},
      "name": "slots",
      "value": "node.vcpu_count",
      "subtract": 2
    },
    {
      "select": {},
      "name": "docker",
      "value": true
    },

تعيين العقدة vCPUs إلى الفتحات المعقدة، و memmb إلى mem_free هي الإعدادات الافتراضية شائعة الاستخدام. الاقتران الأول مطلوب.

    "default_resources": [
    {
      "select": {},
      "name": "slots",
      "value": "node.vcpu_count"
    },
    {
      "select": {},
      "name": "mem_free",
      "value": "node.resources.memmb"
    }
 ],

إذا كان المجمع يحتوي على اختصار لا يساوي القيمة بأكملها ، فحدد كليهما في default_resources حيث physical_cpu يوجد اسم المجمع:

"default_resources": [
    {
      "select": {},
      "name": "physical_cpu",
      "value": "node.pcpu_count"
    },
    {
      "select": {},
      "name": "pcpu",
      "value": "node.resources.physical_cpu"
    }
]

يعد الترتيب مهما عندما تريد سلوكا معينا لسمة معينة. لتخصيص فتحة واحدة ل nodearray معين مع الاحتفاظ بعدد الفتحات الافتراضية لجميع nodearrays الأخرى:

    "default_resources": [
    {
      "select": {"node.nodearray": "FPGA"},
      "name": "slots",
      "value": "1",
    },
    {
      "select": {},
      "name": "slots",
      "value": "node.vcpu_count"
    },
]

Hostgroups

يقوم مقياس CycleCloud التلقائي، في محاولة لتلبية متطلبات الوظيفة، بتعيين العقد إلى مجموعة المضيف المناسبة. يتم النظر في قوائم الانتظار والبيئات المتوازية والمجمعات. يطابق الكثير من المنطق مستودع cyclecloud المناسب (وكمية العقدة) مع مجموعة مضيف sge المناسبة.

بالنسبة لوظيفة تم إرسالها على النحو التالي: qsub -q "cloud.q" -l "m_mem_free=4g" -pe "mpi*" 48 ./myjob.sh

يعثر CycleCloud على تقاطع مجموعات المضيف التي:

  1. مضمنة في pe_listcloud.q وتطابق مع اسم PE ، على سبيل المثال ، pe_list [@allhosts=mpislots],[@hpc1=mpi].
  2. لديك موارد كافية وحصة اشتراك لتوفير جميع موارد الوظائف.
  3. لا يقوم تكوين قيود مجموعة المضيف بتصفيتها.

قد تفي مجموعات مضيفة متعددة بهذه المتطلبات. عند حدوث ذلك، يجب أن يقرر النظام النظام الذي يجب استخدامه. هناك ثلاث طرق لحل تعارضات عضوية مجموعة المضيفين:

  1. تكوين قوائم الانتظار لتجنب الغموض.
  2. أضف قيودا إلى autoscale.json.
  3. اسمح CycleCloud باختيار مجموعات المضيف المطابقة بطريقة مرتبة حسب الاسم عن طريق الضبط weight_queue_host_sort < weight_queue_seqno في تكوين المجدول.
  4. تعيين seq_no 10000,[@hostgroup1=100],[@hostgroup2=200] في تكوين قائمة الانتظار للإشارة إلى تفضيل مجموعة المضيفين.

قيود مجموعة المضيف

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

"gridengine": {
    "hostgroups": {
      "@mpi": {
        "constraints": {
          "node.vm_size": "Standard_H44rs"
        }
      },
      "@amd-mem": {
        "constraints" : { 
            "node.vm_size": "Standard_D2_v3",
            "node.nodearray": "hpc" 
            }
        },
    }
  }

تلميح: افحص جميع خصائص العقدة المتوفرة بواسطة azge buckets.

azge

تأتي هذه الحزمة مع سطر أوامر ، azge. يستخدم هذا البرنامج لإجراء التحجيم التلقائي وتقسيم جميع العمليات الفرعية ضمن التحجيم التلقائي إلى مكونات منفصلة. تعتمد هذه الأوامر على متغيرات بيئة GridEngine المراد تعيينها - يجب أن تكون قادرا على الاتصال qconf ومن qsub نفس ملف التعريف الذي يتم استدعاؤه فيه azge .

أوامر azge Description
validate يتحقق من أخطاء التكوين المعروفة في التحجيم التلقائي أو GridEngine
jobs إظهار كافة المهام في قائمة الانتظار
buckets إظهار تجمعات الموارد المتوفرة للتحجيم التلقائي
nodes إظهار مضيفي نظام المجموعة وخصائصه
demand يطابق متطلبات المهمة مع مستودعات cyclecloud ويوفر نتيجة مقياس تلقائي
autoscale يقوم بالتحجيم التلقائي الكامل، وبدء العقد وإزالتها وفقا للتكوينات

عند تعديل تكوينات المجدول (qconf) أو تكوينات التحجيم التلقائي (autoscale.json) ، أو حتى الإعداد لأول مرة، يمكن استخدام azge للتحقق من أن سلوك التحجيم التلقائي يطابق التوقعات. كجذر، يمكنك تشغيل العمليات التالية. لفهم كيفية عمل التحجيم التلقائي، من المهم التعرف على هذه المفاهيم.

  1. قم بتشغيل azge validate للتحقق من التكوينات للمشكلات المعروفة.
  2. قم بتشغيل azge buckets للتحقق من الموارد التي تقدمها مجموعة CycleCloud.
  3. قم بتشغيل azge jobs لفحص تفاصيل المهمة في قائمة الانتظار.
  4. قم بتشغيل azge demand تنفيذ المهمة لمطابقة المستودع. ثم افحص الوظائف التي تتم مطابقتها مع أي مستودعات ومجموعات مضيفة.
  5. قم بالتشغيل azge autoscale لبدء عملية تخصيص العقدة، أو إضافة عقد جاهزة للانضمام.

بمجرد أن تعمل الأوامر كما هو متوقع، قم بتمكين التحجيم التلقائي المستمر عن طريق إضافة azge autoscale الأمر إلى crontab الجذر. تأكد من الحصول على متغيرات بيئة GridEngine مسبقا.

* * * * * . $SGE_ROOT/common/settings.sh && /usr/local/bin/azge autoscale -c /opt/cycle/gridengine/autoscale.json

إنشاء نظام مجموعة مختلطة

يدعم CycleCloud سيناريو الاندفاع السحابي. يفترض التكوين الأساسي أن $SGE_ROOT الدليل متاح للعقد السحابية. يمكن تخفيف هذا الافتراض عن طريق تعيين gridengine.shared.spool = falseو gridengine.shared.bin = falseوتثبيت GridEngine محليا.

بالنسبة لحالة بسيطة ، يجب عليك توفير نظام ملفات يمكن لعقد "التنفيذ" تحميله. يجب أن يتضمن نظام الملفات هذا ... الدليل، وقمت بتكوين التحميل في الإعدادات الاختيارية. عند تحرير تبعيات الدلائل المخططة والمشتركة، يمكنك إيقاف تشغيل عقدة المجدول التي تعد جزءا من نظام المجموعة بشكل افتراضي واستخدام التكوينات من نظام الملفات الخارجي.

  1. إنشاء مجموعة شبكة جديدة.
  2. تعطيل وكيل المرسل.
  3. استبدل /sched و /shared بأنظمة ملفات خارجية.
  4. حفظ نظام المجموعة.
  5. إزالة عقدة المجدول كإجراء في واجهة المستخدم.
  6. ابدأ تشغيل نظام المجموعة، لا تبدأ أي عقد في البداية.
  7. التكوين cyclecloud-gridengine باستخدام autoscale.json لاستخدام نظام المجموعة الجديد

استخدام محرك شبكة Univa في CycleCloud

يستخدم مشروع CycleCloud ل GridEngine sge-2011.11 افتراضيا. يمكنك استخدام مثبتات Altair GridEngine الخاصة بك وفقا لاتفاقية ترخيص Altair الخاصة بك. يوثق هذا القسم كيفية استخدام Altair GridEngine مع مشروع CycleCloud GridEngine.

Prerequisites

يستخدم هذا المثال الإصدار التجريبي 8.6.1، ولكن يتم دعم جميع إصدارات GE الأكبر من 8.4.0.

  1. يجب على المستخدمين توفير ثنائيات UGE
  • ge-8.6.x-bin-lx-amd64.tar.gz
  • ge-8.6.x-common.tar.gz
  1. يجب تكوين CycleCloud CLI. الوثائق متوفرة هنا

نسخ الثنائيات إلى خزانة السحابة

يتم توزيع إصدار تكميلي من AGE (8.6.7-demo) مع CycleCloud. لاستخدام إصدار آخر، قم بتحميل الثنائيات إلى حساب التخزين الذي يستخدمه CycleCloud.


$ azcopy cp ge-8.6.12-bin-lx-amd64.tar.gz https://<storage-account-name>.blob.core.windows.net/cyclecloud/gridengine/blobs/
$ azcopy cp ge-8.6.12-common.tar.gz https://<storage-account-name>.blob.core.windows.net/cyclecloud/gridengine/blobs/

تعديل التكوينات إلى قالب نظام المجموعة

قم بعمل نسخة محلية من قالب GridEngine وقم بتعديله لاستخدام مثبتات UGE بدلا من الافتراضي.

wget https://raw.githubusercontent.com/Azure/cyclecloud-gridengine/master/templates/gridengine.txt

في ملف gridengine.txt ، حدد موقع التكرار الأول للنص [[[configuration]]] وأدخل نصا لمطابقة القصاصة البرمجية التالية. الملف غير حساس للمسافة البادئة.

Note

يجب أن تتطابق التفاصيل في التكوين، خاصة الإصدار، مع اسم ملف المثبت.

[[[configuration gridengine]]]
    make = ge
    version = 8.6.12-demo
    root = /sched/ge/ge-8.6.12-demo
    cell = "default"
    sge_qmaster_port = "537"
    sge_execd_port = "538"
    sge_cluster_name = "grid1"
    gid_range = "20000-20100"
    qmaster_spool_dir = "/sched/ge/ge-8.6.12-demo/default/spool/qmaster" 
    execd_spool_dir = "/sched/ge/ge-8.6.12-demo/default/spool"
    spooling_method = "berkeleydb"
    shadow_host = ""
    admin_mail = ""
    idle_timeout = 300

    managed_fs = true
    shared.bin = true

    ignore_fqdn = true
    group.name = "sgeadmin"
    group.gid = 536
    user.name = "sgeadmin"
    user.uid = 536
    user.gid = 536
    user.description = "SGE admin user"
    user.home = "/shared/home/sgeadmin"
    user.shell = "/bin/bash"

تتجاوز تكوينات GridEngine هذه إصدار GridEngine الافتراضي وموقع التثبيت عند بدء نظام المجموعة. ليس من الآمن الخروج من موقع /sched NFS مشترك في نظام المجموعة.