استكشاف الأخطاء وإصلاحها مع توزيع النموذج المحلي
جرب توزيع النموذج المحلي كخطوة أولى في استكشاف أخطاء التوزيع وإصلاحها في Azure Container Instances (ACI) أو Azure Kubernetes Service (AKS). يؤدي استخدام خدمة ويب محلية إلى تسهيل اكتشاف أخطاء توزيع خدمة ويب Docker للتعلم الآلي من Microsoft Azure الشائعة وإصلاحها.
المتطلبات الأساسية
- اشتراكAzure. جرّب الإصدار المجاني أو المدفوع من «التعلم الآلي» من Azure.
- الخيار أ (مستحسن) - تصحيح الأخطاء محليا على Azure التعلم الآلي Compute Instance
- مساحة عمل التعلم الآلي من Microsoft Azure مع تشغيل مثيل الحوسبة
- الخيار ب - تصحيح الأخطاء محليا على الحساب الخاص بك
- التعلم الآلي SDK من Azure.
- Azure CLI.
- ملحق واجهة مستوى الاستدعاء للتعلم الآلي من Microsoft Azure.
- ثبت Docker يعمل على نظامك المحلي.
- للتحقق من تثبيت Docker، استخدم الأمر
docker run hello-world
من Terminal أو موجه الأوامر. للحصول على معلومات بشأن تثبيت Docker، أو استكشاف أخطاء Docker وإصلاحها، راجع وثائق Docker.
- الخيار ج، تمكين تتبع الأخطاء محليًا باستخدام خادم HTTP لاستدلال التعلم الآلي من Microsoft Azure.
- خادم HTTP للاستدلال على Azure التعلم الآلي هو حزمة Python التي تسمح لك بالتحقق من صحة البرنامج النصي للإدراج بسهولة (
score.py
) في بيئة تطوير محلية. إذا كان يوجد مشكلة في البرنامج النصي لتسجيل النتائج، فسيرجع الخادم خطأ. سيعيد أيضًا الموقع الذي حدث فيه الخطأ. - يمكن أيضًا استخدام الخادم عند إنشاء بوابات تحقق في تكامل مستمر والبنية الأساسية لبرنامج ربط العمليات التجارية للتوزيع. على سبيل المثال، ابدأ الخادم بالبرنامج النصي المرشح وشغل مجموعة الاختبار مقابل نقطة النهاية المحلية.
- خادم HTTP للاستدلال على Azure التعلم الآلي هو حزمة Python التي تسمح لك بالتحقق من صحة البرنامج النصي للإدراج بسهولة (
خادم HTTP في التعلم الآلي من Azure
يسمح لك خادم الاستدلال المحلي بتصحيح أخطاء برنامج الإدخال النصي بسرعة (score.py
). في حالة وجود خطأ في البرنامج النصي للنقاط الأساسية، سيفشل الخادم في تهيئة النموذج أو تقديمه. بدلا من ذلك، سيتم طرح استثناء والموقع الذي حدثت فيه المشكلات. تعرف على المزيد حول خادم HTTP لاستدلال التعلم الآلي من Microsoft Azure
تثبيت الحزمة
azureml-inference-server-http
من مُوجز pypi:python -m pip install azureml-inference-server-http
بدء تشغيل الخادم وإعداده
score.py
كبرنامج نصي للإدخال:azmlinfsrv --entry_script score.py
إرسال طلب تسجيل إلى الخادم من خلال
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
الخطوات التالية
معرفة المزيد بشأن التوزيع:
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ