استكشاف الأخطاء وإصلاحها في نشر نقاط النهاية عبر الإنترنت وتسجيلها (معاينة)
APPLY TO: Azure CLI ml extension
v1
v2 (معاينة)
تعرف على كيفية حل المشكلات الشائعة في نشر نقاط نهاية Azure التعلم الآلي عبر الإنترنت (معاينة) وتسجيلها.
تم تنظيم هذا المستند بالطريقة التي يجب أن تتعامل بها مع استكشاف الأخطاء وإصلاحها:
- استخدم النشر المحلي لاختبار النماذج وتصحيحها محليا قبل النشر في السحابة.
- استخدم سجلات الحاويات للمساعدة في تصحيح المشكلات.
- فهم أخطاء النشر الشائعة التي قد تنشأ وكيفية إصلاحها.
يشرح القسم رموز حالة HTTP كيفية تعيين أخطاء الاستدعاء والتنبؤ برموز حالة HTTP عند تسجيل نقاط النهاية باستخدام طلبات REST.
هام
تُعد هذه الميزة قيد المعاينة العامة في الوقت الحالي. يجري توفير إصدار المعاينة هذا من دون اتفاقية على مستوى الخدمة، ولا يوصى به لأحمال العمل الخاصة بالإنتاج. بعض الميزات ربما لا تكون مدعمة أو بها بعض القدرات المقيدة. لمزيد من المعلومات، راجع شروط الاستخدام التكميلية لمعاينات Microsoft Azure.
المتطلبات الأساسية
- اشتراك Azure. جرب الإصدار المجاني أو المدفوع من Azure التعلم الآلي.
- Azure CLI.
- تثبيت CLI (الإصدار 2) (معاينة) وإعداده واستخدامه.
النشر محليا
النشر المحلي هو نشر نموذج إلى بيئة Docker المحلية. النشر المحلي مفيد للاختبار وتصحيح الأخطاء قبل النشر إلى السحابة.
تلميح
استخدم Visual Studio Code لاختبار نقاط النهاية وتصحيحها محليا. لمزيد من المعلومات، راجع تصحيح نقاط النهاية عبر الإنترنت محليا في Visual Studio Code.
يدعم النشر المحلي إنشاء نقطة نهاية محلية وتحديثها وحذفها. كما يسمح لك باستدعاء السجلات والحصول عليها من نقطة النهاية. لاستخدام النشر المحلي، أضف --local إلى أمر CLI المناسب:
az ml online-deployment create --endpoint-name <endpoint-name> -n <deployment-name> -f <spec_file.yaml> --local
كجزء من النشر المحلي، يتم تنفيذ الخطوات التالية:
- يقوم Docker إما بإنشاء صورة حاوية جديدة أو سحب صورة موجودة من ذاكرة التخزين المؤقت Docker المحلية. يتم استخدام صورة موجودة إذا كانت هناك صورة تتطابق مع جزء البيئة من ملف المواصفات.
- يبدأ Docker حاوية جديدة تحتوي على قطع أثرية محلية مثبتة مثل ملفات النماذج والتعليمات البرمجية.
لمزيد من المعلومات، راجع النشر محليا في نشر وتسجيل نموذج تعلم آلي باستخدام نقطة نهاية (معاينة) مدارة عبر الإنترنت.
تركيب كوندا
بشكل عام ، تنبع المشكلات المتعلقة بنشر mlflow من مشكلات تثبيت بيئة المستخدم المحددة في conda.yaml الملف.
لتصحيح مشكلات تثبيت conda، جرب ما يلي:
تحقق من السجلات لتثبيت conda. إذا تحطمت الحاوية أو استغرقت وقتا طويلا لبدء التشغيل، فمن المحتمل أن تحديث بيئة conda قد فشل في حله بشكل صحيح.
قم بتثبيت ملف mlflow conda محليا باستخدام الأمر
conda env create -n userenv -f <CONDA_ENV_FILENAME>.إذا كانت هناك أخطاء محليا، فحاول حل بيئة conda وإنشاء بيئة وظيفية قبل إعادة النشر.
إذا تعطلت الحاوية حتى إذا تم حلها محليا، فقد يكون حجم SKU المستخدم للنشر صغيرا جدا.
- يحدث تثبيت حزمة Conda في وقت التشغيل ، لذلك إذا كان حجم SKU صغيرا جدا بحيث لا يمكنه استيعاب كافة الحزم المفصلة
conda.yamlفي ملف البيئة ، فقد تتعطل الحاوية. - يعد Standard_F4s_v2 VM حجم SKU جيدا للبدء ، ولكن قد تكون هناك حاجة إلى وحدات أكبر اعتمادا على التبعيات المحددة في ملف conda.
- يحدث تثبيت حزمة Conda في وقت التشغيل ، لذلك إذا كان حجم SKU صغيرا جدا بحيث لا يمكنه استيعاب كافة الحزم المفصلة
الحصول على سجلات الحاويات
لا يمكنك الوصول المباشر إلى الجهاز الظاهري حيث يتم نشر النموذج. ومع ذلك، يمكنك الحصول على سجلات من بعض الحاويات التي تعمل على الجهاز الظاهري. يعتمد مقدار المعلومات على حالة التوفير الخاصة بالنشر. إذا كانت الحاوية المحددة قيد التشغيل ، فسترى إخراج وحدة التحكم الخاصة بها ، وإلا فستتلقى رسالة للمحاولة مرة أخرى لاحقا.
لرؤية إخراج السجل من الحاوية، استخدم أمر CLI التالي:
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100
أو
az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> --lines 100
أضف --resource-group وإلى --workspace-name الأوامر أعلاه إذا لم تكن قد قمت بالفعل بتعيين هذه المعلمات عبر az configure.
للاطلاع على معلومات حول كيفية تعيين هذه المعلمات، وإذا تم تعيين القيم الحالية بالفعل، فقم بتشغيل:
az ml online-deployment get-logs -h
بشكل افتراضي يتم سحب السجلات من خادم الاستدلال. تتضمن السجلات سجل وحدة التحكم من خادم الاستدلال ، والذي يحتوي على بيانات الطباعة / السجل من التعليمات البرمجية "score.py".
ملاحظة
إذا كنت تستخدم تسجيل Python، فتأكد من استخدام ترتيب مستوى التسجيل الصحيح لنشر الرسائل في السجلات. على سبيل المثال ، INFO.
يمكنك أيضا الحصول على سجلات من حاوية تهيئة التخزين عن طريق المرور –-container storage-initializer. تحتوي هذه السجلات على معلومات حول ما إذا كان قد تم تنزيل بيانات التعليمات البرمجية والنموذج بنجاح إلى الحاوية.
أضف --help و/أو --debug إلى الأوامر للاطلاع على مزيد من المعلومات.
طلب التتبع
هناك ثلاثة رؤوس تتبع مدعومة:
x-request-idمحجوز لتتبع الخادم. نحن نتجاوز هذا العنوان للتأكد من أنه معرف فريد ويب صالح.ملاحظة
عند إنشاء تذكرة دعم لطلب فاشل، قم بإرفاق معرف الطلب الفاشل لتسريع التحقيق.
x-ms-request-idوهيx-ms-client-request-idمتاحة لسيناريوهات تتبع العميل. نقوم بتعقيم هذه الرؤوس لإزالة الرموز غير الأبجدية الرقمية. يتم اقتطاع هذه الرؤوس إلى 72 حرفا.
أخطاء التوزيع الشائعة
فيما يلي قائمة بأخطاء النشر الشائعة التي يتم الإبلاغ عنها كجزء من حالة عملية النشر.
- ImageBuildFailure
- خارج الحصة
- خارج القدرة
- حجة سيئة
- ResourceNotReady
- ResourceNotFound
- العمليةملغاة
- InternalServerError
خطأ: ImageBuildFailure
يتم إرجاع هذا الخطأ عند إنشاء البيئة (صورة عامل الإرساء). يمكنك التحقق من سجل الإنشاء للحصول على مزيد من المعلومات حول الفشل (الإخفاقات). يوجد سجل الإنشاء في مساحة التخزين الافتراضية لمساحة عمل Azure التعلم الآلي. يتم إرجاع الموقع الدقيق كجزء من الخطأ. على سبيل المثال، "يتوفر سجل الإنشاء في مخزن blob لمساحة العمل "storage-account-name" ضمن المسار "/azureml/ImageLogs/your-image-id/build.log". في هذه الحالة ، "azureml" هو اسم حاوية blob في حساب التخزين.
إذا لم يتم العثور على خطأ واضح في سجل الإنشاء ، وكان السطر الأخير هو Installing pip dependencies: ...working...، فقد يكون الخطأ ناتجا عن تبعية. تثبيت تبعيات الإصدار في ملف conda الخاص بك يمكن أن يحل هذه المشكلة.
نوصي أيضا باستخدام نشر محلي لاختبار النماذج وتصحيحها محليا قبل النشر في السحابة.
خطأ: OutOfQuota
فيما يلي قائمة بالموارد الشائعة التي قد تنفد حصتها عند استخدام خدمات Azure:
حصة وحدة المعالجة المركزية
قبل نشر نموذج، يجب أن يكون لديك حصة حسابية كافية. تحدد هذه الحصة عدد النوى الافتراضية المتوفرة لكل اشتراك ولكل مساحة عمل ولكل وحدة SKU ولكل منطقة. يطرح كل نشر من الحصة النسبية المتاحة ويضيفها مرة أخرى بعد الحذف، استنادا إلى نوع SKU.
التخفيف المحتمل هو التحقق مما إذا كانت هناك عمليات نشر غير مستخدمة يمكن حذفها. أو يمكنك تقديم طلب لزيادة الحصص.
حصة القرص
تحدث هذه المشكلة عندما يكون حجم النموذج أكبر من مساحة القرص المتوفرة ولا يمكن تنزيل النموذج. جرب SKU مع مساحة أكبر على القرص.
- تجربة قائمة SKU لنقاط النهاية المدارة عبر الإنترنت مع مساحة أكبر على القرص
- حاول تقليل حجم الصورة والنموذج
حصة الذاكرة
تحدث هذه المشكلة عندما تكون بصمة الذاكرة الخاصة بالنموذج أكبر من الذاكرة المتوفرة. جرب قائمة وحدات SKU لنقاط النهاية المدارة عبر الإنترنت مع ذاكرة أكبر.
الحصة النسبية لتعيين الدور
حاول حذف بعض تعيينات الأدوار غير المستخدمة في هذا الاشتراك. يمكنك التحقق من جميع تعيينات الأدوار في مدخل Azure في قائمة التحكم في الوصول.
حصة نقطة النهاية
حاول حذف بعض نقاط النهاية غير المستخدمة في هذا الاشتراك.
حصة Kubernetes
تعذر استيفاء وحدة المعالجة المركزية أو الذاكرة المطلوبة. اضبط طلبك أو المجموعة.
حصص أخرى
لتشغيل التوفير score.py كجزء من النشر، يقوم Azure بإنشاء حاوية تتضمن كافة الموارد التي score.py تحتاجها، ويقوم بتشغيل البرنامج النصي لتسجيل النقاط على تلك الحاوية.
إذا تعذر بدء تشغيل الحاوية الخاصة بك ، فهذا يعني أن التسجيل لا يمكن أن يحدث. قد تكون الحاوية تطلب موارد أكثر مما instance_type يمكن أن يدعم. إذا كان الأمر كذلك، ففكر في instance_type تحديث النشر عبر الإنترنت.
للحصول على السبب الدقيق لحدوث خطأ، قم بتشغيل:
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100
خطأ: OutOfCapacity
فشل حجم VM المحدد في التوفير بسبب نقص سعة Azure التعلم الآلي. أعد المحاولة لاحقا أو حاول النشر في منطقة مختلفة.
خطأ: BadArgument
فيما يلي قائمة بالأسباب التي قد تجعلك تواجه هذا الخطأ:
- كان طلب الموارد أكبر من الحدود
- فشلت مهمة بدء التشغيل بسبب خطأ في التخويل
- فشلت مهمة بدء التشغيل بسبب تعيينات دور غير صحيحة على المورد
- غير قادر على تنزيل صورة حاوية المستخدم
- غير قادر على تنزيل نموذج المستخدم أو نماذج التعليمات البرمجية
طلبات الموارد أكبر من الحدود
يجب أن تكون طلبات الموارد أقل من الحدود أو مساوية لها. إذا لم تقم بتعيين حدود، فإننا نقوم بتعيين القيم الافتراضية عند إرفاق حوسبتك بمساحة عمل Azure التعلم الآلي. يمكنك التحقق من الحدود في مدخل Azure أو باستخدام الأمر az ml compute show .
خطأ في التفويض
بعد توفير مورد الحوسبة، أثناء إنشاء النشر، يحاول Azure سحب صورة حاوية المستخدم من سجل حاوية Azure الخاص بمساحة العمل (ACR) وتحميل نموذج المستخدم ونماذج التعليمات البرمجية في حاوية المستخدم من حساب تخزين مساحة العمل.
أولا ، تحقق مما إذا كانت هناك مشكلة في الأذونات للوصول إلى ACR.
لسحب النقاط، يستخدم Azure الهويات المدارة للوصول إلى حساب التخزين.
إذا قمت بإنشاء نقطة النهاية المقترنة باستخدام SystemAssign، منح إذن التحكم في الوصول المستند إلى دور Azure (RBAC) تلقائيا، ولن تكون هناك حاجة إلى أذونات أخرى.
إذا قمت بإنشاء نقطة النهاية المقترنة باستخدام UserAssign، فيجب أن يكون للهوية المدارة للمستخدم إذن قارئ بيانات نقطة التخزين على حساب تخزين مساحة العمل.
غير قادر على تنزيل صورة حاوية المستخدم
من الممكن تعذر العثور على حاوية المستخدم. تحقق من سجلات الحاويات للحصول على مزيد من التفاصيل.
تأكد من توفر صورة الحاوية في مساحة العمل ACR.
على سبيل المثال ، إذا كانت الصورة ، testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest فتحقق من المستودع باستخدام az acr repository show-tags -n testacr --repository azureml/azureml_92a029f831ce58d2ed011c3c42d35acb --orderby time_desc --output table.
غير قادر على تنزيل نموذج المستخدم أو نماذج التعليمات البرمجية
من الممكن عدم العثور على نموذج المستخدم أو القطع الأثرية للرمز. تحقق من سجلات الحاويات للحصول على مزيد من التفاصيل.
تأكد من تسجيل نماذج النماذج والتعليمات البرمجية في نفس مساحة العمل مثل النشر. show استخدم الأمر لإظهار تفاصيل نموذج أو قطعة فنية للتعليمات البرمجية في مساحة عمل.
على سبيل المثال:
az ml model show --name <model-name> az ml code show --name <code-name> --version <version>يمكنك أيضا التحقق مما إذا كانت النقط موجودة في حساب تخزين مساحة العمل.
على سبيل المثال ، إذا كانت النقطة هي
https://foobar.blob.core.windows.net/210212154504-1517266419/WebUpload/210212154504-1517266419/GaussianNB.pkl، يمكنك استخدام هذا الأمر للتحقق مما إذا كان موجودا:az storage blob exists --account-name foobar --container-name 210212154504-1517266419 --name WebUpload/210212154504-1517266419/GaussianNB.pkl --subscription <sub-name>
خطأ: ResourceNotReady
لتشغيل التوفير score.py كجزء من النشر، يقوم Azure بإنشاء حاوية تتضمن كافة الموارد التي score.py تحتاجها، ويقوم بتشغيل البرنامج النصي لتسجيل النقاط على تلك الحاوية. الخطأ في هذا السيناريو هو أن هذه الحاوية تتعطل عند التشغيل ، مما يعني أن التسجيل لا يمكن أن يحدث. يحدث هذا الخطأ عندما:
- هناك خطأ في
score.py. يستخدمget-logsللمساعدة في تشخيص المشاكل الشائعة:- حزمة تم استيرادها ولكنها ليست في بيئة conda.
- خطأ في بناء الجملة.
- فشل في
init()الطريقة.
- إذا
get-logsلم تكن تنتج أي سجلات، فهذا يعني عادة أن الحاوية قد فشلت في بدء التشغيل. لتصحيح هذه المشكلة، حاول النشر محليا بدلا من ذلك. - لم يتم إعداد تحقيقات الاستعداد أو الحياة بشكل صحيح.
- هناك خطأ في إعداد بيئة الحاوية، مثل التبعية المفقودة.
خطأ: ResourceNotFound
يحدث هذا الخطأ عندما يتعذر على Azure Resource Manager العثور على مورد مطلوب. على سبيل المثال، ستتلقى هذا الخطأ إذا تمت الإشارة إلى حساب تخزين ولكن لا يمكن العثور عليه في المسار الذي تم تحديده عليه. تأكد من التحقق مرة أخرى من الموارد التي ربما تم توفيرها بواسطة المسار الدقيق أو تهجئة أسمائها.
لمزيد من المعلومات، راجع حل أخطاء عدم العثور على المورد.
خطأ: تم إلغاء العملية
تتمتع عمليات Azure بمستوى أولوية معين ويتم تنفيذها من الأعلى إلى الأدنى. يحدث هذا الخطأ عندما يحدث تجاوز العملية بواسطة عملية أخرى لها أولوية أعلى. قد تسمح إعادة محاولة العملية بتنفيذها دون إلغاء.
خطأ: InternalServerError
على الرغم من أننا نبذل قصارى جهدنا لتوفير خدمة مستقرة وموثوقة ، إلا أن الأمور لا تسير في بعض الأحيان وفقا للخطة. إذا تلقيت هذا الخطأ ، فهذا يعني أن هناك شيئا ما ليس صحيحا من جانبنا ، ونحن بحاجة إلى إصلاحه. أرسل تذكرة دعم العملاء مع جميع المعلومات ذات الصلة وسنعالج المشكلة.
مشكلات القياس التلقائي
إذا كنت تواجه مشكلة في القياس التلقائي، فراجع استكشاف أخطاء القياس التلقائي ل Azure وإصلاحها.
مشكلات حد النطاق الترددي
تحتوي نقاط النهاية المدارة عبر الإنترنت على حدود النطاق الترددي لكل نقطة نهاية. يمكنك العثور على تكوين الحد في إدارة الحصص النسبية للموارد باستخدام Azure التعلم الآلي هنا. إذا تجاوز استخدام النطاق الترددي الخاص بك الحد الأقصى ، تأخير طلبك. لمراقبة تأخير النطاق الترددي:
- استخدم "بايت الشبكة" المتري لفهم الاستخدام الحالي لعرض النطاق الترددي. لمزيد من المعلومات، راجع مراقبة نقاط النهاية المدارة عبر الإنترنت.
- سيتم إرجاع مقطورتين للاستجابة إذا تم فرض حد النطاق الترددي:
ms-azureml-bandwidth-request-delay-msتأخير الوقت بالمللي ثانية الذي استغرقه نقل دفق الطلب.:ms-azureml-bandwidth-response-delay-msتأخير الوقت بالمللي ثانية الذي استغرقه نقل دفق الاستجابة.:
تعليمة برمجية حالة HTTP
عند الوصول إلى نقاط النهاية عبر الإنترنت باستخدام طلبات REST، تلتزم رموز الحالة التي تم إرجاعها بمعايير رموز حالة HTTP. فيما يلي تفاصيل حول كيفية تعيين أخطاء استدعاء نقطة النهاية والتنبؤ برموز حالة HTTP.
| كود الحالة | عبارة السبب | لماذا قد يتم إرجاع هذا الرمز |
|---|---|---|
| 200 | موافق | تم تنفيذ النموذج الخاص بك بنجاح ، ضمن حدود الكمون الخاص بك. |
| 401 | غير مصرح به | ليس لديك إذن لتنفيذ الإجراء المطلوب، مثل النتيجة، أو انتهت صلاحية الرمز المميز الخاص بك. |
| 404 | غير موجود | عنوان URL غير صحيح. |
| 408 | انتهي وقت الطلب | استغرق تنفيذ النموذج وقتا أطول من المهلة المتوفرة request_timeout_ms أسفل request_settings تكوين نشر النموذج. |
| 424 | خطأ في النموذج | إذا كانت حاوية الطراز ترجع استجابة غير 200، فسيقوم Azure بإرجاع 424. تحقق من رؤوس ms-azureml-model-error-statuscode الاستجابة ولمزيد ms-azureml-model-error-reason من المعلومات. |
| 429 | الحد من المعدل | حاولت إرسال أكثر من 100 طلب في الثانية إلى نقطة النهاية. |
| 429 | الكثير من الطلبات المعلقة | يتلقى نموذجك طلبات أكثر مما يمكنه التعامل معه. نحن نسمح بطلبات 2 * max_concurrent_requests_per_instance * instance_count في أي وقت. يتم رفض الطلبات الإضافية. يمكنك تأكيد هذه الإعدادات في تكوين نشر النموذج ضمن request_settings و scale_settings. إذا كنت تستخدم القياس التلقائي، فسيتلقى نموذجك الطلبات بشكل أسرع مما يمكن للنظام توسيعه. باستخدام القياس التلقائي، يمكنك محاولة إعادة إرسال الطلبات مع التراجع الأسي. القيام بذلك يمكن أن يعطي النظام الوقت للتكيف. |
| 500 | خطأ داخلي في الخادم | البنية الأساسية المتوفرة في Azure ML تفشل. |