IBM Spectrum LSF

بدءا من LSF 10.1 FixPack 9 (10.1.0.9) يعد Azure CycleCloud موفرا أصليا لموصل الموارد. توفر IBM الوثائق. توفر هذه الموارد إرشادات حول تكوين عقدة LSF Master للاتصال ب CycleCloud.

LSF هو منتج مرخص من IBM؛ يتطلب استخدام LSF في CycleCloud ملف استحقاق توفره IBM لعملائهم.

ملاحظة

LSF هو منتج مرخص من IBM؛ يتطلب استخدام LSF في CycleCloud ملف استحقاق توفره IBM لعملائه. يجب إضافة ثنائيات LSF وملف الاستحقاق إلى الدليل / الكائنات الثنائية كبيرة الحجم لاستخدام نظام المجموعة التلقائي بالكامل أو منشئ صور الجهاز الظاهري في هذا المشروع. لاستخدام نظام المجموعة المؤتمت بالكامل، أو يجب إضافة منشئ صور الجهاز الظاهري في ثنائيات LSF للمشروع وملف الاستحقاق إلى الدليل blobs/ .

السيناريوهات المدعومة لنوع نظام مجموعة CycleCloud LSF

يمكن ل LSF "استعارة" المضيفين من Azure لتشغيل المهام بطريقة عند الطلب، وإضافة المضيفين وإزالتها حسب الحاجة. نوع نظام مجموعة LSF مرن للتعامل مع عدة سيناريوهات في مجموعة واحدة:

  1. وظائف معدل النقل العالية (وحدة المعالجة المركزية & GPU)
  2. مقترن بإحكام (MPI، وحدة المعالجة المركزية & GPU)
  3. أولوية منخفضة

تتم معالجة هذه السيناريوهات عن طريق تكوين خصائص nodearrays وLSF متعددة بالتنسيق. تم تكوين nodearrays مسبقا في CycleCloud. يتيح التكوين المناسب ل LSF سيناريوهات الوظائف المختلفة.

عند تكوين LSF وفقا لهذه التوصيات، bsub يمكن استخدام متطلبات -R الموارد بالطريقة التالية:

استخدم مورد placementGroup لتشغيل مهمة مع شبكة InfiniBand المتصلة.

-R "span[ptile=2] select[nodearray=='ondemandmpi' && cyclecloudmpi] same[placementgroup]"

بالنسبة لوحدات معالجة الرسومات، نوصي باستخدام دعم LSF لبناء جملة GPU الموسع. يتطلب عادة إضافة سمتين إلى lsf.conf: LSB_GPU_NEW_SYNTAX=extend و LSF_GPU_AUTOCONFIG=Y. مع تمكين دعم بناء الجملة الموسع، استخدم placementGroup مع -gpu لتشغيل مهمة مقترنة بإحكام مع تسريع GPU.

-R "span[ptile=1] select[nodearray=='gpumpi' && cyclecloudmpi] same[placementgroup]" -gpu "num=2:mode=shared:j_exclusive=yes"

قم بتشغيل المهام الممكنة لوحدة معالجة الرسومات بطريقة متوازية.

-R "select[nodearray=='gpu' && !cyclecloudmpi && !cyclecloudlowprio]" -gpu "num=1:mode=shared:j_exclusive=yes"

تشغيل مهمة اندفاع كبيرة على الأجهزة الظاهرية منخفضة السعة.

-J myArr[1000] -R "select[nodearray=='lowprio' && cyclecloudlowprio]"

تكوين LSF لنوع نظام مجموعة CycleCloud LSF

لتمكين هذه السيناريوهات كما هو موضح، أضف عددا من أنواع الموارد المشتركة إلى lsb.shared.

   cyclecloudhost  Boolean  ()       ()       (instances from Azure CycleCloud)
   cyclecloudmpi  Boolean   ()       ()       (instances that support MPI placement)
   cyclecloudlowprio  Boolean ()     ()       (instances that low priority / interruptible from Azure CycleCloud)
   nodearray  String     ()       ()       (nodearray from CycleCloud)
   placementgroup String ()       ()       (id used to note locality of machines)
   instanceid String     ()       ()       (unique host identifier)

من الممكن أن cyclecloudlowprio يتم تركه، ولكنه يوفر فحصا إضافيا بأن الوظائف تعمل على إيجار الجهاز الظاهري المقصود.

قالب موفر LSF ل CycleCloud

يعرض موفر LSF CycleCloud عددا من التكوينات من خلال قالب الموفر. هذه التكوينات هي مجموعة فرعية من التكوين الكامل ل nodearray.

فيما يلي مثال على قالب LSF ل Cyclecloud من cyclecloudprov_templates.json:

{
    "templateId": "ondemand",
    "attributes": {
        "type": ["String", "X86_64"],
        "ncores": ["Numeric", "44"],
        "ncpus": ["Numeric", "44"],
        "mem": ["Numeric", "327830"],
        "cyclecloudhost": ["Boolean", "1"],
        "nodearray" : ["String", "ondemand"]
    },
    "priority" : 250,
    "nodeArray": "ondemand",
    "vmType" : "Standard_HC44rs",
    "subnetId" : "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/azurecyclecloud-lab/providers/Microsoft.Network/virtualNetworks/hpc-network/subnets/compute",
    "imageId" : "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/azurecyclecloud-lab/providers/Microsoft.Compute/images/lsf-worker-a4bc2f10",
    "maxNumber": 500,
    "keyPairLocation": "/opt/cycle_server/.ssh/id_rsa_admin.pem",
    "customScriptUri": "https://aka.ms/user_data.sh",
    "userData": "nodearray_name=ondemand"
}

سمات قالب LSF ل CycleCloud

لا يتم عرض جميع سمات nodearray بواسطة قالب موفر LSF. يمكن اعتبار هذه التجاوزات لتكوين CycleCloud nodearray. قالب LSF المطلوب الوحيد هو:

  • معرف القالب
  • nodeArray

يتم استنتاج البعض الآخر من تكوين CycleCloud، أو يمكن حذفه، أو ليس ضروريا على الإطلاق.

  • imageId - صورة جهاز Azure الظاهري على سبيل المثال. "/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" تجاوز تكوين نظام مجموعة CycleCloud.
  • subnetId - شبكة Azure الفرعية على سبيل المثال. "resource_group/vnet/subnet" تجاوز تكوين نظام مجموعة CycleCloud.
  • vmType - على سبيل المثال. "Standard_HC44rs" تجاوز تكوين نظام مجموعة CycleCloud.
  • keyPairLocation - على سبيل المثال. "~/.ssh/id_rsa_beta" تجاوز تكوين نظام مجموعة CycleCloud.
  • customScriptUri - على سبيل المثال. "http://10.1.0.4/user_data.sh"، لا يوجد برنامج نصي إذا لم يتم تحديده.
  • userData - على سبيل المثال. "nodearray_name=gpumpi;placement_group_id=gpumpipg1" فارغ إذا لم يتم تحديده.

ملاحظة حول PlacementGroups

تحتوي مراكز بيانات Azure على قدرة شبكة Infiniband لسيناريوهات HPC. هذه الشبكات، على عكس شبكة ethernet العادية، لها امتداد محدود. يتم وصف نطاقات الشبكة Infiniband بواسطة "PlacementGroups". إذا كانت الأجهزة الظاهرية موجودة في نفس مجموعة المواضع وكانت أنواع الأجهزة الظاهرية الخاصة التي تدعم Infiniband، فستشارك شبكة Infiniband.

تتطلب مجموعات المواضع هذه معالجة خاصة في LSF و CycleCloud.

فيما يلي مثال على قالب LSF ل Cyclecloud من cyclecloudprov_templates.json:

{
  "templateId": "ondemandmpi-1",
  "attributes": {
    "nodearray": ["String", "ondemandmpi" ],
    "zone": [  "String",  "westus2"],
    "mem": [  "Numeric",  8192.0],
    "ncpus": [  "Numeric",  2],
    "cyclecloudmpi": [  "Boolean",  1],
    "placementgroup": [  "String",  "ondemandmpipg1"],
    "ncores": [  "Numeric",  2],
    "cyclecloudhost": [  "Boolean",  1],
    "type": [  "String",  "X86_64"],
    "cyclecloudlowprio": [  "Boolean",  0]
  },
  "maxNumber": 40,
  "nodeArray": "ondemandmpi",
  "placementGroupName": "ondemandmpipg1",
  "priority": 448,
  "customScriptUri": "https://aka.ms/user_data.sh",
  "userData" : "nodearray_name=ondemandmpi;placement_group_id=ondemandmpipg1"
}

placementGroupName يمكن أن يكون في هذا الملف أي شيء ولكنه سيحدد اسم placementGroup في CycleCloud. ستقيم أي عقد تم اقتراضها من CycleCloud من هذا القالب في مجموعة المواضع هذه، وإذا كانت أجهزة ظاهرية ممكنة ل Infiniband، فستشارك شبكة IB.

لاحظ أن placementGroupName يطابق سمة placementgroupالمضيف ، وهذا مقصود وضروري. أيضا أن placement_group_id يتم تعيين في userData لاستخدامها في user_data.sh في وقت بدء المضيف. ondemandmpi قد تبدو السمة غريبة ولكنها تستخدم لمنع هذه المهمة من المطابقة على المضيفين حيث placementGroup غير محددة.

غالبا عند استخدام مجموعات المواضع، سيكون هناك الحد الأقصى لحجم مجموعة المواضع الذي تحدده الخاصية Azure.MaxScaleSetSize . تحد هذه الخاصية بشكل غير مباشر من عدد العقد التي يمكن إضافتها إلى مجموعة موضع ولكن لا يعتبرها LSF. لذلك من المهم تعيين MaxNumber قالب LSF يساوي Azure.MaxScaleSetSize في قالب نظام المجموعة.

user_data.sh

يوفر القالب سمات لتنفيذ برنامج نصي user_data.sh ؛ customScriptUri و userData. هذه هي URI ومتغيرات البيئة المخصصة للبرنامج النصي المدار من قبل المستخدم الذي يعمل عند بدء تشغيل العقدة. يتم تنزيل هذا البرنامج النصي بواسطة أمر CURL غير متزامن، لذا customScriptUri يفشل طلب المصادقة. استخدم هذا البرنامج النصي من أجل:

  1. تكوين برامج LSF الخفية للعامل؛ بشكل LSF_LOCAL_RESOURCES خاص و LSF_MASTER_LIST
    • إذا كان LSF_TOP على نظام ملفات مشترك، فقد يكون من المفيد إنشاء نسخة محلية من lsf.conf وتعيين LSF_ENVDIR المتغير قبل بدء تشغيل البرامج الخفية.
  2. ابدأ تشغيل lim و res وsbatch daemons.

هناك بعض متغيرات البيئة الافتراضية التي تم تعيينها بواسطة موفر CycleCloud.

  • rc_account
  • template_id
  • اسم الموفر
  • clusterName
  • cyclecloud_nodeid (يوصى بتعيين هذا إلى instanceId المورد)

متغيرات بيانات المستخدم الأخرى التي يمكن أن تكون مفيدة في إدارة الموارد في موفر CycleCloud هي:

  • nodearray_name
  • placement_group_id

ملاحظة

على الرغم من أن Windows هو نظام أساسي LSF مدعوم رسميا، إلا أن CycleCloud لا يدعم تشغيل LSF على Windows في الوقت الحالي.