إنشاء وإدارة أنواع المثيلات للاستخدام الفعال لموارد الحوسبة
أنواع المثيلات هي مفهوم التعلم الآلي من 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
وNVIDIA1
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
القسم، يستخدم النظام نوع المثيل لإنشاء النشر.