يقوم التحجيم التلقائي بتشغيل المقدار المناسب من الموارد للتعامل مع الحِمل على تطبيقك. نقاط النهاية عبر الإنترنت يدعم القياس التلقائي من خلال التكامل مع ميزة القياس التلقائي لـ Azure Monitor.
يدعم القياس التلقائي لـ Azure Monitor مجموعة غنية من القواعد. يمكنك تكوين القياس المستند إلى القياسات (على سبيل المثال، استخدام وحدة المعالجة المركزية >70%)، أو القياس المستند إلى الجدول الزمني (على سبيل المثال، قواعد القياس لساعات العمل القصوى)، أو مجموعة. لمزيد من المعلومات، راجع نظرة عامة على التحجيم التلقائي في Microsoft Azure.
اليوم، يمكنك إدارة القياس التلقائي باستخدام إما Azure CLI أو REST أو ARM أو مدخل Microsoft Azure المستندة إلى المستعرض. ستضيف مجموعات SDK الأخرى للتعلم الآلي من Microsoft Azure، مثل Python SDK، الدعم بمرور الوقت.
لاستخدام التحجيم التلقائي، يجب تعيين الدور microsoft.insights/autoscalesettings/write للهوية التي تدير التحجيم التلقائي. يمكنك استخدام أي أدوار مضمنة أو مخصصة تسمح بهذا الإجراء. للحصول على إرشادات عامة حول إدارة الأدوار للتعلم الآلي من Microsoft Azure، راجع إدارة المستخدمين والأدوار. لمزيد من المعلومات حول إعدادات التحجيم التلقائي من Azure Monitor، راجع التحجيم التلقائي ل Microsoft.Insights.
تعريف ملف تعريف التحجيم التلقائي
لتمكين مقياس تلقائي لنقطة نهاية، عليك أولاً تحديد ملف تعريف تحجيم تلقائي. يُحدد ملف التعريف هذا سعة مجموعة التحجيم الافتراضية والحد الأدنى والحد الأقصى. يعيّن المثال التالي السعة الافتراضية والحد الأدنى كمثيلين للجهاز الظاهري، والسعة القصوى خمسة:
تعيّن القصاصة البرمجية التالية اسمي نقطة النهاية والتوزيع:
# set your existing endpoint name
ENDPOINT_NAME=your-endpoint-name
DEPLOYMENT_NAME=blue
بعد ذلك، احصل على معرف Azure Resource Manager للتوزيع ونقطة النهاية:
# ARM id of the deployment
DEPLOYMENT_RESOURCE_ID=$(az ml online-deployment show -e $ENDPOINT_NAME -n $DEPLOYMENT_NAME -o tsv --query "id")
# ARM id of the deployment. todo: change to --query "id"
ENDPOINT_RESOURCE_ID=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query "properties.\"azureml.onlineendpointid\"")
# set a unique name for autoscale settings for this deployment. The below will append a random number to make the name unique.
AUTOSCALE_SETTINGS_NAME=autoscale-$ENDPOINT_NAME-$DEPLOYMENT_NAME-`echo $RANDOM`
تنشئ القصاصة البرمجية التالية ملف تعريف تحجيم تلقائي:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.mgmt.monitor import MonitorManagementClient
from azure.mgmt.monitor.models import AutoscaleProfile, ScaleRule, MetricTrigger, ScaleAction, Recurrence, RecurrentSchedule
import random
import datetime
تعريف المتغيرات لمساحة العمل ونقطة النهاية والتوزيع:
# Set a unique name for autoscale settings for this deployment. The below will append a random number to make the name unique.
autoscale_settings_name = f"autoscale-{endpoint_name}-{deployment_name}-{random.randint(0,1000)}"
mon_client.autoscale_settings.create_or_update(
resource_group,
autoscale_settings_name,
parameters = {
"location" : endpoint.location,
"target_resource_uri" : deployment.id,
"profiles" : [
AutoscaleProfile(
name="my-scale-settings",
capacity={
"minimum" : 2,
"maximum" : 5,
"default" : 2
},
rules = []
)
]
}
)
في Azure Machine Learning studio، حدد مساحة العمل الخاصة بك ثم حدد Endpoints من الجانب الأيسر من الصفحة. بمجرد إدراج نقاط النهاية، حدد النقطة التي تريد تكوينها.
من علامة التبويب Details لنقطة النهاية، حدد Configure auto scaling.
ضمن Choose how to scale your resources، حدد Custom autoscale لبدء التكوين. لشرط المقياس الافتراضي، استخدم القيم التالية:
عيّن Scale mode على Scale based on a metric.
عيّن Minimum على 2.
عيّن Maximum على 5.
عيّن Default على 2.
إنشاء قاعدة للتوسع باستخدام القياسات
قاعدة القياس الشائعة هي تلك التي تزيد من عدد مثيلات الجهاز الظاهري عندما يكون متوسط حمل وحدة المعالجة المركزية مرتفعاً. سيخصص المثال التالي عقدتين أخريين (بحد أقصى) إذا كان متوسط حمل وحدة المعالجة المركزية أكبر من 70% لمدة خمس دقائق:
az monitor autoscale rule create \
--autoscale-name $AUTOSCALE_SETTINGS_NAME \
--condition "CpuUtilizationPercentage > 70 avg 5m" \
--scale out 2
القاعدة جزء من ملف التعريف my-scale-settings (autoscale-name يتطابق مع name ملف التعريف). تشير قيمة الوسيطة condition إلى أنه يجب تشغيل القاعدة عندما "يتجاوز متوسط استهلاك وحدة المعالجة المركزية بين مثيلات الجهاز الظاهري 70% لمدة خمس دقائق". عند استيفاء هذا الشرط، يتم تخصيص مثيلات أخرى للجهاز الظاهري.
تشير هذه القاعدة إلى متوسط آخر 5 دقائق لـ CPUUtilizationpercentage من الوسيطات metric_name، وtime_window، وtime_aggregation. عندما تكون قيمة المقياس أكبر من threshold 70، يُخصص مثيلان آخران للجهاز الظاهري.
حدّث ملف التعريف my-scale-settings لتضمين هذه القاعدة:
في قسم Rules، حدد Add a rule. يتم عرض صفحة Scale rule. استخدم المعلومات التالية لتعبئة الحقول في هذه الصفحة:
عيّن Metric name على CPU Utilization Percentage.
عيّن Operator على Greater than واضبط Metric threshold على 70.
عيّن Duration (minutes) على 5. اترك إحصاء الحبوب الزمنية على أنها متوسط .
قم بتعيين Operation على Increase count by وتعيين Instance count على 2.
أخيراً، حدد الزر Add لإنشاء القاعدة.
إنشاء قاعدة لتوسيع نطاق استخدام القياسات
عندما يكون الحمل خفيفاً، يمكن أن يؤدي القياس في القاعدة إلى تقليل عدد مثيلات الجهاز الظاهري. سيحرر المثال التالي عقدة واحدة، إلى حد أدنى 2، إذا كان حمل وحدة المعالجة المركزية أقل من 30% لمدة 5 دقائق:
في قسم Rules، حدد Add a rule. يتم عرض صفحة Scale rule. استخدم المعلومات التالية لتعبئة الحقول في هذه الصفحة:
عيّن Metric name على CPU Utilization Percentage.
عيّن Operator على Less than وحد المقياس على 30.
عيّن Duration (minutes) على 5.
عيّن Operation على Decrease count by واضبط Instance count على 1.
أخيراً، حدد الزر Add لإنشاء القاعدة.
إذا كان لديك كل من توسيع نطاق القواعد وقياسها، فستبدو القواعد الخاصة بك مشابهة للقطة الشاشة التالية. لقد حددت أنه إذا تجاوز متوسط حمل وحدة المعالجة المركزية 70% لمدة 5 دقائق، فيجب تخصيص عقدتين إضافيتين، بحد أقصى 5. إذا كان حمل وحدة المعالجة المركزية أقل من 30% لمدة 5 دقائق، فيجب تحرير عقدة واحدة، بحد أدنى 2.
إنشاء قاعدة تحجيم بناءً على قياسات نقطة النهاية
تم تطبيق القواعد السابقة على التوزيع. الآن، أضف قاعدة تنطبق على نقطة النهاية. في هذا المثال، إذا كان وقت استجابة الطلب أكبر من متوسط 70 ملّي ثانية لمدة 5 دقائق، فخصص عقدة أخرى.
# delete the autoscaling profile
az monitor autoscale delete -n "$AUTOSCALE_SETTINGS_NAME"
# delete the endpoint
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait