ينطبق على:
ملحق ML Azure CLI v2 (الحالي)
Python SDK azure-ai-ml v2 (الحالي)
في هذه المقالة، تتعلم نشر النموذج الخاص بك إلى نقطة نهاية عبر الإنترنت لاستخدامها في الاستدلال في الوقت الحقيقي. تبدأ بنشر نموذج على جهازك المحلي لتصحيح أي أخطاء. بعد ذلك، يمكنك نشر النموذج واختباره في Azure، وعرض سجلات التوزيع، ومراقبة اتفاقية مستوى الخدمة (SLA). بنهاية هذه المقالة، لديك نقطة نهاية HTTPS/REST قابلة للتطوير يمكنك استخدامها للاستدلال في الوقت الفعلي.
نقاط النهاية عبر الإنترنت هي نقاط نهاية تستخدم للاستدلال في الوقت الحقيقي. هناك نوعان من نقاط النهاية عبر الإنترنت: نقاط النهاية المدارة عبر الإنترنت ونقاط نهاية Kubernetes عبر الإنترنت. لمزيد من المعلومات حول الاختلافات، راجع نقاط النهاية المدارة عبر الإنترنت مقابل نقاط نهاية Kubernetes عبر الإنترنت.
تساعد نقاط النهاية المدارة عبر الإنترنت على نشر نماذج التعلم الآلي بطريقة تسليم المفتاح. تعمل نقاط النهاية المُدارة عبر الإنترنت مع أجهزة وحدة المعالجة المركزية ووحدة معالجة الرسومات القوية في Azure بطريقة قابلة للتطوير، ومُدارة بالكامل. تهتم نقاط النهاية المدارة عبر الإنترنت بخدمة نماذجك وتوسيع نطاقها وتأمينها ومراقبتها. هذه المساعدة تحررك من النفقات العامة لإعداد البنية الأساسية وإدارتها.
يستخدم المثال الرئيسي في هذه المقالة نقاط النهاية المدارة عبر الإنترنت للنشر. لاستخدام Kubernetes بدلا من ذلك، راجع الملاحظات في هذا المستند المضمنة مع مناقشة نقطة النهاية المدارة عبر الإنترنت.
المتطلبات الأساسية
ينطبق على:
ملحق التعلم الآلي من Azure CLI v2 (الحالي)
يتم استخدام التحكم في الوصول المستند إلى دور Azure (Azure RBAC) لمنح الوصول إلى العمليات في التعلم الآلي من Azure. لتنفيذ الخطوات الواردة في هذه المقالة، يجب تعيين دور المالك أو المساهم لحساب المستخدم الخاص بك لمساحة عمل التعلم الآلي من Azure، أو يجب أن يسمح دور مخصص .Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
إذا كنت تستخدم استوديو التعلم الآلي من Azure لإنشاء نقاط النهاية أو عمليات النشر عبر الإنترنت وإدارتها، فستحتاج إلى إذن Microsoft.Resources/deployments/write
إضافي من مالك مجموعة الموارد. لمزيد من المعلومات، راجع إدارة الوصول إلى مساحات عمل التعلم الآلي من Azure.
(اختياري) للتوزيع محلياً، يجب عليك تثبيت Docker Engine على الكمبيوتر المحلي.
نوصي بشدة بهذا الخيار، مما يسهل تصحيح المشكلات.
ينطبق على:
Python SDK azure-ai-ml v2 (الحالي)
مساحة عمل للتعلم الآلي من Microsoft Azure. للحصول على خطوات لإنشاء مساحة عمل، راجع إنشاء مساحة العمل.
Azure Machine Learning SDK ل Python v2. لتثبيت SDK، استخدم الأمر التالي:
pip install azure-ai-ml azure-identity
لتحديث تثبيت موجود من SDK إلى أحدث إصدار، استخدم الأمر التالي:
pip install --upgrade azure-ai-ml azure-identity
لمزيد من المعلومات، راجع مكتبة عميل حزمة التعلم الآلي من Azure ل Python.
يتم استخدام Azure RBAC لمنح الوصول إلى العمليات في التعلم الآلي من Azure. لتنفيذ الخطوات الواردة في هذه المقالة، يجب تعيين دور المالك أو المساهم لحساب المستخدم الخاص بك لمساحة عمل التعلم الآلي من Azure، أو يجب أن يسمح دور مخصص .Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
لمزيد من المعلومات، راجع إدارة الوصول إلى مساحات عمل التعلم الآلي من Azure.
(اختياري) للتوزيع محلياً، يجب عليك تثبيت Docker Engine على الكمبيوتر المحلي.
نوصي بشدة بهذا الخيار، مما يسهل تصحيح المشكلات.
قبل اتباع الخطوات الواردة في هذه المقالة، تأكد من أن لديك المتطلبات الأساسية التالية:
يتم استخدام Azure CLI وملحق CLI للتعلم الآلي في هذه الخطوات، ولكنها ليست التركيز الرئيسي. يتم استخدامها أكثر كمرافق لتمرير القوالب إلى Azure والتحقق من حالة عمليات نشر القالب.
- يتم استخدام Azure RBAC لمنح الوصول إلى العمليات في التعلم الآلي من Azure. لتنفيذ الخطوات الواردة في هذه المقالة، يجب تعيين دور المالك أو المساهم لحساب المستخدم الخاص بك لمساحة عمل التعلم الآلي من Azure، أو يجب أن يسمح دور مخصص .
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
لمزيد من المعلومات، راجع إدارة الوصول إلى مساحة عمل التعلم الآلي من Azure.
تأكد من أن لديك حصة نسبية كافية للجهاز الظاهري (VM) مخصصة للنشر. يحتفظ Azure Machine Learning ب 20% من موارد الحوسبة لإجراء ترقيات على بعض إصدارات الجهاز الظاهري. على سبيل المثال، إذا طلبت 10 مثيلات في عملية نشر، فيجب أن يكون لديك حصة نسبية تبلغ 12 لكل عدد من الذاكرات الأساسية لإصدار الجهاز الظاهري. يؤدي الفشل في حساب موارد الحوسبة الإضافية إلى حدوث خطأ. يتم إعفاء بعض إصدارات الجهاز الظاهري من حجز الحصة الإضافية. لمزيد من المعلومات حول تخصيص الحصة النسبية، راجع تخصيص حصة الجهاز الظاهري للنشر.
بدلا من ذلك، يمكنك استخدام الحصة النسبية من تجمع الحصص المشتركة للتعلم الآلي من Azure لفترة محدودة. يوفر Azure التعلم الآلي مجموعة حصص مشتركة يمكن للمستخدمين عبر مناطق مختلفة الوصول إلى الحصة النسبية لإجراء الاختبار لفترة محدودة، اعتمادا على التوفر.
عند استخدام الاستوديو لنشر نماذج Llama-2 وPhi وNemotron و Mistral وDely وDci-DeciLM من كتالوج النموذج إلى نقطة نهاية مدارة عبر الإنترنت، يسمح لك Azure التعلم الآلي بالوصول إلى تجمع الحصص المشتركة لفترة قصيرة حتى تتمكن من إجراء الاختبار. لمزيد من المعلومات حول تجمع الحصة النسبية المشتركة، راجع الحصة النسبية المشتركة ل Azure التعلم الآلي.
إعداد النظام الخاص بك
تعيين متغيرات البيئة
إذا لم تكن قد قمت بالفعل بتعيين الإعدادات الافتراضية لـAzure CLI، فاحفظ الإعدادات الافتراضية. لتجنب تمرير قيم اشتراكك، ومساحة العمل، ومجموعة الموارد عدة مرات، قم بتشغيل هذا التعليمة البرمجية:
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
استنساخ مستودع الأمثلة
للمتابعة مع هذه المقالة، قم أولا باستنساخ مستودع azureml-examples، ثم قم بالتغيير إلى دليل azureml-examples/cli الخاص بالمستودع:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli
استخدم --depth 1
لاستنساخ أحدث تثبيت للمستودع فقط، ما يقلل من الوقت لإكمال العملية.
الأوامر في هذا البرنامج التعليمي موجودة في الملفات deploy-local-endpoint.shdeploy-managed-online-endpoint.sh في دليل cli . توجد ملفات تكوين YAML في نقاط النهاية/عبر الإنترنت/المدارة/العينة/ الدليل الفرعي.
ملاحظة
ملفات تكوين YAML لنقاط نهاية Kubernetes عبر الإنترنت موجودة في نقاط النهاية/عبر الإنترنت/kubernetes/ الدليل الفرعي.
استنساخ مستودع الأمثلة
لتشغيل أمثلة التدريب، قم أولا باستنساخ مستودع azureml-examples، ثم قم بالتغيير إلى azureml-examples/sdk/python/endpoints/online/managed directory:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk/python/endpoints/online/managed
استخدم --depth 1
لاستنساخ أحدث تثبيت للمستودع فقط، ما يقلل من الوقت لإكمال العملية.
تستند المعلومات الواردة في هذه المقالة إلى دفتر الملاحظات online-endpoints-simple-deployment.ipynb . يحتوي على نفس محتوى هذه المقالة، على الرغم من أن ترتيب الرموز مختلف قليلا.
الاتصال بمساحة عمل التعلم الآلي من Microsoft Azure
مساحة العمل هي مورد المستوى الأعلى ل Azure التعلم الآلي. يوفر مكانا مركزيا للعمل مع جميع البيانات الاصطناعية التي تقوم بإنشائها عند استخدام التعلم الآلي من Azure. في هذا القسم، يمكنك الاتصال بمساحة العمل التي تقوم فيها بتنفيذ مهام النشر. للمتابعة، افتح دفتر ملاحظات online-endpoints-simple-deployment.ipynb .
استيراد المكتبات المطلوبة:
# import required libraries
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration
)
from azure.identity import DefaultAzureCredential
ملاحظة
إذا كنت تستخدم نقطة نهاية Kubernetes عبر الإنترنت، فاستورد KubernetesOnlineEndpoint
الفئة و KubernetesOnlineDeployment
من المكتبة azure.ai.ml.entities
.
تكوين تفاصيل مساحة العمل والحصول على مؤشر إلى مساحة العمل.
للاتصال بمساحة عمل، تحتاج إلى معلمات المعرف هذه: اشتراك ومجموعة موارد واسم مساحة عمل. يمكنك استخدام هذه التفاصيل في MLClient
من azure.ai.ml
للحصول على مؤشر إلى مساحة عمل التعلم الآلي من Azure المطلوبة. يستخدم هذا المثال مصادقة Azure الافتراضية.
# enter details of your Azure Machine Learning workspace
subscription_id = "<subscription ID>"
resource_group = "<resource group>"
workspace = "<workspace name>"
# get a handle to the workspace
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
إذا كان لديك Git مثبتا على جهازك المحلي، يمكنك اتباع الإرشادات لاستنساخ مستودع الأمثلة. وإلا، اتبع الإرشادات لتنزيل الملفات من مستودع الأمثلة.
استنساخ مستودع الأمثلة
لمتابعة هذه المقالة، قم أولا باستنساخ مستودع azureml-examples، ثم قم بالتغيير إلى دليل azureml-examples/cli/endpoints/online/model-1 .
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli/endpoints/online/model-1
استخدم --depth 1
لاستنساخ أحدث تثبيت للمستودع فقط، ما يقلل من الوقت لإكمال العملية.
تنزيل الملفات من مستودع الأمثلة
إذا قمت باستنساخ مستودع الأمثلة، فإن جهازك المحلي يحتوي بالفعل على نسخ من الملفات لهذا المثال، ويمكنك التخطي إلى القسم التالي. إذا لم تقم بنسخ المستودع، فنزله إلى جهازك المحلي.
- انتقل إلى مستودع الأمثلة (azureml-examples).
- انتقل إلى <> الزر Code على الصفحة، ثم في علامة التبويب Local ، حدد Download ZIP.
- حدد موقع المجلد /cli/endpoints/online/model-1/model والملف /cli/endpoints/online/model-1/onlinescoring/score.py.
تعيين متغيرات البيئة
قم بتعيين متغيرات البيئة التالية بحيث يمكنك استخدامها في الأمثلة الواردة في هذه المقالة. استبدل القيم بمعرف اشتراك Azure ومنطقة Azure حيث توجد مساحة العمل ومجموعة الموارد التي تحتوي على مساحة العمل واسم مساحة العمل:
export SUBSCRIPTION_ID="<subscription ID>"
export LOCATION="<your region>"
export RESOURCE_GROUP="<resource group>"
export WORKSPACE="<workspace name>"
يتطلب منك بعض أمثلة القالب تحميل الملفات إلى Azure Blob Storage لمساحة العمل الخاصة بك. تقوم الخطوات التالية بالاستعلام عن مساحة العمل وتخزين هذه المعلومات في متغيرات البيئة المستخدمة في الأمثلة:
الحصول على رمز مميز للوصول:
TOKEN=$(az account get-access-token --query accessToken -o tsv)
تعيين إصدار واجهة برمجة تطبيقات REST:
API_VERSION="2022-05-01"
الحصول على معلومات التخزين:
# Get values for storage account
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')
استنساخ مستودع الأمثلة
للمتابعة مع هذه المقالة، قم أولا باستنساخ مستودع azureml-examples، ثم قم بالتغيير إلى دليل azureml-examples :
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
استخدم --depth 1
لاستنساخ أحدث تثبيت للمستودع فقط، ما يقلل من الوقت لإكمال العملية.
تعريف نقطة النهاية
لتعريف نقطة نهاية عبر الإنترنت، حدد اسم نقطة النهاية ووضع المصادقة. لمزيد من المعلومات حول نقاط النهاية المدارة عبر الإنترنت، راجع نقاط النهاية عبر الإنترنت.
تعيين اسم نقطة نهاية
لتعيين اسم نقطة النهاية، قم بتشغيل الأمر التالي. استبدل <YOUR_ENDPOINT_NAME>
باسم فريد في منطقة Azure. لمزيد من المعلومات حول قواعد التسمية، راجع حدود نقطة النهاية.
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
تعرض القصاصة البرمجية التالية endpoints/online/Managed/sample/endpoint.yml الملف:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
يتم وصف مرجع تنسيق YAML لنقطة النهاية في الجدول التالي. لمعرفة كيفية تحديد هذه السمات، راجع مرجع YAML لنقطة النهاية عبر الإنترنت. للحصول على معلومات حول الحدود المتعلقة بنقاط النهاية المدارة، راجع نقاط نهاية التعلم الآلي من Azure عبر الإنترنت ونقاط النهاية الدفعية.
المفتاح |
الوصف |
$schema |
(اختياري) مخطط YAML. لمشاهدة جميع الخيارات المتوفرة في ملف YAML، يمكنك عرض المخطط في قصاصة التعليمات البرمجية السابقة في مستعرض. |
name |
اسم نقطة النهاية. |
auth_mode |
استخدام key للمصادقة المستندة إلى المفتاح. استخدم aml_token للمصادقة المستندة إلى الرمز المميز للتعلم الآلي من Azure. استخدم aad_token للمصادقة المستندة إلى الرمز المميز ل Microsoft Entra (معاينة). لمزيد من المعلومات حول المصادقة، راجع مصادقة العملاء لنقاط النهاية عبر الإنترنت. |
حدد أولا اسم نقطة النهاية عبر الإنترنت، ثم قم بتكوين نقطة النهاية.
استبدل <YOUR_ENDPOINT_NAME>
باسم فريد في منطقة Azure، أو استخدم أسلوب المثال لتعريف اسم عشوائي. تأكد من حذف الأسلوب الذي لا تستخدمه. لمزيد من المعلومات حول قواعد التسمية، راجع حدود نقطة النهاية.
# method 1: define an endpoint name
endpoint_name = "<YOUR_ENDPOINT_NAME>"
# method 2: example way to define a random name
import datetime
endpoint_name = "endpt-" + datetime.datetime.now().strftime("%m%d%H%M%f")
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name = endpoint_name,
description="this is a sample endpoint",
auth_mode="key"
)
تستخدم key
التعليمات البرمجية السابقة للمصادقة المستندة إلى المفتاح. لاستخدام مصادقة Azure التعلم الآلي المستندة إلى الرمز المميز، استخدم aml_token
. لاستخدام المصادقة المستندة إلى الرمز المميز من Microsoft Entra (معاينة)، استخدم aad_token
. لمزيد من المعلومات حول المصادقة، راجع مصادقة العملاء لنقاط النهاية عبر الإنترنت.
عند النشر إلى Azure من الاستوديو، يمكنك إنشاء نقطة نهاية ونشر لإضافته إليها. في ذلك الوقت، تتم مطالبتك بتوفير أسماء لنقطة النهاية والنشر.
تعيين اسم نقطة نهاية
لتعيين اسم نقطة النهاية، قم بتشغيل الأمر التالي لإنشاء اسم عشوائي. يجب أن تكون فريدة في منطقة Azure. لمزيد من المعلومات حول قواعد التسمية، راجع حدود نقطة النهاية.
export ENDPOINT_NAME=endpoint-`echo $RANDOM`
لتعريف نقطة النهاية والنشر، تستخدم هذه المقالة قوالب Azure Resource Manager (قوالب ARM) online-endpoint.jsononline-endpoint-deployment.json. لاستخدام القوالب لتعريف نقطة نهاية ونشر عبر الإنترنت، راجع قسم Deploy to Azure .
تعريف التوزيع
التوزيع هو مجموعة من الموارد المطلوبة لاستضافة النموذج الذي يقوم بالاستدلال الفعلي. في هذا المثال، يمكنك نشر scikit-learn
نموذج يقوم بالتراجع واستخدام برنامج نصي لتسجيل النقاط score.py لتشغيل النموذج على طلب إدخال معين.
للتعرف على السمات الرئيسية للتوزيع، راجع عمليات النشر عبر الإنترنت.
يستخدم تكوين النشر موقع النموذج الذي تريد نشره.
تعرض القصاصة البرمجية التالية نقاط النهاية/عبر الإنترنت/المدارة/عينة/blue-deployment.yml الملف، مع جميع المدخلات المطلوبة لتكوين التوزيع:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
path: ../../model-1/model/
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yaml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
يحدد ملف blue-deployment.yml سمات النشر التالية:
-
model
: يحدد خصائص النموذج المضمنة باستخدام المعلمة path
(حيث يتم تحميل الملفات منها). يقوم CLI تلقائيا بتحميل ملفات النموذج وتسجيل النموذج باسم تم إنشاؤه تلقائيا.
-
environment
: يستخدم التعريفات المضمنة التي تتضمن مكان تحميل الملفات منه. يقوم CLI تلقائيا بتحميل ملف conda.yaml وتسجيل البيئة. لاحقا، لإنشاء البيئة، يستخدم التوزيع المعلمة image
للصورة الأساسية. في هذا المثال، هو mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
. يتم تثبيت التبعيات conda_file
أعلى الصورة الأساسية.
-
code_configuration
: تحميل الملفات المحلية، مثل مصدر Python لنموذج التسجيل، من بيئة التطوير أثناء النشر.
لمزيدٍ من المعلومات بشأن مخطط YAML، راجع مرجع YAML لنقطة النهاية عبر الإنترنت.
ملاحظة
لاستخدام نقاط نهاية Kubernetes بدلا من نقاط النهاية المدارة عبر الإنترنت كهدف حساب:
- أنشئ مجموعة Kubernetes وأرفقها كهدف حسابي بمساحة عمل Azure Machine Learning باستخدام Azure Machine Learning studio.
- استخدم نقطة النهاية YAML لاستهداف Kubernetes بدلا من نقطة النهاية المدارة YAML. تحتاج إلى تحرير YAML لتغيير قيمة
compute
إلى اسم هدف الحساب المسجل. يمكنك استخدام deployment.yaml هذا الذي يحتوي على خصائص أخرى تنطبق على نشر Kubernetes.
تنطبق جميع الأوامر المستخدمة في هذه المقالة لنقاط النهاية المدارة عبر الإنترنت أيضا على نقاط نهاية Kubernetes، باستثناء القدرات التالية التي لا تنطبق على نقاط نهاية Kubernetes:
استخدم التعليمات البرمجية التالية لتكوين عملية نشر:
model = Model(path="../model-1/model/sklearn_regression_model.pkl")
env = Environment(
conda_file="../model-1/environment/conda.yaml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest",
)
blue_deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=model,
environment=env,
code_configuration=CodeConfiguration(
code="../model-1/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
-
Model
: يحدد خصائص النموذج المضمنة باستخدام المعلمة path
(حيث يتم تحميل الملفات منها). يقوم SDK تلقائيا بتحميل ملفات النموذج وتسجيل النموذج باسم تم إنشاؤه تلقائيا.
-
Environment
: يستخدم التعريفات المضمنة التي تتضمن مكان تحميل الملفات منه. يقوم SDK تلقائيا بتحميل ملف conda.yaml وتسجيل البيئة. لاحقا، لإنشاء البيئة، يستخدم التوزيع المعلمة image
للصورة الأساسية. في هذا المثال، هو mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
. يتم تثبيت التبعيات conda_file
أعلى الصورة الأساسية.
-
CodeConfiguration
: تحميل الملفات المحلية، مثل مصدر Python لنموذج التسجيل، من بيئة التطوير أثناء النشر.
لمزيد من المعلومات حول تعريف النشر عبر الإنترنت، راجع OnlineDeployment Class.
عند النشر إلى Azure، يمكنك إنشاء نقطة نهاية ونشر لإضافتها إليها. في ذلك الوقت، تتم مطالبتك بتوفير أسماء لنقطة النهاية والنشر.
فهم البرنامج النصي لتسجيل النقاط
تنسيق البرنامج النصي لتسجيل النقاط لنقاط النهاية عبر الإنترنت هو نفس التنسيق المستخدَم في الإصدار السابق من CLI وفي Python SDK.
يجب أن يحتوي البرنامج النصي لتسجيل النقاط المحدد في code_configuration.scoring_script
على دالة init()
ودالة run()
.
يجب أن يكون للبرنامج النصي لتسجيل النقاط دالة init()
ودالة run()
.
يجب أن يكون للبرنامج النصي لتسجيل النقاط دالة init()
ودالة run()
.
يجب أن يكون للبرنامج النصي لتسجيل النقاط دالة init()
ودالة run()
. تستخدم هذه المقالة ملف score.py.
عند استخدام قالب للنشر، يجب أولا تحميل ملف تسجيل النقاط إلى Blob Storage، ثم تسجيله:
تستخدم التعليمات البرمجية التالية أمر az storage blob upload-batch
Azure CLI لتحميل ملف التسجيل:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/score -s cli/endpoints/online/model-1/onlinescoring --account-name $AZURE_STORAGE_ACCOUNT
تستخدم التعليمات البرمجية التالية قالب لتسجيل التعليمات البرمجية:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/code-version.json \
--parameters \
workspaceName=$WORKSPACE \
codeAssetName="score-sklearn" \
codeUri="https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/score"
يستخدم هذا المثال ملف score.py من المستودع الذي قمت بنسخه أو تنزيله مسبقا:
import os
import logging
import json
import numpy
import joblib
def init():
"""
This function is called when the container is initialized/started, typically after create/update of the deployment.
You can write the logic here to perform init operations like caching the model in memory
"""
global model
# AZUREML_MODEL_DIR is an environment variable created during deployment.
# It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
# Please provide your model's folder name if there is one
model_path = os.path.join(
os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
)
# deserialize the model file back into a sklearn model
model = joblib.load(model_path)
logging.info("Init complete")
def run(raw_data):
"""
This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
In the example we extract the data from the json input and call the scikit-learn model's predict()
method and return the result back
"""
logging.info("model 1: request received")
data = json.loads(raw_data)["data"]
data = numpy.array(data)
result = model.predict(data)
logging.info("Request processed")
return result.tolist()
يتم استدعاء الدالة init()
عند تهيئة الحاوية أو بدء تشغيلها. تحدث التهيئة عادةً بعد وقت قصير من إنشاء التوزيع أو تحديثه.
init
الدالة هي المكان المناسب لكتابة منطق لعمليات التهيئة العمومية مثل التخزين المؤقت للنموذج في الذاكرة (كما هو موضح في هذا الملف score.py).
run()
يتم استدعاء الدالة في كل مرة يتم فيها استدعاء نقطة النهاية. يقوم بتسجيل النقاط والتنبؤ الفعلي. في ملف score.py هذا، تستخرج الدالة run()
البيانات من إدخال JSON، وتستدعي أسلوب نموذج predict()
scikit-learn، ثم ترجع نتيجة التنبؤ.
النشر والتصحيح محليا باستخدام نقطة نهاية محلية
نوصي بشدة باختبار تشغيل نقطة النهاية محليا للتحقق من صحة التعليمات البرمجية والتكوين وتصحيحها قبل النشر إلى Azure. يدعم Azure CLI وPython SDK نقاط النهاية المحلية والنشرات، ولكن لا يدعم كل من استوديو التعلم الآلي من Azure وقوالب ARM.
للنشر محليا، يجب تثبيت Docker Engine وتشغيله. يبدأ Docker Engine عادةً عند بدء تشغيل الكمبيوتر. إذا لم يحدث ذلك، يمكنك استكشاف أخطاء محرك Docker وإصلاحها.
يمكنك استخدام حزمة Python لخادم HTTP للاستدلال على التعلم الآلي من Azure لتصحيح أخطاء البرنامج النصي لتسجيل النقاط محليا دون Docker Engine. يساعدك تصحيح الأخطاء باستخدام خادم الاستدلال على تصحيح أخطاء البرنامج النصي لتسجيل النقاط قبل النشر إلى نقاط النهاية المحلية بحيث يمكنك تصحيح الأخطاء دون التأثر بتكوينات حاوية التوزيع.
لمزيد من المعلومات حول تصحيح أخطاء نقاط النهاية عبر الإنترنت محليا قبل النشر إلى Azure، راجع تصحيح أخطاء نقطة النهاية عبر الإنترنت.
قم بتوزيع النموذج محلياً
أولا، قم بإنشاء نقطة نهاية. اختياريا، بالنسبة لنقطة نهاية محلية، يمكنك تخطي هذه الخطوة. يمكنك إنشاء النشر مباشرة (الخطوة التالية)، والذي بدوره ينشئ بيانات التعريف المطلوبة. يعد نشر النماذج محليا مفيدا لأغراض التطوير والاختبار.
az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
ml_client.online_endpoints.begin_create_or_update(endpoint, local=True)
لا يدعم الاستوديو نقاط النهاية المحلية. للحصول على خطوات لاختبار نقطة النهاية محليا، راجع علامات تبويب Azure CLI أو Python.
لا يدعم القالب نقاط النهاية المحلية. للحصول على خطوات لاختبار نقطة النهاية محليا، راجع علامات تبويب Azure CLI أو Python.
الآن، قم بإنشاء توزيع باسم blue
ضمن نقطة النهاية.
az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
توجه --local
العلامة CLI لتوزيع نقطة النهاية في بيئة Docker.
ml_client.online_deployments.begin_create_or_update(
deployment=blue_deployment, local=True
)
توجه local=True
العلامة SDK لنشر نقطة النهاية في بيئة Docker.
لا يدعم الاستوديو نقاط النهاية المحلية. للحصول على خطوات لاختبار نقطة النهاية محليا، راجع علامات تبويب Azure CLI أو Python.
لا يدعم القالب نقاط النهاية المحلية. للحصول على خطوات لاختبار نقطة النهاية محليا، راجع علامات تبويب Azure CLI أو Python.
تحقق من نجاح النشر المحلي
تحقق من حالة النشر لمعرفة ما إذا كان النموذج قد تم نشره دون خطأ:
az ml online-endpoint show -n $ENDPOINT_NAME --local
يجب أن يكون الناتج مشابهاً لـJSON التالي. المعلمة provisioning_state
هي Succeeded
.
{
"auth_mode": "key",
"location": "local",
"name": "docs-endpoint",
"properties": {},
"provisioning_state": "Succeeded",
"scoring_uri": "http://localhost:49158/score",
"tags": {},
"traffic": {}
}
ml_client.online_endpoints.get(name=endpoint_name, local=True)
يقوم الأسلوب بإرجاع ManagedOnlineEndpoint
الكيان. المعلمة provisioning_state
هي Succeeded
.
ManagedOnlineEndpoint({'public_network_access': None, 'provisioning_state': 'Succeeded', 'scoring_uri': 'http://localhost:49158/score', 'swagger_uri': None, 'name': 'endpt-10061534497697', 'description': 'this is a sample endpoint', 'tags': {}, 'properties': {}, 'id': None, 'Resource__source_path': None, 'base_path': '/path/to/your/working/directory', 'creation_context': None, 'serialize': <msrest.serialization.Serializer object at 0x7ffb781bccd0>, 'auth_mode': 'key', 'location': 'local', 'identity': None, 'traffic': {}, 'mirror_traffic': {}, 'kind': None})
لا يدعم الاستوديو نقاط النهاية المحلية. للحصول على خطوات لاختبار نقطة النهاية محليا، راجع علامات تبويب Azure CLI أو Python.
لا يدعم القالب نقاط النهاية المحلية. للحصول على خطوات لاختبار نقطة النهاية محليا، راجع علامات تبويب Azure CLI أو Python.
يحتوي الجدول التالي على القيم المحتمَلة لـprovisioning_state
:
قيمة |
الوصف |
Creating |
يتم إنشاء المورد. |
Updating |
يتم تحديث المورد. |
Deleting |
يتم حذف المورد. |
Succeeded |
نجحت عملية الإنشاء أو التحديث. |
Failed |
فشلت عملية الإنشاء أو التحديث أو الحذف. |
قم باستدعاء نقطة النهاية المحلية لتسجيل البيانات باستخدام النموذج الخاص بك
استدعاء نقطة النهاية لتسجيل النموذج باستخدام invoke
الأمر وتمرير معلمات الاستعلام المخزنة في ملف JSON:
az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
إذا كنت تريد استخدام عميل REST (مثل curl)، يجب أن يكون لديك عنوان URI للتسجيل. للحصول على عنوان URI للتسجيل، قم بتشغيل az ml online-endpoint show --local -n $ENDPOINT_NAME
. في البيانات التي تم إرجاعها، ابحث عن السمة scoring_uri
.
استدعاء نقطة النهاية لتسجيل النموذج باستخدام invoke
الأمر وتمرير معلمات الاستعلام المخزنة في ملف JSON.
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
request_file="../model-1/sample-request.json",
local=True,
)
إذا كنت تريد استخدام عميل REST (مثل curl)، يجب أن يكون لديك عنوان URI للتسجيل. للحصول على URI لتسجيل النقاط، قم بتشغيل التعليمات البرمجية التالية. في البيانات التي تم إرجاعها، ابحث عن السمة scoring_uri
.
endpoint = ml_client.online_endpoints.get(endpoint_name, local=True)
scoring_uri = endpoint.scoring_uri
لا يدعم الاستوديو نقاط النهاية المحلية. للحصول على خطوات لاختبار نقطة النهاية محليا، راجع علامات تبويب Azure CLI أو Python.
لا يدعم القالب نقاط النهاية المحلية. للحصول على خطوات لاختبار نقطة النهاية محليا، راجع علامات تبويب Azure CLI أو Python.
راجع سجلات الإخراج من عملية الاستدعاء
في مثال ملف Score.py، يسجّل الأسلوب run()
بعض الإخراج إلى وحدة التحكم.
يمكنك عرض هذا الإخراج باستخدام get-logs
الأمر :
az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME
يمكنك عرض هذا الإخراج باستخدام get_logs
الأسلوب :
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, local=True, lines=50
)
لا يدعم الاستوديو نقاط النهاية المحلية. للحصول على خطوات لاختبار نقطة النهاية محليا، راجع علامات تبويب Azure CLI أو Python.
لا يدعم القالب نقاط النهاية المحلية. للحصول على خطوات لاختبار نقطة النهاية محليا، راجع علامات تبويب Azure CLI أو Python.
قم بتوزيع نقطة النهاية عبر الإنترنت على Azure
بعد ذلك، قم بتوزيع نقطة النهاية عبر الإنترنت إلى Azure. كأفضل ممارسة للإنتاج، نوصي بتسجيل النموذج والبيئة التي تستخدمها في النشر الخاص بك.
تسجيل النموذج والبيئة
نوصي بتسجيل النموذج والبيئة قبل النشر إلى Azure بحيث يمكنك تحديد الأسماء والإصدارات المسجلة أثناء النشر. بعد تسجيل أصولك، يمكنك إعادة استخدامها دون الحاجة إلى تحميلها في كل مرة تقوم فيها بإنشاء عمليات نشر. تزيد هذه الممارسة من إمكانية إعادة الإنتاج وقابلية التتبع.
على عكس التوزيع إلى Azure، لا يدعم التوزيع المحلي استخدام النماذج والبيئات المسجلة. بدلا من ذلك، يستخدم النشر المحلي ملفات النموذج المحلي ويستخدم بيئات مع الملفات المحلية فقط.
للتوزيع إلى Azure، يمكنك استخدام الأصول المحلية أو المسجلة (النماذج والبيئات). في هذا القسم من المقالة، يستخدم النشر إلى Azure الأصول المسجلة، ولكن لديك خيار استخدام الأصول المحلية بدلا من ذلك. للحصول على مثال لتكوين توزيع يقوم بتحميل الملفات المحلية لاستخدامها في النشر المحلي، راجع تكوين عملية نشر.
لتسجيل النموذج والبيئة، استخدم النموذج model: azureml:my-model:1
أو environment: azureml:my-env:1
.
للتسجيل، يمكنك استخراج تعريفات YAML من model
و environment
إلى ملفات YAML منفصلة في نقاط النهاية/عبر الإنترنت/المدارة/عينة المجلد، واستخدام الأوامر az ml model create
و az ml environment create
. لمعرفة المزيد بشأن هذه الأوامر، قم بتشغيل az ml model create -h
وaz ml environment create -h
.
إنشاء تعريف YAML للنموذج. قم بتسمية الملف model.yml:
$schema: https://azuremlschemas.azureedge.net/latest/model.schema.json
name: my-model
path: ../../model-1/model/
تسجيل النموذج:
az ml model create -n my-model -v 1 -f endpoints/online/managed/sample/model.yml
إنشاء تعريف YAML للبيئة. قم بتسمية الملف environment.yml:
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: my-env
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
conda_file: ../../model-1/environment/conda.yaml
تسجيل البيئة:
az ml environment create -n my-env -v 1 -f endpoints/online/managed/sample/environment.yml
لمزيد من المعلومات حول كيفية تسجيل النموذج الخاص بك كأصل، راجع تسجيل نموذج باستخدام Azure CLI أو Python SDK. لمزيد من المعلومات حول إنشاء بيئة، راجع إنشاء بيئة مخصصة.
تسجيل نموذج:
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes
file_model = Model(
path="../model-1/model/",
type=AssetTypes.CUSTOM_MODEL,
name="my-model",
description="Model created from local file.",
)
ml_client.models.create_or_update(file_model)
تسجيل البيئة:
from azure.ai.ml.entities import Environment
env_docker_conda = Environment(
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
conda_file="../model-1/environment/conda.yaml",
name="my-env",
description="Environment created from a Docker image plus Conda environment.",
)
ml_client.environments.create_or_update(env_docker_conda)
لمعرفة كيفية تسجيل النموذج الخاص بك كأصل بحيث يمكنك تحديد اسمه المسجل وإصداره أثناء النشر، راجع تسجيل نموذج باستخدام Azure CLI أو Python SDK.
لمزيد من المعلومات حول إنشاء بيئة، راجع إنشاء بيئة مخصصة.
تسجيل النموذج
تسجيل النموذج هو كيان منطقي في مساحة العمل يمكن أن يحتوي على ملف نموذج واحد أو دليل لملفات متعددة. كأفضل ممارسة للإنتاج، قم بتسجيل النموذج والبيئة. قبل إنشاء نقطة النهاية والنشر في هذه المقالة، قم بتسجيل مجلد النموذج الذي يحتوي على النموذج.
لتسجيل نموذج المثال، اتبع الخطوات التالية:
انتقل إلى Azure التعلم الآلي studio.
في الجزء الأيمن، حدد صفحة Models .
حدد تسجيل، ثم اختر من الملفات المحلية.
حدد نوع غير محدد لنوع النموذج.
حدد استعراض، واختر استعراض المجلد.
حدد المجلد \azureml-examples\cli\endpoints\online\model-1\model من النسخة المحلية من المستودع الذي قمت بنسخه أو تنزيله مسبقا. عند مطالبتك، حدد تحميل وانتظر حتى ينتهي التحميل.
حدد التالي.
أدخل اسما مألوفا للنموذج. تفترض الخطوات الواردة في هذه المقالة أن النموذج يسمى model-1
.
حدد Next، ثم حدد Register لإنهاء التسجيل.
لمزيد من المعلومات حول كيفية العمل مع النماذج المسجلة، راجع العمل مع النماذج المسجلة.
إنشاء البيئة وتسجيلها
في الجزء الأيمن، حدد صفحة البيئات .
حدد علامة التبويب بيئات مخصصة ، ثم اختر إنشاء.
في صفحة الإعدادات ، أدخل اسما، مثل my-env للبيئة.
بالنسبة إلى Select environment source، اختر Use existing docker image with optional conda source.
حدد التالي للانتقال إلى صفحة تخصيص .
انسخ محتويات ملف \azureml-examples\cli\endpoints\online\model-1\environment\conda.yaml من المستودع الذي قمت بنسخه أو تنزيله مسبقا.
الصق المحتويات في مربع النص.
حدد التالي حتى تصل إلى صفحة إنشاء ، ثم حدد إنشاء.
لمزيد من المعلومات حول كيفية إنشاء بيئة في الاستوديو، راجع إنشاء بيئة.
لتسجيل النموذج باستخدام قالب، يجب أولا تحميل ملف النموذج إلى Blob Storage. يستخدم az storage blob upload-batch
المثال التالي الأمر لتحميل ملف إلى التخزين الافتراضي لمساحة العمل الخاصة بك:
az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/model -s cli/endpoints/online/model-1/model --account-name $AZURE_STORAGE_ACCOUNT
بعد تحميل الملف، استخدم القالب لإنشاء تسجيل نموذج. في المثال التالي، تحتوي المعلمة modelUri
على المسار إلى النموذج:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/model-version.json \
--parameters \
workspaceName=$WORKSPACE \
modelAssetName="sklearn" \
modelUri="azureml://subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/workspaces/$WORKSPACE/datastores/$AZUREML_DEFAULT_DATASTORE/paths/model/sklearn_regression_model.pkl"
جزء من البيئة هو ملف conda الذي يحدد تبعيات النموذج المطلوبة لاستضافة النموذج. يوضح المثال التالي كيفية قراءة محتويات ملف conda في متغيرات البيئة:
CONDA_FILE=$(cat cli/endpoints/online/model-1/environment/conda.yaml)
يوضح المثال التالي كيفية استخدام القالب لتسجيل البيئة. يتم تمرير محتويات ملف conda من الخطوة السابقة إلى القالب باستخدام المعلمة condaFile
:
ENV_VERSION=$RANDOM
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/environment-version.json \
--parameters \
workspaceName=$WORKSPACE \
environmentAssetName=sklearn-env \
environmentAssetVersion=$ENV_VERSION \
dockerImage=mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:20210727.v1 \
condaFile="$CONDA_FILE"
هام
عند تحديد بيئة مخصصة للتوزيع، تأكد من تضمين الحزمة azureml-inference-server-http
في ملف conda. هذه الحزمة ضرورية لخادم الاستدلال للعمل بشكل صحيح. إذا لم تكن على دراية بكيفية إنشاء البيئة المخصصة الخاصة بك، فاستخدم إحدى بيئاتنا المنسقة مثل minimal-py-inference
(للنماذج المخصصة التي لا تستخدم mlflow
) أو mlflow-py-inference
(للنماذج التي تستخدم mlflow
). يمكنك العثور على هذه البيئات المنسقة في علامة تبويب البيئات لمثيل Azure Machine Learning studio.
يستخدم تكوين النشر النموذج المسجل الذي تريد نشره والبيئة المسجلة.
استخدم الأصول المسجلة (النموذج والبيئة) في تعريف التوزيع الخاص بك. تعرض القصاصة البرمجية التالية نقاط النهاية/عبر الإنترنت/المدارة/عينة/blue-deployment-with-registered-assets.yml الملف، مع جميع المدخلات المطلوبة لتكوين التوزيع:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model: azureml:my-model:1
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment: azureml:my-env:1
instance_type: Standard_DS3_v2
instance_count: 1
لتكوين توزيع، استخدم النموذج والبيئة المسجلين:
model = "azureml:my-model:1"
env = "azureml:my-env:1"
blue_deployment_with_registered_assets = ManagedOnlineDeployment(
name="blue",
endpoint_name=endpoint_name,
model=model,
environment=env,
code_configuration=CodeConfiguration(
code="../model-1/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS3_v2",
instance_count=1,
)
عند النشر من الاستوديو، يمكنك إنشاء نقطة نهاية ونشر لإضافته إليها. في ذلك الوقت، تتم مطالبتك بإدخال أسماء نقطة النهاية والنشر.
استخدام أنواع وصور مثيلات وحدة المعالجة المركزية وGPU المختلفة
يمكنك تحديد أنواع مثيل وحدة المعالجة المركزية أو وحدة معالجة الرسومات والصور في تعريف التوزيع لكل من النشر المحلي والنشر إلى Azure.
استخدم تعريف النشر في ملف blue-deployment-with-registered-assets.yml مثيل نوع Standard_DS3_v2
للأغراض العامة وصورة mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
Docker غير GPU . لحساب GPU، اختر إصدار نوع حساب GPU وصورة GPU Docker.
للحصول على أنواع مثيلات الأغراض العامة وGPU المدعومة، راجع قائمة SKU لنقاط النهاية المدارة عبر الإنترنت. للحصول على قائمة بالصور الأساسية لوحدة المعالجة المركزية للتعلم الآلي من Azure ووحدة معالجة الرسومات الأساسية، راجع صور قاعدة التعلم الآلي في Azure.
يمكنك تحديد أنواع مثيل وحدة المعالجة المركزية أو وحدة معالجة الرسومات والصور في تكوين النشر لكل من النشر المحلي والنشر إلى Azure.
في وقت سابق، قمت بتكوين توزيع يستخدم مثيل نوع Standard_DS3_v2
للأغراض العامة وصورة mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
Docker غير GPU . لحساب GPU، اختر إصدار نوع حساب GPU وصورة GPU Docker.
للحصول على أنواع مثيلات الأغراض العامة وGPU المدعومة، راجع قائمة SKU لنقاط النهاية المدارة عبر الإنترنت. للحصول على قائمة بالصور الأساسية لوحدة المعالجة المركزية للتعلم الآلي من Azure ووحدة معالجة الرسومات الأساسية، راجع صور قاعدة التعلم الآلي في Azure.
يحدد التسجيل السابق للبيئة صورة mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04
Docker غير GPU عن طريق تمرير القيمة إلى قالب environment-version.json باستخدام المعلمة dockerImage
. لحساب GPU، قم بتوفير قيمة لصورة GPU Docker إلى القالب (استخدم dockerImage
المعلمة) وقم بتوفير إصدار نوع حساب GPU إلى القالب online-endpoint-deployment.json
(استخدم المعلمة skuName
).
للحصول على أنواع مثيلات الأغراض العامة وGPU المدعومة، راجع قائمة SKU لنقاط النهاية المدارة عبر الإنترنت. للحصول على قائمة بالصور الأساسية لوحدة المعالجة المركزية للتعلم الآلي من Azure ووحدة معالجة الرسومات الأساسية، راجع صور قاعدة التعلم الآلي في Azure.
بعد ذلك، قم بتوزيع نقطة النهاية عبر الإنترنت إلى Azure.
نشر في Azure
إنشاء نقطة النهاية في سحابة Azure:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
إنشاء النشر المسمى blue
ضمن نقطة النهاية:
az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml --all-traffic
قد يستغرق إنشاء النشر ما يصل إلى 15 دقيقة، اعتمادا على ما إذا كان يتم إنشاء البيئة أو الصورة الأساسية للمرة الأولى. تتم معالجة عمليات النشر اللاحقة التي تستخدم نفس البيئة بشكل أسرع.
إذا كنت تفضل عدم حظر وحدة تحكم CLI، يمكنك إضافة العلامة --no-wait
إلى الأمر . ومع ذلك، يوقف هذا الخيار العرض التفاعلي لحالة التوزيع.
--all-traffic
تخصص العلامة في التعليمات البرمجية az ml online-deployment create
المستخدمة لإنشاء النشر نسبة 100٪ من نسبة استخدام الشبكة لنقطة النهاية إلى النشر الأزرق الذي تم إنشاؤه حديثا. يعد استخدام هذه العلامة مفيدا لأغراض التطوير والاختبار، ولكن للإنتاج، قد تحتاج إلى توجيه نسبة استخدام الشبكة إلى النشر الجديد من خلال أمر صريح. على سبيل المثال، استخدم az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"
.
إنشاء نقطة النهاية:
باستخدام المعلمة endpoint
التي قمت بتعريفها مسبقا والمعلمة MLClient
التي قمت بإنشائها سابقا، يمكنك الآن إنشاء نقطة النهاية في مساحة العمل. يبدأ هذا الأمر إنشاء نقطة النهاية ويعيد استجابة تأكيد أثناء استمرار إنشاء نقطة النهاية.
ml_client.online_endpoints.begin_create_or_update(endpoint)
إنشاء النشر:
باستخدام المعلمة blue_deployment_with_registered_assets
التي قمت بتعريفها مسبقا والمعلمة MLClient
التي قمت بإنشائها سابقا، يمكنك الآن إنشاء النشر في مساحة العمل. يبدأ هذا الأمر في إنشاء النشر ويعيد استجابة تأكيد أثناء استمرار إنشاء النشر.
ml_client.online_deployments.begin_create_or_update(blue_deployment_with_registered_assets)
إذا كنت تفضل عدم حظر وحدة تحكم Python، يمكنك إضافة العلامة no_wait=True
إلى المعلمات. ومع ذلك، يوقف هذا الخيار العرض التفاعلي لحالة التوزيع.
# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.online_endpoints.begin_create_or_update(endpoint)
إنشاء نقطة نهاية ونشر مدارة عبر الإنترنت
استخدم الاستوديو لإنشاء نقطة نهاية عبر الإنترنت مُدارة مباشرةً في متصفحك. عندما تقوم بإنشاء نقطة نهاية عبر الإنترنت مُدارة في الاستوديو، يجب عليك تحديد توزيع أولي. لا يمكنك إنشاء نقطة نهاية فارغة مُدارة عبر الإنترنت.
إحدى الطرق لإنشاء نقطة نهاية مدارة عبر الإنترنت في الاستوديو هي من صفحة Models . يوفر هذا الأسلوب أيضا طريقة سهلة لإضافة نموذج إلى نشر موجود عبر الإنترنت مدار. لنشر النموذج المسمى model-1
الذي قمت بتسجيله مسبقا في قسم تسجيل النموذج والبيئة :
انتقل إلى Azure التعلم الآلي studio.
في الجزء الأيمن، حدد صفحة Models .
حدد النموذج المسمى model-1.
حدد Deploy>Real-time endpoint.
يفتح هذا الإجراء نافذة حيث يمكنك تحديد تفاصيل حول نقطة النهاية.
أدخل اسم نقطة نهاية فريدا في منطقة Azure. لمزيد من المعلومات حول قواعد التسمية، راجع حدود نقطة النهاية.
الاحتفاظ بالتحديد الافتراضي: مدار لنوع الحساب.
احتفظ بالتحديد الافتراضي: المصادقة المستندة إلى المفتاح لنوع المصادقة. لمزيد من المعلومات حول المصادقة، راجع مصادقة العملاء لنقاط النهاية عبر الإنترنت.
حدد التالي حتى تصل إلى صفحة النشر . قم بتبديل تشخيصات Application Insights إلى Enabled بحيث يمكنك عرض الرسوم البيانية لأنشطة نقطة النهاية في الاستوديو لاحقا وتحليل المقاييس والسجلات باستخدام Application Insights.
حدد التالي للانتقال إلى صفحة التعليمات البرمجية + البيئة . حدد الخيارات التالية:
-
حدد برنامج نصي لتسجيل النقاط للاستدلال: استعرض وحدد ملف \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py من المستودع الذي نسخته أو قمت بتنزيله سابقا.
-
حدد قسم البيئة : حدد بيئات مخصصة ثم حدد البيئة my-env:1 التي قمت بإنشائها سابقا.
حدد التالي، واقبل الإعدادات الافتراضية حتى تتم مطالبتك بإنشاء النشر.
راجع إعدادات النشر وحدد إنشاء.
بدلا من ذلك، يمكنك إنشاء نقطة نهاية مدارة عبر الإنترنت من صفحة نقاط النهاية في الاستوديو.
انتقل إلى Azure التعلم الآلي studio.
في الجزء الأيمن، حدد صفحة نقاط النهاية .
حدد + Create.
يفتح هذا الإجراء نافذة لك لتحديد النموذج الخاص بك وتحديد تفاصيل حول نقطة النهاية والنشر. أدخل إعدادات نقطة النهاية والنشر كما هو موضح سابقا، ثم حدد إنشاء لإنشاء النشر.
استخدم القالب لإنشاء نقطة نهاية عبر الإنترنت:
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/online-endpoint.json \
--parameters \
workspaceName=$WORKSPACE \
onlineEndpointName=$ENDPOINT_NAME \
identityType=SystemAssigned \
authMode=AMLToken \
location=$LOCATION
انشر النموذج إلى نقطة النهاية بعد إنشاء نقطة النهاية:
resourceScope="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices"
az deployment group create -g $RESOURCE_GROUP \
--template-file arm-templates/online-endpoint-deployment.json \
--parameters \
workspaceName=$WORKSPACE \
location=$LOCATION \
onlineEndpointName=$ENDPOINT_NAME \
onlineDeploymentName=blue \
codeId="$resourceScope/workspaces/$WORKSPACE/codes/score-sklearn/versions/1" \
scoringScript=score.py \
environmentId="$resourceScope/workspaces/$WORKSPACE/environments/sklearn-env/versions/$ENV_VERSION" \
model="$resourceScope/workspaces/$WORKSPACE/models/sklearn/versions/1" \
endpointComputeType=Managed \
skuName=Standard_F2s_v2 \
skuCapacity=1
لتصحيح الأخطاء في النشر، راجع استكشاف أخطاء عمليات نشر نقطة النهاية عبر الإنترنت وإصلاحها.
التحقق من حالة نقطة النهاية عبر الإنترنت
show
استخدم الأمر لعرض المعلومات في provisioning_state
لنقطة النهاية والنشر:
az ml online-endpoint show -n $ENDPOINT_NAME
سرد كافة نقاط النهاية في مساحة العمل بتنسيق جدول باستخدام list
الأمر :
az ml online-endpoint list --output table
تحقق من حالة نقطة النهاية لمعرفة ما إذا كان النموذج قد تم نشره دون خطأ:
ml_client.online_endpoints.get(name=endpoint_name)
سرد كافة نقاط النهاية في مساحة العمل بتنسيق جدول باستخدام list
الأسلوب :
for endpoint in ml_client.online_endpoints.list():
print(endpoint.name)
يقوم الأسلوب بإرجاع قائمة (مكرر) من الكيانات ManagedOnlineEndpoint
.
يمكنك الحصول على مزيد من المعلومات عن طريق تحديد المزيد من المعلمات. على سبيل المثال، إخراج قائمة نقاط النهاية مثل جدول:
print("Kind\tLocation\tName")
print("-------\t----------\t------------------------")
for endpoint in ml_client.online_endpoints.list():
print(f"{endpoint.kind}\t{endpoint.location}\t{endpoint.name}")
عرض نقاط النهاية المدارة عبر الإنترنت
يمكنك عرض جميع نقاط النهاية المدارة عبر الإنترنت على صفحة نقاط النهاية . انتقل إلى صفحة تفاصيل نقطة النهاية للعثور على معلومات هامة، مثل URI لنقطة النهاية والحالة وأدوات الاختبار ومراقبات النشاط وسجلات التوزيع ونموذج التعليمات البرمجية للاستهلاك.
في الجزء الأيمن، حدد Endpoints لمشاهدة قائمة بجميع نقاط النهاية في مساحة العمل.
(اختياري) إنشاء عامل تصفية على نوع الحساب لإظهار أنواع الحوسبة المدارة فقط.
حدد اسم نقطة نهاية لعرض صفحة تفاصيل نقطة النهاية.
تعد القوالب مفيدة لنشر الموارد، ولكن لا يمكنك استخدامها لسرد الموارد أو إظهارها أو استدعاؤها. استخدم Azure CLI أو Python SDK أو الاستوديو لتنفيذ هذه العمليات. تستخدم التعليمات البرمجية التالية Azure CLI.
show
استخدم الأمر لعرض المعلومات في المعلمة provisioning_state
لنقطة النهاية والنشر:
az ml online-endpoint show -n $ENDPOINT_NAME
سرد كافة نقاط النهاية في مساحة العمل بتنسيق جدول باستخدام list
الأمر :
az ml online-endpoint list --output table
التحقق من حالة النشر عبر الإنترنت
تحقق من السجلات لمعرفة ما إذا كان النموذج قد تم نشره دون خطأ.
لمشاهدة إخراج السجل من حاوية، استخدم أمر CLI التالي:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
بشكل افتراضي، يتم سحب السجلات من حاوية خادم الاستدلال. لمشاهدة السجلات من حاوية تهيئة التخزين، أضف العلامة --container storage-initializer
. لمزيد من المعلومات حول سجلات النشر، راجع الحصول على سجلات الحاوية.
يمكنك عرض إخراج السجل باستخدام get_logs
الأسلوب :
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50
)
بشكل افتراضي، يتم سحب السجلات من حاوية خادم الاستدلال. لمشاهدة السجلات من حاوية تهيئة التخزين، أضف container_type="storage-initializer"
الخيار . لمزيد من المعلومات حول سجلات النشر، راجع الحصول على سجلات الحاوية.
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50, container_type="storage-initializer"
)
لعرض إخراج السجل، حدد علامة التبويب Logs من صفحة نقطة النهاية. إذا كان لديك عمليات نشر متعددة في نقطة النهاية الخاصة بك، فاستخدم القائمة المنسدلة لتحديد التوزيع مع السجل الذي تريد رؤيته.
بشكل افتراضي، يتم سحب السجلات من خادم الاستدلال. لمشاهدة السجلات من حاوية تهيئة التخزين، استخدم Azure CLI أو Python SDK (راجع كل علامة تبويب للحصول على التفاصيل). توفر السجلات من حاوية تهيئة التخزين معلومات حول ما إذا كان قد تم تنزيل التعليمات البرمجية وبيانات النموذج بنجاح إلى الحاوية. لمزيد من المعلومات حول سجلات النشر، راجع الحصول على سجلات الحاوية.
تعد القوالب مفيدة لنشر الموارد، ولكن لا يمكنك استخدامها لسرد الموارد أو إظهارها أو استدعاؤها. استخدم Azure CLI أو Python SDK أو الاستوديو لتنفيذ هذه العمليات. تستخدم التعليمات البرمجية التالية Azure CLI.
لمشاهدة إخراج السجل من حاوية، استخدم أمر CLI التالي:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
بشكل افتراضي، يتم سحب السجلات من حاوية خادم الاستدلال. لمشاهدة السجلات من حاوية تهيئة التخزين، أضف العلامة --container storage-initializer
. لمزيد من المعلومات حول سجلات النشر، راجع الحصول على سجلات الحاوية.
قم باستدعاء نقطة النهاية لتسجيل البيانات باستخدام النموذج الخاص بك
استخدم إما invoke
الأمر أو عميل REST من اختيارك لاستدعاء نقطة النهاية وتسجيل بعض البيانات:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
احصل على المفتاح المستخدم للمصادقة على نقطة النهاية:
يمكنك التحكم في أساسيات أمان Microsoft Entra التي يمكنها الحصول على مفتاح المصادقة عن طريق تعيينها إلى دور مخصص يسمح و Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/action
Microsoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action
. لمزيد من المعلومات حول كيفية إدارة التخويل إلى مساحات العمل، راجع إدارة الوصول إلى مساحة عمل التعلم الآلي من Azure.
ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)
استخدم curl لتسجيل البيانات.
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json
لاحظ أنك تستخدم show
أوامر و get-credentials
للحصول على بيانات اعتماد المصادقة. لاحظ أيضا أنك تستخدم العلامة --query
لتصفية السمات المطلوبة فقط. لمعرفة المزيد حول العلامة --query
، راجع استعلام إخراج أمر Azure CLI.
لمشاهدة سجلات الاستدعاء، قم بتشغيل get-logs
مرة أخرى.
باستخدام المعلمة MLClient
التي قمت بإنشائها سابقا، يمكنك الحصول على مؤشر إلى نقطة النهاية. يمكنك بعد ذلك استدعاء نقطة النهاية باستخدام invoke
الأمر مع المعلمات التالية:
-
endpoint_name
: اسم نقطة النهاية.
-
request_file
: ملف مع بيانات الطلب.
-
deployment_name
: اسم النشر المحدد للاختبار في نقطة نهاية.
إرسال نموذج طلب باستخدام ملف JSON .
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
استخدم علامة التبويب Test في صفحة تفاصيل نقطة النهاية لاختبار التوزيع المدار عبر الإنترنت. أدخل نموذج الإدخال واعرض النتائج.
حدد علامة التبويب Test في صفحة تفاصيل نقطة النهاية.
استخدم القائمة المنسدلة لتحديد التوزيع الذي تريد اختباره.
أدخل إدخال العينة.
حدد اختبار.
تعد القوالب مفيدة لنشر الموارد، ولكن لا يمكنك استخدامها لسرد الموارد أو إظهارها أو استدعاؤها. استخدم Azure CLI أو Python SDK أو الاستوديو لتنفيذ هذه العمليات. تستخدم التعليمات البرمجية التالية Azure CLI.
استخدم إما invoke
الأمر أو عميل REST من اختيارك لاستدعاء نقطة النهاية وتسجيل بعض البيانات:
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file cli/endpoints/online/model-1/sample-request.json
(اختياري) تحديث التوزيع
إذا كنت تريد تحديث التعليمات البرمجية أو النموذج أو البيئة، فقم بتحديث ملف YAML. ثم قم بتشغيل az ml online-endpoint update
الأمر .
إذا قمت بتحديث عدد المثيلات (لتوسيع نطاق النشر الخاص بك) إلى جانب إعدادات النموذج الأخرى (مثل التعليمات البرمجية أو النموذج أو البيئة) في أمر واحد update
، يتم تنفيذ عملية التحجيم أولا. يتم تطبيق التحديثات الأخرى بعد ذلك. من الممارسات الجيدة تنفيذ هذه العمليات بشكل منفصل في بيئة إنتاج.
لفهم كيفية عمل update
:
افتح الملف online/model-1/onlinescoring/Score.py.
غيّر السطر الأخير من الوظيفة init()
: بعد logging.info("Init complete")
، أضف logging.info("Updated successfully")
.
حفظ الملف.
قم بإجراء هذا الأمر:
az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment-with-registered-assets.yml
التحديث باستخدام YAML تعريفي. أي أن التغييرات في YAML تنعكس في موارد Resource Manager الأساسية (نقاط النهاية والنشر). يسهل النهج التعريفي GitOps: تمر جميع التغييرات على نقاط النهاية وعمليات التوزيع (حتى instance_count
) عبر YAML.
يمكنك استخدام معلمات التحديث العامة، مثل المعلمة --set
، مع أمر CLI update
لتجاوز السمات في YAML أو لتعيين سمات معينة دون تمريرها في ملف YAML. يُعد استخدام --set
السمات المفردة ذا قيمة خاصة في سيناريوهات التطوير والاختبار. على سبيل المثال، لزيادة قيمة instance_count
التوزيع الأول، يمكنك استخدام --set instance_count=2
العلامة. ومع ذلك، نظراً لعدم تحديث YAML، فإن هذه التقنية لا تسهل GitOps.
تحديد ملف YAML ليس إلزاميا. على سبيل المثال، إذا كنت تريد اختبار إعدادات تزامن مختلفة لنشر معين، يمكنك تجربة شيء مثل az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4
. يحتفظ هذا الأسلوب بجميع التكوينات الموجودة ولكنه يقوم بتحديث المعلمات المحددة فقط.
نظرا لتعديل الدالة init()
التي يتم تشغيلها عند إنشاء نقطة النهاية أو تحديثها، تظهر الرسالة Updated successfully
في السجلات. استرجع السجلات عن طريق تشغيل:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
يعمل الأمر update
أيضاً مع عمليات التوزيع المحلية. استخدم نفس الأمر az ml online-deployment update
مع العلم --local
.
إذا كنت ترغب في تحديث التعليمات البرمجية أو النموذج أو البيئة، فقم بتحديث التكوين ثم قم بتشغيل MLClient
أسلوب لإنشاء online_deployments.begin_create_or_update
نشر أو تحديثه.
إذا قمت بتحديث عدد المثيلات (لتوسيع نطاق النشر الخاص بك) إلى جانب إعدادات النموذج الأخرى (مثل التعليمات البرمجية أو النموذج أو البيئة) بطريقة واحدة begin_create_or_update
، يتم تنفيذ عملية التحجيم أولا. ثم يتم تطبيق التحديثات الأخرى. من الممارسات الجيدة تنفيذ هذه العمليات بشكل منفصل في بيئة إنتاج.
لفهم كيفية عمل begin_create_or_update
:
افتح الملف online/model-1/onlinescoring/Score.py.
غيّر السطر الأخير من الوظيفة init()
: بعد logging.info("Init complete")
، أضف logging.info("Updated successfully")
.
حفظ الملف.
تشغيل الأسلوب :
ml_client.online_deployments.begin_create_or_update(blue_deployment_with_registered_assets)
نظرا لتعديل الدالة init()
التي يتم تشغيلها عند إنشاء نقطة النهاية أو تحديثها، تظهر الرسالة Updated successfully
في السجلات. استرجع السجلات عن طريق تشغيل:
ml_client.online_deployments.get_logs(
name="blue", endpoint_name=endpoint_name, lines=50
)
begin_create_or_update
يعمل الأسلوب أيضا مع عمليات التوزيع المحلية. استخدم نفس الأسلوب مع العلامة local=True
.
حاليا، يمكنك إجراء تحديثات لعدد مثيلات التوزيع فقط. استخدم الإرشادات التالية لتوسيع نطاق توزيع فردي لأعلى أو لأسفل عن طريق ضبط عدد المثيلات:
- افتح صفحة تفاصيل نقطة النهاية وابحث عن بطاقة النشر التي تريد تحديثها.
- حدد رمز التحرير (رمز القلم الرصاص) بجوار اسم النشر.
- تحديث عدد المثيلات المقترنة بالنشر. اختر بين نوع مقياس الاستخدام الافتراضي أو الهدفللنشر.
- إذا قمت بتحديد Default، يمكنك أيضا تحديد قيمة رقمية لعدد المثيلات.
- إذا قمت بتحديد الاستخدام الهدف، يمكنك تحديد القيم لاستخدامها للمعلمات عند التحجيم التلقائي للتوزيع.
- حدد تحديث لإنهاء تحديث عدد المثيلات للتوزيع.
لا يوجد حاليا خيار لتحديث النشر باستخدام قالب ARM.
ملاحظة
تحديث النشر في هذا القسم هو مثال على تحديث متجدد موضعي.
- بالنسبة لنقطة نهاية مدارة عبر الإنترنت، يتم تحديث النشر إلى التكوين الجديد مع 20% من العقد في كل مرة. أي إذا كان النشر يحتوي على 10 عقد، يتم تحديث عقدتين في كل مرة.
- بالنسبة لنقطة نهاية Kubernetes عبر الإنترنت، يقوم النظام بشكل متكرر بإنشاء مثيل نشر جديد مع التكوين الجديد وحذف النسخة القديمة.
- لاستخدام الإنتاج، ضع في اعتبارك النشر الأزرق والأخضر، والذي يوفر بديلا أكثر أمانا لتحديث خدمة ويب.
يقوم التحجيم التلقائي بتشغيل المقدار المناسب من الموارد للتعامل مع الحِمل على تطبيقك. تدعم نقاط النهاية المدارة عبر الإنترنت التحجيم التلقائي من خلال التكامل مع ميزة التحجيم التلقائي ل Azure Monitor. لتكوين التحجيم التلقائي، راجع التحجيم التلقائي لنقاط النهاية عبر الإنترنت.
(اختياري) مراقبة اتفاقية مستوى الخدمة (SLA) باستخدام Azure Monitor
لعرض المقاييس وتعيين التنبيهات استنادا إلى اتفاقية مستوى الخدمة الخاصة بك، اتبع الخطوات الموضحة في مراقبة نقاط النهاية عبر الإنترنت.
(اختياري) التكامل مع Log Analytics
get-logs
يوفر الأمر ل CLI أو get_logs
أسلوب SDK فقط المئات الأخيرة من أسطر السجلات من مثيل محدد تلقائيا. ومع ذلك، يوفر Log Analytics طريقة لتخزين السجلات وتحليلها بشكل دائم. لمزيد من المعلومات حول كيفية استخدام التسجيل، راجع استخدام السجلات.
احذف نقطة النهاية والتوزيع
استخدم الأمر التالي لحذف نقطة النهاية وجميع عمليات النشر الأساسية الخاصة بها:
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
استخدم الأمر التالي لحذف نقطة النهاية وجميع عمليات النشر الأساسية الخاصة بها:
ml_client.online_endpoints.begin_delete(name=endpoint_name)
إذا كنت لن تستخدم نقطة النهاية والنشر، فاحذفها. بحذف نقطة النهاية، يمكنك أيضا حذف جميع عمليات النشر الأساسية الخاصة بها.
- انتقل إلى Azure التعلم الآلي studio.
- في الجزء الأيمن، حدد صفحة نقاط النهاية .
- حدد نقطة نهاية.
- حدد حذف.
بدلا من ذلك، يمكنك حذف نقطة نهاية مدارة عبر الإنترنت مباشرة عن طريق تحديد أيقونة حذف في صفحة تفاصيل نقطة النهاية.
استخدم الأمر التالي لحذف نقطة النهاية وجميع عمليات النشر الأساسية الخاصة بها:
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
المحتوى ذو الصلة