إنشاء وإدارة أنواع المثيلات للاستخدام الفعال لموارد الحوسبة

أنواع المثيلات هي مفهوم التعلم الآلي من Microsoft Azure الذي يسمح باستهداف أنواع معينة من عُقد الحساب للتدريب واستنتاج أحمال العمل. على سبيل المثال، في جهاز Azure الظاهري، نوع المثيل هو STANDARD_D2_V3. تعلمك هذه المقالة كيفية إنشاء أنواع المثيلات وإدارتها لمتطلبات الحساب الخاصة بك.

في مجموعات Kubernetes، يتم تمثيل أنواع المثيلات في تعريف مورد مخصص (CRD) مثبت مع ملحق Azure التعلم الآلي. يمثل عنصران في ملحق Azure التعلم الآلي أنواع المثيلات:

  • استخدم nodeSelector لتحديد العقدة التي يجب تشغيل الجراب عليها. يجب أن يكون للعقدة تسمية مقابلة.
  • في قسم الموارد ، يمكنك تعيين موارد الحوسبة (وحدة المعالجة المركزية والذاكرة وNVIDIA GPU) للحجيرة.

إذا قمت بتحديد حقل nodeSelector عند نشر ملحق Azure التعلم الآلي، nodeSelector فسيتم تطبيق الحقل على جميع أنواع المثيلات. وهذا يعني:

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

إنشاء نوع مثيل افتراضي

بشكل افتراضي، يتم إنشاء نوع مثيل يسمى defaultinstancetype عند إرفاق مجموعة Kubernetes بمساحة عمل Azure التعلم الآلي. إليك التعريف:

resources:
  requests:
    cpu: "100m"
    memory: "2Gi"
  limits:
    cpu: "2"
    memory: "2Gi"
    nvidia.com/gpu: null

إذا لم تقم بتطبيق nodeSelector حقل، يمكن جدولة الجراب على أي عقدة. يتم تعيين موارد افتراضية لوحدات الجراب لحمل العمل مع 0.1 ذاكرة أساسية لوحدة المعالجة المركزية و2 جيجابايت من الذاكرة و0 وحدات معالجة الرسومات للطلب. تقتصر الموارد التي تستخدمها جرابات حمل العمل على 2 ذاكرة أساسية لوحدة المعالجة المركزية و8 غيغابايت من الذاكرة.

يستخدم نوع المثيل الافتراضي موارد قليلة عن قصد. لضمان تشغيل جميع أحمال عمل التعلم الآلي بالموارد المناسبة (على سبيل المثال، مورد GPU)، نوصي بشدة بإنشاء أنواع مثيلات مخصصة.

ضع في اعتبارك النقاط التالية حول نوع المثيل الافتراضي:

  • defaultinstancetype لا يظهر كمورد InstanceType مخصص في نظام المجموعة عند تشغيل الأمر kubectl get instancetype، ولكنه يظهر في جميع العملاء (واجهة المستخدم، Azure CLI، SDK).
  • defaultinstancetype يمكن تجاوزه بتعريف نوع مثيل مخصص له نفس الاسم.

إنشاء نوع مثيل مخصص

لإنشاء نوع مثيل جديد، قم بإنشاء مورد مخصص جديد لنوع المثيل CRD. على سبيل المثال:

kubectl apply -f my_instance_type.yaml

فيما يلي محتويات my_instance_type.yaml:

apiVersion: amlarc.azureml.com/v1alpha1
kind: InstanceType
metadata:
  name: myinstancetypename
spec:
  nodeSelector:
    mylabel: mylabelvalue
  resources:
    limits:
      cpu: "1"
      nvidia.com/gpu: 1
      memory: "2Gi"
    requests:
      cpu: "700m"
      memory: "1500Mi"

تنشئ التعليمات البرمجية السابقة نوع مثيل مع السلوك المسمى:

  • تتم جدولة الحجيرات فقط على العقد التي تحتوي على التسمية mylabel: mylabelvalue.
  • يتم تعيين وحدات الجراب لطلبات الموارد لوحدة المعالجة 700m المركزية والذاكرة 1500Mi .
  • يتم تعيين حدود موارد ل Pods لوحدة المعالجة 1 المركزية والذاكرة 2Gi وNVIDIA 1 GPU.

يجب أن يفي إنشاء أنواع المثيلات المخصصة بالمعلمات وقواعد التعريف التالية، أو يفشل:

المعلمة‬ مطلوب أو اختياري ‏‏الوصف
name مطلوب قيم السلسلة، التي يجب أن تكون فريدة في نظام مجموعة.
CPU request المطلوب قيم السلسلة، والتي لا يمكن أن تكون صفرية أو فارغة.
يمكنك تحديد وحدة المعالجة المركزية بالملليكورات؛ على سبيل المثال، 100m. يمكنك أيضا تحديده كأرقام كاملة. على سبيل المثال، "1" يساوي 1000m.
Memory request المطلوب قيم السلسلة، والتي لا يمكن أن تكون صفرية أو فارغة.
يمكنك تحديد الذاكرة كعدد كامل + لاحقة؛ على سبيل المثال، 1024Mi ل 1024 ميبي بايت (MiB).
CPU limit المطلوب قيم السلسلة، والتي لا يمكن أن تكون صفرية أو فارغة.
يمكنك تحديد وحدة المعالجة المركزية بالملليكورات؛ على سبيل المثال، 100m. يمكنك أيضا تحديده كأرقام كاملة. على سبيل المثال، "1" يساوي 1000m.
Memory limit المطلوب قيم السلسلة، والتي لا يمكن أن تكون صفرية أو فارغة.
يمكنك تحديد الذاكرة كعدد كامل + لاحقة؛ على سبيل المثال، 1024Mi ل 1024 MiB.
GPU اختياري قيم عدد صحيح، والتي يمكن تحديدها فقط في limits المقطع.
لمزيد من المعلومات، راجع وثائق Kubernetes.
nodeSelector اختياري خريطة مفاتيح السلسلة والقيم.

من الممكن أيضاً إنشاء أنواع مثيلات متعددة في وقت واحد:

kubectl apply -f my_instance_type_list.yaml

فيما يلي محتويات my_instance_type_list.yaml:

apiVersion: amlarc.azureml.com/v1alpha1
kind: InstanceTypeList
items:
  - metadata:
      name: cpusmall
    spec:
      resources:
        requests:
          cpu: "100m"
          memory: "100Mi"
        limits:
          cpu: "1"
          nvidia.com/gpu: 0
          memory: "1Gi"

  - metadata:
      name: defaultinstancetype
    spec:
      resources:
        requests:
          cpu: "1"
          memory: "1Gi" 
        limits:
          cpu: "1"
          nvidia.com/gpu: 0
          memory: "1Gi"

ينشئ المثال السابق نوعين من المثيلات: cpusmall و defaultinstancetype. يتجاوز defaultinstancetype هذا defaultinstancetype التعريف التعريف الذي تم إنشاؤه عند إرفاق مجموعة Kubernetes بمساحة عمل Azure التعلم الآلي.

إذا قمت بإرسال حمل عمل تدريب أو استدلال دون نوع مثيل، فإنه يستخدم defaultinstancetype. لتحديد نوع مثيل افتراضي لمجموعة Kubernetes، قم بإنشاء نوع مثيل بالاسم defaultinstancetype. يتم التعرف عليه تلقائيا على أنه الافتراضي.

حدد نوع مثيل لإرسال مهمة تدريب

لتحديد نوع مثيل لمهمة تدريب باستخدام Azure CLI (v2)، حدد اسمه كجزء من قسم الخصائص resources في الوظيفة YAML. على سبيل المثال:

command: python -c "print('Hello world!')"
environment:
  image: library/python:latest
compute: azureml:<Kubernetes-compute_target_name>
resources:
  instance_type: <instance type name>

في المثال السابق، استبدل <Kubernetes-compute_target_name> باسم هدف حساب Kubernetes الخاص بك. استبدل <instance type name> باسم نوع المثيل الذي تريد تحديده. إذا لم تحدد خاصية instance_type ، يستخدم defaultinstancetype النظام لإرسال المهمة.

تحديد نوع مثيل لنشر نموذج

لتحديد نوع مثيل لنشر نموذج باستخدام Azure CLI (v2)، حدد اسمه للخاصية instance_type في نشر YAML. على سبيل المثال:

name: blue
app_insights_enabled: true
endpoint_name: <endpoint name>
model: 
  path: ./model/sklearn_mnist_model.pkl
code_configuration:
  code: ./script/
  scoring_script: score.py
instance_type: <instance type name>
environment: 
  conda_file: file:./model/conda.yml
  image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:latest

في المثال السابق، استبدل <instance type name> باسم نوع المثيل الذي تريد تحديده. إذا لم تحدد خاصية instance_type ، يستخدم defaultinstancetype النظام لنشر النموذج.

هام

لتوزيع نموذج MLflow، يتطلب طلب المورد ذاكرة أساسية لوحدة المعالجة المركزية 2 على الأقل وذاكرة 4 غيغابايت. وإلا، سيفشل النشر.

التحقق من صحة قسم الموارد

يمكنك استخدام resources القسم لتحديد طلب المورد وحدود عمليات نشر النموذج. على سبيل المثال:

name: blue
app_insights_enabled: true
endpoint_name: <endpoint name>
model: 
  path: ./model/sklearn_mnist_model.pkl
code_configuration:
  code: ./script/
  scoring_script: score.py
environment: 
  conda_file: file:./model/conda.yml
  image: mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:latest
resources:
  requests:
    cpu: "0.1"
    memory: "0.2Gi"
  limits:
    cpu: "0.2"
    #nvidia.com/gpu: 0
    memory: "0.5Gi"
instance_type: <instance type name>

إذا كنت تستخدم resources القسم، يجب أن يفي تعريف مورد صالح بالقواعد التالية. يؤدي تعريف مورد غير صالح إلى فشل نشر النموذج.

المعلمة‬ مطلوب أو اختياري ‏‏الوصف
requests:
cpu:
مطلوب قيم السلسلة، والتي لا يمكن أن تكون صفرية أو فارغة.
يمكنك تحديد وحدة المعالجة المركزية بالملليكورات؛ على سبيل المثال، 100m. يمكنك أيضا تحديده بالأرقام الكاملة. على سبيل المثال، "1" يساوي 1000m.
requests:
memory:
المطلوب قيم السلسلة، والتي لا يمكن أن تكون صفرية أو فارغة.
يمكنك تحديد الذاكرة كعدد كامل + لاحقة؛ على سبيل المثال، 1024Mi ل 1024 MiB.
لا يمكن أن تكون الذاكرة أقل من 1 ميغابايت.
limits:
cpu:
الاختياري
(مطلوب فقط عندما تحتاج إلى وحدة معالجة الرسومات)
قيم السلسلة، والتي لا يمكن أن تكون صفرية أو فارغة.
يمكنك تحديد وحدة المعالجة المركزية بالملليكورات؛ على سبيل المثال، 100m. يمكنك أيضا تحديده بالأرقام الكاملة. على سبيل المثال، "1" يساوي 1000m.
limits:
memory:
الاختياري
(مطلوب فقط عندما تحتاج إلى وحدة معالجة الرسومات)
قيم السلسلة، والتي لا يمكن أن تكون صفرية أو فارغة.
يمكنك تحديد الذاكرة كعدد كامل + لاحقة؛ على سبيل المثال، 1024Mi ل 1,024 ميبي بايت.
limits:
nvidia.com/gpu:
الاختياري
(مطلوب فقط عندما تحتاج إلى وحدة معالجة الرسومات)
قيم عدد صحيح، والتي لا يمكن أن تكون فارغة ويمكن تحديدها فقط في limits المقطع.
لمزيد من المعلومات، راجع وثائق Kubernetes.
إذا كنت تحتاج إلى وحدة المعالجة المركزية فقط، يمكنك حذف المقطع بأكمله limits .

نوع المثيل مطلوب لنشر النموذج. إذا قمت بتعريف resources المقطع، وسيتم التحقق من صحته مقابل نوع المثيل، تكون القواعد كما يلي:

  • مع تعريف مقطع صالح resource ، يجب أن تكون حدود الموارد أقل من حدود نوع المثيل. وإلا، سيفشل النشر.
  • إذا لم تقم بتعريف نوع مثيل، يستخدم defaultinstancetype النظام للتحقق من الصحة مع resources القسم .
  • إذا لم تقم بتعريف resources القسم، يستخدم النظام نوع المثيل لإنشاء النشر.

الخطوات التالية