نشر نموذج التعلم الآلي وتسجيله باستخدام نقطة نهاية عبر الإنترنت

ينطبق على:ملحق ML Azure CLI v2 (الحالي)Python SDK azure-ai-ml v2 (الحالي)

في هذه المقالة، ستتعلم نشر النموذج الخاص بك إلى نقطة نهاية عبر الإنترنت لاستخدامها في الاستدلال في الوقت الحقيقي. ستبدأ بنشر نموذج على جهازك المحلي لتصحيح أي أخطاء. بعد ذلك، ستقوم بنشر النموذج واختباره في Azure. ستتعلم أيضا عرض سجلات التوزيع ومراقبة اتفاقية مستوى الخدمة (SLA). بنهاية هذه المقالة، سيكون لديك نقطة نهاية HTTPS/REST قابلة للتطوير يمكنك استخدامها للاستدلال في الوقت الفعلي.

نقاط النهاية عبر الإنترنت هي نقاط نهاية تستخدم للاستدلال في الوقت الحقيقي. هناك نوعان من نقاط النهاية عبر الإنترنت: نقاط النهاية المدارة عبر الإنترنت ونقاط نهاية Kubernetes عبر الإنترنت. لمزيد من المعلومات حول نقاط النهاية والاختلافات بين نقاط النهاية المدارة عبر الإنترنت ونقاط نهاية Kubernetes عبر الإنترنت، راجع ما هي نقاط نهاية Azure التعلم الآلي؟.

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

يستخدم المثال الرئيسي في هذا المستند نقاط النهاية المُدارة عبر الإنترنت للتوزيع. لاستخدام Kubernetes بدلا من ذلك، راجع الملاحظات في هذا المستند المضمنة مع مناقشة نقطة النهاية المدارة عبر الإنترنت.

المتطلبات الأساسية

ينطبق على:ملحق CLI للتعلم الآلي من Microsoft Azure v2 (الحالي)

قبل اتباع الخطوات الواردة في هذه المقالة، تأكد من توفر المتطلبات الأساسية التالية لديك:

  • يتم استخدام عناصر التحكم في الوصول المستندة إلى الدور في (Azure RBAC) لمنح الوصول إلى العمليات في التعلم الآلي من Microsoft Azure. لتنفيذ الخطوات الواردة في هذه المقالة، يجب تعيين دور المالك أو المساهم لحساب المستخدم لمساحة عمل التعلم الآلي من Microsoft Azure، أو دور مخصص يسمح Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. إذا كنت تستخدم studio لإنشاء/إدارة نقاط النهاية/عمليات النشر عبر الإنترنت، فستحتاج إلى إذن إضافي "Microsoft.Resources/deployments/write" من مالك مجموعة الموارد. لمزيدٍ من المعلومات، راجع إدارة الوصول إلى مساحة عمل Azure Machine Learning.

  • (اختياري) للتوزيع محلياً، يجب عليك تثبيت Docker Engine على الكمبيوتر المحلي. نوصي بشدة باستخدام هذا الخيار، حتى يسهل تصحيح الأخطاء.

تخصيص حصة الجهاز الظاهري للتوزيع

بالنسبة لنقاط النهاية المدارة عبر الإنترنت، تحتفظ Azure التعلم الآلي بنسبة 20٪ من موارد الحوسبة لإجراء ترقيات على بعض وحدات SKU للجهاز الظاهري. إذا طلبت عددا معينا من المثيلات لوحدات SKU للأجهزة الظاهرية هذه في عملية نشر، فيجب أن يكون لديك حصة نسبية متاحة ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU لتجنب حدوث خطأ. على سبيل المثال، إذا طلبت 10 مثيلات لجهاز ظاهري Standard_DS3_v2 (يأتي مع 4 ذاكرات أساسية) في عملية نشر، فيجب أن يكون لديك حصة نسبية ل 48 نواة (12 instances * 4 cores) متوفرة. هذه الحصة الإضافية محجوزة للعمليات المترددة في النظام مثل ترقية نظام التشغيل واسترداد الجهاز الظاهري وما إلى ذلك، ولن تتحمل تكلفة ما لم يتم تشغيل هذه العملية. لعرض زيادة الحصة النسبية للاستخدام والطلب، راجع عرض الاستخدام والحصص النسبية في مدخل Microsoft Azure. لعرض تكلفة تشغيل نقاط النهاية المدارة عبر الإنترنت، راجع عرض تكلفة نقطة النهاية المدارة عبر الإنترنت. هناك بعض وحدات SKU للجهاز الظاهري التي يتم إعفاءها من حجز الحصة الإضافية. لعرض القائمة الكاملة، راجع قائمة SKU لنقاط النهاية المدارة عبر الإنترنت.

يوفر Azure التعلم الآلي مجموعة حصص مشتركة يمكن من خلالها لجميع المستخدمين الوصول إلى الحصة النسبية لإجراء الاختبار لفترة محدودة. عند استخدام الاستوديو لنشر نماذج Llama-2 وPhi وNemotron و Mistral وDely وDci-DeciLM من كتالوج النموذج إلى نقطة نهاية مدارة عبر الإنترنت، يسمح لك Azure التعلم الآلي بالوصول إلى هذه الحصة المشتركة لفترة قصيرة.

لمزيد من المعلومات حول كيفية استخدام الحصة النسبية المشتركة لنشر نقطة النهاية عبر الإنترنت، راجع كيفية نشر نماذج الأساس باستخدام الاستوديو.

إعداد النظام الخاص بك

تعيين متغيرات البيئة

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

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

استنساخ مستودع الأمثلة

لمتابعة هذه المقالة، قم أولا باستنساخ مستودع الأمثلة (azureml-examples). ثم قم بتشغيل التعليمات البرمجية التالية للانتقال إلى دليل المستودع cli/ :

git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli

تلميح

استخدم --depth 1 لنسخ آخر تثبيت فقط في المستودع، ما يقلل الوقت اللازم لإكمال العملية.

الأوامر الموجودة في هذا البرنامج التعليمي موجودة في الملفات deploy-local-endpoint.sh وفي deploy-managed-online-endpoint.shcli الدليل، وملفات تكوين YAML موجودة في endpoints/online/managed/sample/ الدليل الفرعي.

إشعار

ملفات تكوين YAML لنقاط نهاية Kubernetes عبر الإنترنت موجودة في endpoints/online/kubernetes/ الدليل الفرعي.

تعريف نقطة النهاية

لتعريف نقطة نهاية، تحتاج إلى تحديد:

  • اسم نقطة النهاية: اسم نقطة النهاية. يجب أن تكون فريدة في منطقة Azure. لمزيد من المعلومات حول قواعد التسمية، راجع حدود نقطة النهاية.
  • وضع المصادقة: أسلوب المصادقة لنقطة النهاية. اختر بين المصادقة المستندة إلى المفتاح والمصادقة المستندة إلى الرمز المميز ل Azure التعلم الآلي. لا تنتهي صلاحية المفتاح، ولكن تنتهي صلاحية الرمز المميز. لمزيد من المعلومات حول المصادقة، راجع المصادقة إلى نقطة نهاية عبر الإنترنت.
  • اختياريا، يمكنك إضافة وصف وعلامات إلى نقطة النهاية.

تعيين اسم نقطة نهاية

لتعيين اسم نقطة النهاية، قم بتشغيل الأمر التالي (استبدل YOUR_ENDPOINT_NAME باسم فريد).

بالنسبة إلى Linux، قم بتشغيل هذا الأمر:

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 لنقطة النهاية عبر الإنترنت. للحصول على معلومات حول الحدود المتعلقة بنقاط النهاية المدارة، راجع حدود نقاط النهاية عبر الإنترنت.

المفتاح ‏‏الوصف
$schema (اختياري) مخطط YAML. لمشاهدة جميع الخيارات المتوفرة في ملف YAML، يمكنك عرض المخطط في قصاصة التعليمات البرمجية السابقة في مستعرض.
name اسم نقطة النهاية.
auth_mode استخدام key للمصادقة المستندة إلى المفتاح. استخدم aml_token للمصادقة المستندة إلى الرمز المميز التعلم الآلي من Microsoft Azure. للحصول على أحدث رمز مميز، استخدم az ml online-endpoint get-credentials الأمر .

تعريف التوزيع

يشكل التوزيع مجموعة من الموارد اللازمة لاستضافة النموذج الذي يقوم بالاستدلال الفعلي. لنشر نموذج، يجب أن يكون لديك:

  • ملفات النموذج (أو اسم النموذج الذي تم تسجيله بالفعل في مساحة العمل وإصداره). في هذا المثال، لدينا نموذج scikit-Learn الذي يقوم بالتراجع.
  • برنامج نصي لتسجيل النقاط، أي التعليمات البرمجية التي تنفذ النموذج على طلب إدخال معين. يتلقى البرنامج النصي لتسجيل النقاط البيانات المرسلة إلى خدمة ويب منشورة ويمررها إلى النموذج. ثم ينفذ البرنامج النصي النموذج ويعيد استجابته إلى العميل. البرنامج النصي لتسجيل النقاط خاص بالنموذج الخاص بك ويجب أن يفهم البيانات التي يتوقعها النموذج كإدخل وإرجاع كإخراج. في هذا المثال، لدينا ملف score.py .
  • بيئة يتم فيها تشغيل النموذج الخاص بك. يمكن أن تكون البيئة صورة Docker مع تبعيات Conda أو Dockerfile.
  • الإعدادات لتحديد نوع المثيل وسعة التحجيم.

يصف الجدول التالي السمات الرئيسية للتوزيع:

السمة الوصف
الاسم اسم التوزيع.
اسم نقطة النهاية اسم نقطة النهاية لإنشاء التوزيع ضمن.
النموذج النموذج الذي يجب استخدامه للتوزيع. يمكن أن تكون هذه القيمة إما مرجعًا لنموذج موجود بإصدار في مساحة العمل أو لمواصفات نموذج مدمج.
مسار التعليمات البرمجية المسار إلى الدليل على بيئة التطوير المحلية التي تحتوي على جميع التعليمات البرمجية لمصدر Python لتسجيل النموذج. يمكنك استخدام الدلائل والحزم المتداخلة.
برنامج نصي لتسجيل النقاط المسار النسبي لملف تسجيل النقاط في دليل التعليمات البرمجية المصدر. يجب أن تحتوي التعليمة البرمجية لـPython هذه على دالة init() ودالة run() . init() سيتم استدعاء الدالة بعد إنشاء النموذج أو تحديثه (يمكنك استخدامه لتخزين النموذج مؤقتا في الذاكرة، على سبيل المثال). يتم استدعاء الدالة run() في كل استدعاء لنقطة النهاية للقيام بتسجيل النقاط والتنبؤ الفعليين.
البيئة البيئة لاستضافة النموذج والرمز. يمكن أن تكون هذه القيمة إما مرجعًا لبيئة موجودة بإصدار في مساحة العمل أو مواصفات بيئة مدمجة.
نوع المثيل حجم الجهاز الظاهري المراد استخدامه للتوزيع. للحصول على قائمة بالأحجام المدعومة، راجع قائمة SKU لنقاط النهاية المدارة عبر الإنترنت.
عدد المثيلات عدد المثيلات التي يجب استخدامها للتوزيع. قم بإسناد القيمة إلى حِمل العمل الذي تتوقعه. للحصول على قابلية وصول عالية، نوصي بتعيين القيمة إلى على الأقل 3. نحتفظ بنسبة 20٪ إضافية لإجراء الترقيات. لمزيد من المعلومات، راجع تخصيص حصة الجهاز الظاهري للنشر.

تحذير

  • يمكن الرجوع إلى صورة النموذج والحاوية (كما هو محدد في البيئة) مرة أخرى في أي وقت من خلال النشر عندما تمر المثيلات خلف التوزيع بتصحيحات الأمان و/أو عمليات الاسترداد الأخرى. إذا استخدمت نموذجا مسجلا أو صورة حاوية في Azure Container Registry للنشر وأزلت النموذج أو صورة الحاوية، يمكن أن تفشل عمليات التوزيع التي تعتمد على هذه الأصول عند حدوث إعادة التعيين. إذا قمت بإزالة النموذج أو صورة الحاوية، فتأكد من إعادة إنشاء عمليات النشر التابعة أو تحديثها بنموذج بديل أو صورة حاوية.
  • يمكن أن يكون سجل الحاوية الذي تشير إليه البيئة خاصا فقط إذا كانت هوية نقطة النهاية لديها الإذن للوصول إليها عبر مصادقة Microsoft Entra وAzure RBAC. لنفس السبب، سجلات Docker الخاصة بخلاف Azure Container Registry غير مدعومة.

تكوين عملية نشر

تعرض القصاصة البرمجية التالية نقاط النهاية/عبر الإنترنت/المدارة/عينة/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-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1

إشعار

في ملف blue-deployment.yml ، حددنا سمات النشر التالية:

  • model - في هذا المثال، نحدد خصائص النموذج المضمنة pathباستخدام . يتم تحميل ملفات النموذج وتسجيلها تلقائياً باسم تم إنشاؤه تلقائياً.
  • environment - في هذا المثال، لدينا تعريفات مضمنة تتضمن path. سنستخدم environment.docker.image للصورة. سيتم تثبيت التبعيات conda_file أعلى الصورة.

أثناء التوزيع، يتم تحميل الملفات المحلية مثل مصدر Python لنموذج التسجيل من بيئة التطوير.

لمزيدٍ من المعلومات بشأن مخطط YAML، راجع مرجع YAML لنقطة النهاية عبر الإنترنت.

إشعار

لاستخدام Kubernetes بدلاً من نقاط النهاية المُدارة كهدف حساب:

  1. أنشئ مجموعة Kubernetes وأرفقها كهدف حسابي بمساحة عمل Azure Machine Learning باستخدام Azure Machine Learning studio.
  2. استخدم نقطة نهاية YAML لاستهداف Kubernetes بدلاً من نقطة النهاية المُدارة YAML. ستحتاج إلى تحرير YAML لتغيير قيمة target إلى اسم هدف الحساب المسجل. يمكنك استخدام publish.yaml هذا الذي يحتوي على خصائص إضافية قابلة للتطبيق على توزيع Kubernetes.

يمكن استخدام جميع الأوامر المستخدمة في هذه المقالة (باستثناء مراقبة اتفاقية مستوى الخدمة الاختيارية وتكامل Azure Log Analytics) إما مع نقاط النهاية المُدارة أو مع نقاط نهاية Kubernetes.

تسجيل النموذج والبيئة بشكل منفصل

في هذا المثال، نحدد path المضمّن (مكان تحميل الملفات منه). يقوم CLI تلقائياً بتحميل الملفات وتسجيل النموذج والبيئة. كأفضل ممارسة للإنتاج، يجب عليك تسجيل النموذج والبيئة وتحديد الاسم والإصدار المسجلين بشكل منفصل في YAML. استخدم النموذج 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.

لمزيد من المعلومات حول تسجيل النموذج الخاص بك كأصل، راجع تسجيل نموذجك كأصل في التعلم الآلي باستخدام CLI. لمزيد من المعلومات حول إنشاء بيئة، راجع إدارة بيئات Azure التعلم الآلي باستخدام CLI وSDK (v2).

استخدام أنواع وصور مثيلات وحدة المعالجة المركزية وGPU المختلفة

يستخدم التعريف السابق في ملف blue-deployment.yml مثيل نوع Standard_DS3_v2 للأغراض العامة وصورة mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latestDocker غير GPU . لحساب GPU، اختر نوع حساب وحدة معالجة الرسومات SKU وصورة GPU Docker.

للحصول على أنواع مثيلات الأغراض العامة وGPU المدعومة، راجع نقاط النهاية المُدارة عبر الإنترنت المدعومة من وحدات SKU للجهاز الظاهري. للحصول على قائمة بالصور الأساسية لوحدة المعالجة المركزية للتعلم الآلي من Azure ووحدة معالجة الرسومات الأساسية، راجع صور قاعدة التعلم الآلي في Azure.

إشعار

لاستخدام Kubernetes بدلا من نقاط النهاية المدارة كهدف حساب، راجع مقدمة إلى هدف حساب Kubernetes.

تحديد مسار النموذج فيما يتعلق AZUREML_MODEL_DIR

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

للتوضيح، نشير إلى بنية المجلد المحلي التالية لأول حالتين حيث تقوم بنشر نموذج واحد أو نشر نماذج متعددة مخزنة محليا:

لقطة شاشة تعرض بنية مجلد تحتوي على نماذج متعددة.

استخدام نموذج محلي واحد في عملية نشر

لاستخدام نموذج واحد لديك على جهازك المحلي في عملية نشر، حدد path إلى model في YAML النشر الخاص بك. فيما يلي مثال على توزيع YAML مع المسار /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: 
  path: /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

بعد إنشاء النشر الخاص بك، سيشير متغير AZUREML_MODEL_DIR البيئة إلى موقع التخزين داخل Azure حيث يتم تخزين النموذج الخاص بك. على سبيل المثال، /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 سيحتوي على النموذج sample_m1.pkl.

ضمن البرنامج النصي لتسجيل النقاط (score.py)، يمكنك تحميل النموذج الخاص بك (في هذا المثال، sample_m1.pkl) في الدالة init() :

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl") 
    model = joblib.load(model_path) 

استخدام نماذج محلية متعددة في عملية نشر

على الرغم من أن Azure CLI وPython SDK وأدوات العميل الأخرى تسمح لك بتحديد نموذج واحد فقط لكل عملية نشر في تعريف التوزيع، فلا يزال بإمكانك استخدام نماذج متعددة في عملية نشر عن طريق تسجيل مجلد نموذج يحتوي على جميع النماذج كملفات أو أدلة فرعية.

في بنية مجلد المثال السابق، لاحظت أن هناك نماذج متعددة في models المجلد. في توزيع YAML، يمكنك تحديد المسار إلى models المجلد كما يلي:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: 
  path: /Downloads/multi-models-sample/models/ 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

بعد إنشاء النشر الخاص بك، سيشير متغير AZUREML_MODEL_DIR البيئة إلى موقع التخزين داخل Azure حيث يتم تخزين نماذجك. على سبيل المثال، /var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 سيحتوي على النماذج وبنية الملف.

على سبيل المثال، ستبدو محتويات AZUREML_MODEL_DIR المجلد كما يلي:

لقطة شاشة لبنية المجلد لموقع التخزين لنماذج متعددة.

ضمن البرنامج النصي لتسجيل النقاط (score.py)، يمكنك تحميل نماذجك في الدالة init() . تحمل التعليمات البرمجية sample_m1.pkl التالية النموذج:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "models","model_1","v1", "sample_m1.pkl ") 
    model = joblib.load(model_path) 

للحصول على مثال حول كيفية نشر نماذج متعددة إلى نشر واحد، راجع نشر نماذج متعددة إلى نشر واحد (مثال CLI) ونشر نماذج متعددة إلى نشر واحد (مثال SDK) .

تلميح

إذا كان لديك أكثر من 1500 ملف للتسجيل، ففكر في ضغط الملفات أو الدلائل الفرعية على أنها .tar.gz عند تسجيل النماذج. لاستهلاك النماذج، يمكنك إلغاء ضغط الملفات أو الدلائل الفرعية في الدالة init() من البرنامج النصي لتسجيل النقاط. بدلا من ذلك، عند تسجيل النماذج، قم بتعيين الخاصية azureml.unpack إلى True، لإلغاء ضغط الملفات أو الدلائل الفرعية تلقائيا. في كلتا الحالتين، يحدث إلغاء الضغط مرة واحدة في مرحلة التهيئة.

استخدام النماذج المسجلة في مساحة عمل Azure التعلم الآلي في عملية نشر

لاستخدام نموذج واحد أو أكثر، والتي تم تسجيلها في مساحة عمل Azure التعلم الآلي، حدد اسم النموذج (النماذج) المسجلة في YAML للتوزيع. على سبيل المثال، يحدد تكوين YAML للتوزيع التالي الاسم المسجل model ك azureml:local-multimodel:3:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: azureml:local-multimodel:3 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

في هذا المثال، ضع في اعتبارك أن local-multimodel:3 يحتوي على عناصر النموذج التالية، والتي يمكن عرضها من علامة التبويب Models في Azure التعلم الآلي studio:

لقطة شاشة لبنية المجلد تعرض بيانات النموذج الاصطناعية للنموذج المسجل.

بعد إنشاء النشر الخاص بك، سيشير متغير AZUREML_MODEL_DIR البيئة إلى موقع التخزين داخل Azure حيث يتم تخزين نماذجك. على سبيل المثال، /var/azureml-app/azureml-models/local-multimodel/3 سيحتوي على النماذج وبنية الملف. AZUREML_MODEL_DIR سيشير إلى المجلد الذي يحتوي على جذر البيانات الاصطناعية للنموذج. استنادا إلى هذا المثال، ستبدو محتويات AZUREML_MODEL_DIR المجلد كما يلي:

لقطة شاشة لبنية المجلد تظهر نماذج متعددة.

ضمن البرنامج النصي لتسجيل النقاط (score.py)، يمكنك تحميل نماذجك في الدالة init() . على سبيل المثال، قم بتحميل diabetes.sav النموذج:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav") 
    model = joblib.load(model_path) 

فهم البرنامج النصي لتسجيل النقاط

تلميح

تنسيق البرنامج النصي لتسجيل النقاط لنقاط النهاية عبر الإنترنت هو نفس التنسيق المستخدَم في الإصدار السابق من CLI وفي Python SDK.

كما ذكر سابقا، يجب أن يكون للبرنامج النصي لتسجيل النقاط المحدد في code_configuration.scoring_script دالة init() ودالة run() .

يستخدم هذا المثال ملف score.py: 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 الدالة هي المكان المناسب لكتابة منطق لعمليات التهيئة العمومية مثل التخزين المؤقت للنموذج في الذاكرة (كما نفعل في هذا المثال).

run() يتم استدعاء الدالة لكل استدعاء لنقطة النهاية، وهي تقوم بتسجيل النقاط والتنبؤ الفعليين. في هذا المثال، سنقوم باستخراج البيانات من إدخال JSON، واستدعاء أسلوب نموذج predict() scikit-learn، ثم إرجاع النتيجة.

التوزيع والتصحيح محلياً باستخدام نقاط النهاية المحلية

نوصي بشدة باختبار تشغيل نقطة النهاية محليا عن طريق التحقق من صحة التعليمات البرمجية والتكوين وتصحيحها قبل النشر إلى Azure. يدعم Azure CLI وPython SDK نقاط النهاية المحلية والنشرات، بينما لا يدعم Azure التعلم الآلي studio وقالب ARM.

للنشر محليا، يجب تثبيت Docker Engine وتشغيله. يبدأ Docker Engine عادةً عند بدء تشغيل الكمبيوتر. إذا لم يحدث ذلك، يمكنك استكشاف أخطاء محرك Docker وإصلاحها.

تلميح

يمكنك استخدام حزمة Python لخادم Azure التعلم الآلي الاستدلال HTTP لتصحيح أخطاء البرنامج النصي لتسجيل النقاط محليا دون Docker Engine. يساعدك تصحيح الأخطاء باستخدام خادم الاستدلال على تصحيح أخطاء البرنامج النصي لتسجيل النقاط قبل النشر إلى نقاط النهاية المحلية بحيث يمكنك تصحيح الأخطاء دون التأثر بتكوينات حاوية التوزيع.

إشعار

نقاط النهاية المحلية لها القيود التالية:

  • لا تدعم قواعد حركة المرور أو المصادقة أو إعدادات الفحص.
  • وهي تدعم عملية نشر واحدة فقط لكل نقطة نهاية.
  • وهي تدعم ملفات النموذج المحلي والبيئة مع ملف conda المحلي فقط. إذا كنت ترغب في اختبار النماذج المسجلة، فبادر أولا بتنزيلها باستخدام CLI أو SDK، ثم استخدم path في تعريف النشر للإشارة إلى المجلد الأصل. إذا كنت ترغب في اختبار البيئات المسجلة، فتحقق من سياق البيئة في Azure التعلم الآلي studio وإعداد ملف conda المحلي لاستخدامه. يوضح المثال في هذه المقالة استخدام النموذج المحلي والبيئة مع ملف conda المحلي، والذي يدعم النشر المحلي.

لمزيد من المعلومات حول تصحيح أخطاء نقاط النهاية عبر الإنترنت محليا قبل النشر إلى Azure، راجع تصحيح نقاط النهاية عبر الإنترنت محليا في Visual Studio Code.

قم بتوزيع النموذج محلياً

قم أولا بإنشاء نقطة نهاية. اختيارياً، بالنسبة إلى نقطة نهاية محلية، يمكنك تخطي هذه الخطوة وإنشاء التوزيع مباشرةً (الخطوة التالية)، والتي بدورها ستنشئ بيانات التعريف المطلوبة. يعد نشر النماذج محليا مفيدا لأغراض التطوير والاختبار.

az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

الآن، قم بإنشاء توزيع باسم blue ضمن نقطة النهاية.

az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml

توجه --local العلامة CLI لتوزيع نقطة النهاية في بيئة Docker.

تلميح

استخدم Visual Studio Code لاختبار نقاط النهاية وتصحيحها محليًا. لمزيدٍ من المعلومات، راجع تتبع أخطاء نقاط النهاية عبر الإنترنت محلياً في Visual Studio Code.

تحقق من نجاح التوزيع المحلي

تحقق من الحالة لمعرفة ما إذا كان النموذج قد تم توزيعه دون خطأ:

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": {}
}

يحتوي الجدول التالي على القيم المحتمَلة لـprovisioning_state:

حالة ‏‏الوصف
انشاء يتم إنشاء المورد.
تحديث يتم تحديث المورد.
حذف يتم حذف المورد.
نجحت تمت عملية الإنشاء/التحديث بنجاح.
فاشل فشلت عملية الإنشاء/التحديث/الحذف.

قم باستدعاء نقطة النهاية المحلية لتسجيل البيانات باستخدام النموذج الخاص بك

قم باستدعاء نقطة النهاية لتسجيل النموذج باستخدام الأمر الملائم 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 . تتوافر عينة من الأوامر المستندة إلى curl لاحقاً في هذا المستند.

راجع سجلات الإخراج من عملية الاستدعاء

في مثال ملف Score.py، يسجّل الأسلوب run() بعض الإخراج إلى وحدة التحكم.

يمكنك عرض هذا الإخراج باستخدام get-logs الأمر :

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

قم بتوزيع نقطة النهاية عبر الإنترنت على 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.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"

التحقق من حالة نقطة النهاية

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 . لمزيد من المعلومات حول سجلات النشر، راجع الحصول على سجلات الحاوية.

قم باستدعاء نقطة النهاية لتسجيل البيانات باستخدام النموذج الخاص بك

يمكنك استخدام إما 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/actionMicrosoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action. لمزيدٍ من المعلومات، راجع إدارة الوصول إلى مساحة عمل Azure Machine Learning.

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 مرة أخرى.

للحصول على معلومات بشأن المصادقة باستخدام رمز مميز، راجع المصادقة على نقاط النهاية عبر الإنترنت.

(اختياري) تحديث التوزيع

إذا كنت تريد تحديث التعليمة البرمجية أو الطراز أو البيئة، فقم بتحديث ملف YAML، ثم قم بتشغيل الأمر az ml online-endpoint update .

إشعار

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

لفهم كيفية عمل update :

  1. افتح الملف online/model-1/onlinescoring/Score.py.

  2. غيّر السطر الأخير من الوظيفة init() : بعد logging.info("Init complete")، أضف logging.info("Updated successfully").

  3. حفظ الملف.

  4. قم بإجراء هذا الأمر:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
    

    إشعار

    التحديث باستخدام YAML تعريفي. أي إن التغييرات في YAML تنعكس في موارد Azure 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. سيؤدي ذلك إلى الاحتفاظ بكافة التكوينات الموجودة ولكن تحديث المعلمات المحددة فقط.
  5. نظرا لتعديل الدالة init() التي يتم تشغيلها عند إنشاء نقطة النهاية أو تحديثها، ستكون الرسالة Updated successfully في السجلات. استرجع السجلات عن طريق تشغيل:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

يعمل الأمر update أيضاً مع عمليات التوزيع المحلية. استخدم نفس الأمر az ml online-deployment update مع العلم --local .

إشعار

التحديث السابق للتوزيع هو مثال على تحديث متجدد في موضعه.

  • بالنسبة لنقطة نهاية مدارة عبر الإنترنت، يتم تحديث النشر إلى التكوين الجديد بنسبة 20٪ من العقد في كل مرة. أي إذا كان النشر يحتوي على 10 عقد، فسيتم تحديث عقدتين في كل مرة.
  • بالنسبة لنقطة نهاية Kubernetes عبر الإنترنت، سيقوم النظام بشكل متكرر بإنشاء مثيل نشر جديد مع التكوين الجديد وحذف القديم.
  • لاستخدام الإنتاج، يجب مراعاة النشر الأزرق والأخضر، والذي يوفر بديلا أكثر أمانا لتحديث خدمة ويب.

(اختياري) قم بتكوين القياس التلقائي

يقوم التحجيم التلقائي بتشغيل المقدار المناسب من الموارد للتعامل مع الحِمل على تطبيقك. تدعم نقاط النهاية المُدارة عبر الإنترنت القياس التلقائي من خلال التكامل مع ميزة القياس التلقائي لجهاز المراقبة Azure. لتكوين القياس التلقائي، راجع كيفية القياس التلقائي لنقاط النهاية عبر الإنترنت.

(اختياري) مراقبة اتفاقية مستوى الخدمة (SLA) باستخدام Azure Monitor

لعرض المقاييس وتعيين التنبيهات بناءً على اتفاقية مستوى الخدمة الخاصة بك، أكمل الخطوات الموضحة في مراقبة نقاط النهاية عبر الإنترنت.

(اختياري) التكامل مع Log Analytics

get-logs يوفر الأمر ل CLI أو get_logs أسلوب SDK فقط المئات الأخيرة من أسطر السجلات من مثيل محدد تلقائيا. ومع ذلك، يوفر Log Analytics طريقة لتخزين السجلات وتحليلها بشكل دائم. لمزيد من المعلومات حول استخدام التسجيل، راجع مراقبة نقاط النهاية عبر الإنترنت.

احذف نقطة النهاية والتوزيع

إذا كنت لا تنوي استخدام التوزيع، يجب حذفه عن طريق تشغيل التعليمة البرمجية التالية (يحذف نقطة النهاية وجميع عمليات التوزيع الأساسية):

az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait