استكشاف الأخطاء وإصلاحها مع توزيع النموذج المحلي

جرب توزيع النموذج المحلي كخطوة أولى في استكشاف أخطاء التوزيع وإصلاحها في Azure Container Instances (ACI) أو Azure Kubernetes Service (AKS). يؤدي استخدام خدمة ويب محلية إلى تسهيل اكتشاف أخطاء توزيع خدمة ويب Docker للتعلم الآلي من Microsoft Azure الشائعة وإصلاحها.

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

  • اشتراكAzure. جرّب الإصدار المجاني أو المدفوع من «التعلم الآلي» من Azure.
  • الخيار أ (مستحسن) - تصحيح الأخطاء محليا على Azure التعلم الآلي Compute Instance
  • الخيار ب - تصحيح الأخطاء محليا على الحساب الخاص بك
  • الخيار ج، تمكين تتبع الأخطاء محليًا باستخدام خادم HTTP لاستدلال التعلم الآلي من Microsoft Azure.
    • خادم HTTP للاستدلال على Azure التعلم الآلي هو حزمة Python التي تسمح لك بالتحقق من صحة البرنامج النصي للإدراج بسهولة (score.py) في بيئة تطوير محلية. إذا كان يوجد مشكلة في البرنامج النصي لتسجيل النتائج، فسيرجع الخادم خطأ. سيعيد أيضًا الموقع الذي حدث فيه الخطأ.
    • يمكن أيضًا استخدام الخادم عند إنشاء بوابات تحقق في تكامل مستمر والبنية الأساسية لبرنامج ربط العمليات التجارية للتوزيع. على سبيل المثال، ابدأ الخادم بالبرنامج النصي المرشح وشغل مجموعة الاختبار مقابل نقطة النهاية المحلية.

خادم HTTP في التعلم الآلي من Azure

يسمح لك خادم الاستدلال المحلي بتصحيح أخطاء برنامج الإدخال النصي بسرعة (score.py). في حالة وجود خطأ في البرنامج النصي للنقاط الأساسية، سيفشل الخادم في تهيئة النموذج أو تقديمه. بدلا من ذلك، سيتم طرح استثناء والموقع الذي حدثت فيه المشكلات. تعرف على المزيد حول خادم HTTP لاستدلال التعلم الآلي من Microsoft Azure

  1. تثبيت الحزمة azureml-inference-server-http من مُوجز pypi:

    python -m pip install azureml-inference-server-http
    
  2. بدء تشغيل الخادم وإعداده score.py كبرنامج نصي للإدخال:

    azmlinfsrv --entry_script score.py
    
  3. إرسال طلب تسجيل إلى الخادم من خلالcurl:

    curl -p 127.0.0.1:5001/score
    

إشعار

تعرف على الأسئلة المتداولة حول خادم Http للاستدلال على التعلم الآلي من Azure.

تتبع الأخطاء محليًا

يمكنك العثور على نموذج دفتر توزيع محلي في مستودع MachineLearningNotebooks لاستكشاف مثال قابل للتشغيل.

تحذير

عمليات توزيع خدمة الويب المحلية ليست مدعومة لسيناريوهات الإنتاج.

للتوزيع محليًا، عدل التعليمات البرمجية لاستخدامها LocalWebservice.deploy_configuration() لإنشاء تكوين توزيع. ثم استخدم Model.deploy() لتوزيع الخدمة. يتم توزيع المثال التالي نموذجًا (مدمجًا في متغير النموذج) كخدمة ويب محلية:

ينطبق على: Python SDK azureml v1

from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import LocalWebservice


# Create inference configuration based on the environment definition and the entry script
myenv = Environment.from_conda_specification(name="env", file_path="myenv.yml")
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
# Create a local deployment, using port 8890 for the web service endpoint
deployment_config = LocalWebservice.deploy_configuration(port=8890)
# Deploy the service
service = Model.deploy(
    ws, "mymodel", [model], inference_config, deployment_config)
# Wait for the deployment to complete
service.wait_for_deployment(True)
# Display the port that the web service is available on
print(service.port)

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

يمكنك في هذه المرحلة العمل مع الخدمة كالمعتاد. توضح التعليمة البرمجية التالية إرسال البيانات إلى الخدمة:

import json

test_sample = json.dumps({'data': [
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
]})

test_sample = bytes(test_sample, encoding='utf8')

prediction = service.run(input_data=test_sample)
print(prediction)

لمزيد من المعلومات بشأن تخصيص بيئة Python الخاصة بك، راجع إنشاء وإدارة بيئات للتدريب والتوزيع.

حدث الخدمة

قد تحتاج أثناء الاختبار المحلي إلى تحديث score.pyالملف لإضافة تسجيل أو محاولة حل أي مشاكل اكتشفتها. لتعيد تحميل التغييرات على score.py الملف، استخدم reload(). على سبيل المثال، تُعيد التعليمات البرمجية التالية تحميل البرنامج النصي للخدمة، ثم ترسل البيانات إليه. تُسجل البيانات باستخدام الملف score.py المحدث:

هام

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

service.reload()
print(service.run(input_data=test_sample))

إشعار

يتم إعادة تحميل البرنامج النصي من الموقع المحدد بواسطة InferenceConfig العنصر الذي تستخدمه الخدمة.

لتغيير النموذج أو تبعيات Conda أو تكوين التوزيع، استخدم تحديث(). يحدث المثال التالي النموذج الذي تستخدمه الخدمة:

service.update([different_model], inference_config, deployment_config)

احذف الخدمة

لحذف الخدمة، استخدم حذف().

افحص سجل Docker

يمكنك طباعة رسائل سجل محرك Docker التفصيلية من عنصر الخدمة. يمكنك عرض السجل لعمليات التوزيع المحلية وACI وAKS. يوضح المثال التالي طريقة طباعة السجلات.

# if you already have the service object handy
print(service.get_logs())

# if you only know the name of the service (note there might be multiple services with the same name but different version number)
print(ws.webservices['mysvc'].get_logs())

إذا رأيت الخط Booting worker with pid: <pid>يتكرر عدة مرات في السجلات، فهذا يعني أنه لا توجد ذاكرة كافية لبدء العامل. يمكنك معالجة الخطأ من خلال زيادة قيمة memory_gb في deployment_config

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

معرفة المزيد بشأن التوزيع: