استكشاف أخطاء توزيع نقاط النهاية وتسجيلها عبر الإنترنت وإصلاحها
ينطبق على:ملحق ML Azure CLI v2 (الحالي)Python SDK azure-ai-ml v2 (الحالي)
تعرف على كيفية حل المشكلات الشائعة في النشر والتسجيل في نقاط النهاية بـ Azure Machine Learning.
تم تنظيم هذا المستند بالطريقة التي يجب عليك التعامل بها عند استكشاف الأخطاء وإصلاحها:
- استخدم النشر المحلي لاختبار نماذجك وتتبع أخطائها محليًا قبل نشرها على السحابة.
- استخدم سجلات الحاوية لتصحيح المشكلات.
- أفهم أخطاء النشر الشائعة التي قد تنشأ وكيفية إصلاحها.
يوضح القسم التعليمات البرمجية لحالة HTTP كيفية تعيين أخطاء الاستدعاء والتنبؤ إلى التعليمات البرمجية لحالة HTTP عند تسجيل نقاط النهاية بطلبات REST.
المتطلبات الأساسية
- اشتراكAzure. جرّب الإصدار المجاني أو المدفوع من «التعلم الآلي» من Azure.
- Azure CLI.
- بالنسبة إلى Azure Machine Learning CLI v2، راجع تثبيت CLI (v2) وإعداده واستخدامه.
- بالنسبة إلى Azure Machine Learning Python SDK v2، راجع تثبيت Azure Machine Learning SDK v2 لـ Python.
النشر المحلي
يقوم النشر المحلي بنشر النموذج إلى بيئة Docker المحلية. إن استخدام النشر المحلي مفيد للاختبار، وتصحيح الأخطاء قبل النشر على السحابة.
تلميح
يمكنك أيضا استخدام حزمة Python لخادم Azure التعلم الآلي الاستدلال HTTP لتصحيح أخطاء البرنامج النصي لتسجيل النقاط محليا. يساعدك تصحيح الأخطاء باستخدام خادم الاستدلال على تصحيح أخطاء البرنامج النصي لتسجيل النقاط قبل النشر إلى نقاط النهاية المحلية بحيث يمكنك تصحيح الأخطاء دون التأثر بتكوينات حاوية التوزيع.
يدعم النشر المحلي إنشاء نقطة نهاية محلية، وتحديثها، وحذفها. كما يسمح لك باستدعاء السجلات والحصول عليها من نقطة النهاية.
لاستخدام النشر المحلي، قم بإضافة --local
إلى أمر CLI المناسب:
az ml online-deployment create --endpoint-name <endpoint-name> -n <deployment-name> -f <spec_file.yaml> --local
وضمن النشر المحلي، يتم اتباع الخطوات التالية:
- يقوم Docker إما بإنشاء صورة جديدة للحاوية أو سحب صورة موجودة من ذاكرة التخزين المؤقت المحلية في Docker. يتم استخدام صورة موجودة إذا وُجدت صورة تُطابق جزء البيئة في ملف المواصفات.
- يبدأ Docker بإعداد حاوية جديدة بها البيانات الاصطناعية المحلية المُحمّلة مثل ملفات النموذج والتعليمة البرمجية.
للحصول على المزيد، راجع التوزيع محليا في نشر نموذج التعلم الآلي وتسجيله.
تلميح
استخدم Visual Studio Code لاختبار نقاط النهاية وتصحيحها محليًا. لمزيدٍ من المعلومات، راجع تتبع أخطاء نقاط النهاية عبر الإنترنت محلياً في Visual Studio Code.
تثبيت Conda
بشكل عام، تنشأ المشكلات المتعلقة بنشر 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 هو حجم SKU بداية جيد، ولكن قد تكون هناك حاجة إلى أجهزة أكبر اعتمادا على التبعيات المحددة في ملف conda.
- بالنسبة لنقطة نهاية Kubernetes عبر الإنترنت، يجب أن تحتوي مجموعة Kubernetes على 4 ذاكرات أساسية لوحدة المعالجة المركزية الظاهرية كحد أدنى وذاكرة 8 غيغابايت.
- يحدث تثبيت حزمة Conda في وقت التشغيل، لذلك إذا كان حجم SKU صغيرا جدا لاستيعاب جميع الحزم المفصلة
الحصول على سجلات الحاوية
لا يمكنك الحصول على وصول مباشر إلى «الجهاز الظاهري» حيث يتم نشر النموذج. ومع ذلك، يمكنك الحصول على السجلات من بعض الحاويات التي تعمل على «الجهاز الظاهري». تعتمد كمية المعلومات التي تحصل عليها على حالة توفير التوزيع. إذا كانت الحاوية المحددة قيد التشغيل، فسترى إخراج وحدة التحكم الخاصة بها؛ وإلا، فستتلقى رسالة للمحاولة مرة أخرى لاحقا.
هناك نوعان من الحاويات التي يمكنك الحصول على السجلات منها:
- خادم الاستدلال: تتضمن السجلات سجل وحدة التحكم (من خادم الاستدلال) الذي يحتوي على إخراج وظائف الطباعة/التسجيل من البرنامج النصي لتسجيل النقاط (
score.py
التعليمات البرمجية). - تهيئة التخزين: تحتوي السجلات على معلومات حول ما إذا كان قد تم تنزيل التعليمات البرمجية وبيانات النموذج بنجاح إلى الحاوية. يتم تشغيل الحاوية قبل بدء تشغيل حاوية خادم الاستدلال.
لمشاهدة إخراج السجل من حاوية، استخدم أمر 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
يتم سحب السجلات بشكل افتراضي من خادم الاستنتاج.
إشعار
إذا كنت تستخدم تسجيل Python، فتأكد من استخدام الترتيب الصحيح لمستوى التسجيل في الرسائل التي سيتم نشرها في السجلات. على سبيل المثال، INFO.
يمكنك أيضًا الحصول على السجلات من حاوية مُهيئ التخزين عن طريق تمرير –-container storage-initializer
.
أضف --help
و/أو --debug
إلى الأوامر للاطلاع على مزيدٍ من المعلومات.
بالنسبة لنقطة نهاية Kubernetes عبر الإنترنت، يمكن للمسؤولين الوصول مباشرة إلى نظام المجموعة حيث تقوم بنشر النموذج، وهو أكثر مرونة بالنسبة لهم للتحقق من السجل في Kubernetes. على سبيل المثال:
kubectl -n <compute-namespace> logs <container-name>
تتبع الطلب
هناك عنوانان للتتبع مدعومان:
x-request-id
محجوز لتتبع الخادم. نمنع هذا العنوان للتأكد من أنه GUID صالح.إشعار
عند إنشاء تذكرة دعم لطلب فاشل، قم بإرفاق معرف الطلب الفاشل لتسريع التحقيق. بدلا من ذلك، قم بتوفير اسم المنطقة واسم نقطة النهاية.
x-ms-client-request-id
متاحة لسيناريوهات تتبع العميل. يتم تعقيم هذا العنوان لقبول الأحرف الأبجدية الرقمية والواصلات والتسطير السفلي فقط، ويتم اقتطاعه إلى 40 حرفا كحد أقصى.
أخطاء التوزيع الشائعة
القائمة التالية هي أخطاء التوزيع الشائعة التي يتم الإبلاغ عنها كجزء من حالة عملية التوزيع:
- ImageBuildFailure
- OutOfQuota
- BadArgument
- شائع لكل من نقطة النهاية المدارة عبر الإنترنت ونقطة نهاية Kubernetes عبر الإنترنت
- تقتصر الأخطاء على نقطة نهاية Kubernetes عبر الإنترنت
- ResourceNotReady
- ResourceNotFound
- WorkspaceManagedNetworkNotReady
- OperationCanceled
- SecretsInjectionError
- خطأ داخلي
إذا كنت تقوم بإنشاء أو تحديث نشر Kubernetes عبر الإنترنت، يمكنك مشاهدة الأخطاء الشائعة الخاصة بنشر Kubernetes.
«خطأ»: ImageBuildFailure
يتم إرجاع ذلك الخطأ عند إنشاء البيئة (صورة docker). يمكنك التحقق من سجل البناء للحصول على مزيد من المعلومات حول الفشل (حالات الفشل). يقع سجل البناء في التخزين الافتراضي لمساحة عمل Azure Machine Learning. قد يتم إرجاع الموقع الدقيق كجزء من الخطأ. على سبيل المثال، "the build log under the storage account '[storage-account-name]' in the container '[container-name]' at the path '[path-to-the-log]'"
تحتوي القائمة التالية على سيناريوهات فشل بناء الصور الشائعة:
- فشل تخويل Azure Container Registry (ACR)
- لم يتم تعيين حساب بناء الصورة في مساحة عمل خاصة باستخدام VNet
- فشل عام أو غير معروف
نوصي أيضا بمراجعة إعدادات الفحص الافتراضية إذا كان لديك مهلات ImageBuild.
فشل تخويل سجل الحاوية
إذا كانت رسالة الخطأ تشير إلى "container registry authorization failure"
أنه لا يمكنك الوصول إلى سجل الحاوية باستخدام بيانات الاعتماد الحالية.
يمكن أن يؤدي إلغاء مزامنة مفاتيح مورد مساحة العمل إلى حدوث هذا الخطأ ويستغرق الأمر بعض الوقت للمزامنة تلقائيا.
ومع ذلك، يمكنك استدعاء مزامنة المفاتيح يدويا، والتي قد تحل فشل التخويل.
قد تواجه سجلات الحاويات الموجودة خلف شبكة ظاهرية هذا الخطأ أيضا إذا تم إعدادها بشكل غير صحيح. يجب التحقق من إعداد الشبكة الظاهرية بشكل صحيح.
لم يتم تعيين حساب بناء الصورة في مساحة عمل خاصة باستخدام VNet
إذا كانت رسالة الخطأ تشير إلى "failed to communicate with the workspace's container registry"
وكنت تستخدم الشبكات الظاهرية وكان Azure Container Registry الخاص بمساحة العمل وتكوينه بنقطة نهاية خاصة، فأنت بحاجة إلى تمكين Azure Container Registry للسماح بإنشاء الصور في الشبكة الظاهرية.
فشل إنشاء صورة عامة
كما ذكر سابقا، يمكنك التحقق من سجل البناء لمزيد من المعلومات حول الفشل.
إذا لم يتم العثور على خطأ واضح في سجل البناء وكان السطر الأخير هو Installing pip dependencies: ...working...
، فقد تتسبب التبعية في حدوث الخطأ. يمكن أن يؤدي تثبيت تبعيات الإصدار في ملف conda إلى إصلاح هذه المشكلة.
نوصي أيضا بالنشر محليا لاختبار نماذجك وتصحيحها محليا قبل النشر إلى السحابة.
«خطأ»: OutOfQuota
القائمة التالية هي من الموارد الشائعة التي قد تنفد الحصة النسبية عند استخدام خدمات Azure:
- وحده المعالجه المركزيه
- نظام المجموعة
- القرص
- الذاكرة
- تعيينات الأدوار
- النهايه
- سعة الجهاز الظاهري على مستوى المنطقة
- آخر
بالإضافة إلى ذلك، القائمة التالية هي من الموارد الشائعة التي قد نفدت الحصة النسبية فقط لنقطة نهاية Kubernetes عبر الإنترنت:
الحصة النسبية لـ CPU
قبل نشر النموذج، تحتاج إلى حصة حساب كافية. تُحدّد هذه الحصة مقدار الذاكرات الأساسية الظاهرية المتوفرة لكل اشتراك، ولكل مساحة عمل، ولكل SKU، ولكل منطقة. يطرح كل نشر من قيمة الحصة النسبية المتوفرة ويضيفها مرة أخرى بعد الحذف، استنادًا إلى نوع الـ SKU.
يتمثل التخفيف المحتمل في التحقق مما إذا كانت هناك عمليات نشر غير مستخدمة يمكنك حذفها. أو يمكنك إرسال طلب لزيادة الحصة النسبية.
الحصة النسبية لنظام المجموعة
تحدث هذه المشكلة عندما لا يكون لديك ما يكفي من حصة نظام مجموعة Azure التعلم الآلي الحساب. تحدد هذه الحصة إجمالي عدد المجموعات التي قد تكون قيد الاستخدام في وقت واحد لكل اشتراك لنشر عقد وحدة المعالجة المركزية أو GPU في Azure Cloud.
يتمثل التخفيف المحتمل في التحقق مما إذا كانت هناك عمليات نشر غير مستخدمة يمكنك حذفها. أو يمكنك إرسال طلب لزيادة الحصة النسبية. تأكد من تحديد Machine Learning Service: Cluster Quota
كنوع الحصة النسبية لطلب زيادة الحصة النسبية هذا.
الحصة النسبية للقرص
تحدث هذه المشكلة عندما يكون حجم النموذج أكبر من مساحة القرص المتوفرة ولا يمكن تنزيل النموذج. جرب SKU مع مساحة أكبر على القرص أو تقليل حجم الصورة والنموذج.
الحصة النسبية للذاكرة
تحدث هذه المشكلة عندما تكون بصمة الذاكرة في النموذج أكبر من الذاكرة المتوفرة. جرب SKU بمزيد من الذاكرة.
حصة تعيين الدور
عند إنشاء نقطة نهاية مدارة عبر الإنترنت، يلزم تعيين الدور للهوية المدارة للوصول إلى موارد مساحة العمل. إذا تم الوصول إلى حد تعيين الدور، فحاول حذف بعض تعيينات الأدوار غير المستخدمة في هذا الاشتراك. يمكنك التحقق من جميع تعيينات الأدوار في مدخل Microsoft Azure عن طريق الانتقال إلى قائمة التحكم في الوصول.
حصة نقطة النهاية
حاول حذف بعض نقاط النهاية غير المستخدمة في هذا الاشتراك. إذا كانت جميع نقاط النهاية قيد الاستخدام بشكل نشط، يمكنك محاولة طلب زيادة حد نقطة النهاية. لمعرفة المزيد حول حد نقطة النهاية، راجع الحصة النسبية لنقطة النهاية باستخدام Azure التعلم الآلي نقاط النهاية عبر الإنترنت ونقاط النهاية الدفعية.
حصة Kubernetes
تحدث هذه المشكلة عندما يتعذر توفير وحدة المعالجة المركزية أو الذاكرة المطلوبة بسبب عدم جدولة العقد لهذا النشر. على سبيل المثال، قد تكون العقد مطوقة أو غير متوفرة.
تشير رسالة الخطأ عادة إلى أن المورد غير كاف في نظام المجموعة، على سبيل المثال، OutOfQuota: Kubernetes unschedulable. Details:0/1 nodes are available: 1 Too many pods...
، ما يعني أن هناك عددا كبيرا جدا من القرون في نظام المجموعة وليس هناك موارد كافية لنشر النموذج الجديد بناء على طلبك.
يمكنك تجربة التخفيف التالي لمعالجة هذه المشكلة:
- بالنسبة إلى عمليات تكنولوجيا المعلومات الذين يحافظون على مجموعة Kubernetes، يمكنك محاولة إضافة المزيد من العقد أو مسح بعض الحجيرات غير المستخدمة في نظام المجموعة لتحرير بعض الموارد.
- بالنسبة لمهندسي التعلم الآلي الذين ينشرون النماذج، يمكنك محاولة تقليل طلب الموارد للتوزيع الخاص بك:
- إذا قمت بتعريف طلب المورد مباشرة في تكوين التوزيع عبر قسم المورد، يمكنك محاولة تقليل طلب المورد.
- إذا كنت تستخدم
instance type
لتعريف المورد لنشر النموذج، يمكنك الاتصال بقسم تكنولوجيا المعلومات لضبط تكوين مورد نوع المثيل، والمزيد من التفاصيل يمكنك الرجوع إلى كيفية إدارة نوع مثيل Kubernetes.
سعة الجهاز الظاهري على مستوى المنطقة
بسبب نقص سعة Azure التعلم الآلي في المنطقة، فشلت الخدمة في توفير حجم الجهاز الظاهري المحدد. أعد المحاولة لاحقًا أو حاول القيام بالنشر في منطقة مختلفة.
حصة أخرى
لتشغيل score.py
المقدم ضمن النشر، ينشئ Azure حاوية تتضمن جميع الموارد التي يحتاجها score.py
، ويشغل البرنامج النصي لتسجيل النقاط في تلك الحاوية.
إذا تعذر بدء تشغيل الحاوية، فهذا يعني أنه لا يمكن تسجيل النقاط. قد تطلب الحاوية موارد أكثر مما instance_type
يمكن أن تدعمه. إذا كان الأمر كذلك، ففكّر في تحديث instance_type
للنشر عبر الإنترنت.
لمعرفة السبب المحدّد للخطأ، قم بتشغيل:
az ml online-deployment get-logs -e <endpoint-name> -n <deployment-name> -l 100
«خطأ»: BadArgument
القائمة التالية هي أسباب قد تواجه هذا الخطأ عند استخدام نقطة نهاية مدارة عبر الإنترنت أو نقطة نهاية Kubernetes عبر الإنترنت:
- الاشتراك غير موجود
- فشلت مهمة بدء التشغيل بسبب خطأ في التخويل
- فشلت مهمة بدء التشغيل بسبب تعيينات غير صحيحة للدور في المورد
- مواصفات دالة القالب غير صحيحة
- تعذّر تنزيل صورة حاوية المستخدم
- تعذر تنزيل نموذج المستخدم
- تنسيق نموذج MLFlow مع شبكة خاصة غير مدعوم
القائمة التالية هي أسباب قد تواجه هذا الخطأ فقط عند استخدام نقطة نهاية Kubernetes عبر الإنترنت:
الاشتراك غير موجود
يجب أن يكون اشتراك Azure الذي تم إدخاله موجودا. يحدث هذا الخطأ عندما يتعذر علينا العثور على اشتراك Azure الذي تمت الإشارة إليه. من المحتمل أن يكون هذا الخطأ بسبب خطأ مطبعي في معرف الاشتراك. تحقق مرة ثانية من كتابة معرف الاشتراك بشكل صحيح وأنه نشط حاليا.
لمزيد من المعلومات حول اشتراكات Azure، يمكنك مشاهدة قسم المتطلبات الأساسية.
أخطاء التخويل
بعد توفير مورد الحساب (أثناء إنشاء عملية نشر)، يحاول Azure سحب صورة حاوية المستخدم من مساحة العمل Azure Container Registry (ACR). يحاول تحميل نموذج المستخدم والبيانات الاصطناعية للتعليمات البرمجية في حاوية المستخدم من حساب تخزين مساحة العمل.
لتنفيذ هذه الإجراءات، يستخدم Azure الهويات المدارة للوصول إلى حساب التخزين وسجل الحاوية.
إذا قمت بإنشاء نقطة النهاية المقترنة بالهوية المعينة من قبل النظام، يتم منح إذن التحكم في الوصول استنادا إلى الدور (RBAC) في Azure تلقائيا، ولن تكون هناك حاجة إلى أذونات إضافية.
إذا قمت بإنشاء نقطة النهاية المقترنة بهوية المستخدم المعينة، يجب أن يكون لدى الهوية المدارة للمستخدم إذن قارئ بيانات كائن ثنائي كبير الحجم للتخزين على حساب التخزين لمساحة العمل، وإذن AcrPull على سجل حاويات Azure (ACR) لمساحة العمل. تأكد من أن الهوية المعينة من قبل المستخدم لديك لديها الإذن الصحيح.
لمزيد من المعلومات، يرجى الاطلاع على خطأ تخويل سجل الحاوية.
مواصفات دالة القالب غير صحيحة
يحدث هذا الخطأ عند تحديد دالة قالب بشكل غير صحيح. إما إصلاح النهج أو إزالة تعيين النهج لإلغاء الحظر. قد تتضمن رسالة الخطأ اسم تعيين النهج وتعريف النهج لمساعدتك في تصحيح هذا الخطأ، ومقالة بنية تعريف نهج Azure، التي تناقش التلميحات لتجنب فشل القالب.
تعذّر تنزيل صورة حاوية المستخدم
من المحتمل أنه تعذر العثور على حاوية المستخدم. تحقق من سجلات الحاوية لمعرفة المزيد من التفاصيل.
تأكد من توافر صورة الحاوية في مساحة العمل ACR.
على سبيل المثال، إذا كانت الصورة testacr.azurecr.io/azureml/azureml_92a029f831ce58d2ed011c3c42d35acb:latest
تتحقق من المستودع باستخدام az acr repository show-tags -n testacr --repository azureml/azureml_92a029f831ce58d2ed011c3c42d35acb --orderby time_desc --output table
.
تعذر تنزيل نموذج المستخدم
من الممكن عدم العثور على نموذج المستخدم. تحقق من سجلات الحاوية لمعرفة المزيد من التفاصيل.
تأكد مما إذا كنت قد سجلت النموذج في نفس مساحة العمل مثل النشر. لإظهار تفاصيل نموذج في مساحة عمل:
az ml model show --name <model-name> --version <version>
تحذير
يجب تحديد إما الإصدار أو التسمية للحصول على معلومات النموذج.
يمكنك أيضًا التحقق مما إذا كانت blobs موجودة في حساب تخزين مساحة العمل.
على سبيل المثال، إذا كان الـ blobs هو
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>`
إذا كان الكائن الثنائي كبير الحجم موجودًا، يمكنك استخدام هذا الأمر للحصول على السجلات من مُهيئ التخزين:
az ml online-deployment get-logs --endpoint-name <endpoint-name> --name <deployment-name> –-container storage-initializer`
تنسيق نموذج MLFlow مع شبكة خاصة غير مدعوم
يحدث هذا الخطأ عند محاولة نشر نموذج MLflow مع نهج نشر بدون تعليمات برمجية بالتزامن مع أسلوب عزل الشبكة القديم لنقاط النهاية المدارة عبر الإنترنت. لا يمكن استخدام ميزة الشبكة الخاصة هذه بالاقتران مع تنسيق نموذج MLFlow إذا كنت تستخدم أسلوب عزل الشبكة القديمة . إذا كنت بحاجة إلى نشر نموذج MLflow باستخدام نهج نشر بدون تعليمات برمجية، فحاول استخدام VNet المدارة لمساحة العمل.
طلب المورد أكثر من الحدود
يجب أن تقل عدد طلبات الموارد من الحدود أو تساويها. إذا لم تقم بتعيين الحدود، فإننا نضبط القيم الافتراضية عند إرفاق الحوسبة بمساحة عمل «التعليم الآلي» من Azure. يمكنك التحقق من الحدود في مدخل Azure أو باستخدام الأمر az ml compute show
.
azureml-fe غيـر جاهز
يتوسع مكون الواجهة الأمامية (azureml-fe) الذي يوجه طلبات الاستدلال الواردة إلى الخدمات المنشورة تلقائياً حسب الحاجة. يتم تثبيته أثناء تثبيت مُلحق k8s.
يجب أن يكون هذا المكون سليمًا على نظام المجموعة، نسخة متماثلة صحية واحدة على الأقل. تتلقى رسالة الخطأ هذه إذا لم تكن متوفرة عند تشغيل نقطة نهاية kubernetes عبر الإنترنت وطلب إنشاء/تحديث النشر.
تحقق من حالة الجراب والسجلات لإصلاح هذه المشكلة، يمكنك أيضا محاولة تحديث ملحق k8s المثبت على نظام المجموعة.
«خطأ»: ResourceNotReady
لتشغيل score.py
المقدم ضمن النشر، ينشئ Azure حاوية تتضمن جميع الموارد التي يحتاجها score.py
، ويشغل البرنامج النصي لتسجيل النقاط في تلك الحاوية. إن الخطأ الواقع في هذا السيناريو هو تعطّل هذه الحاوية عند التشغيل، مما يعني أن التسجيل لا يمكن أن يحدث. يقع هذا الخطأ عند:
- يوجد خطأ في
score.py
. يستخدمget-logs
لتشخيص المشاكل الشائعة:- لا يتم تضمين الحزمة التي
score.py
تحاول الاستيراد في بيئة conda. - خطأ في بناء الجملة.
- فشل في الأسلوب
init()
.
- لا يتم تضمين الحزمة التي
- إذا لم ينتج
get-logs
أي سجلات، فذلك يعني عادةً أن الحاوية قد فشلت في بدء تشغيلها. لتصحيح هذه المشكلة، حاول النشر محليًا بدلا من ذلك. - لم تُعد فحوصات الجاهزية أو الحياة بشكل صحيح.
- تستغرق تهيئة الحاوية وقتا طويلا بحيث يفشل فحص الجاهزية أو الحياة بما يتجاوز حد الفشل. في هذه الحالة، اضبط إعدادات الفحص للسماح بوقت أطول لتهيئة الحاوية. أو جرب وحدة SKU جهاز ظاهري أكبر بين وحدات SKU للجهاز الظاهري المدعومة، ما يسرع التهيئة.
- يوجد خطأ في البيئة التي تم إعدادها للحاوية، مثل التبعية المفقودة.
- عند تلقي
TypeError: register() takes 3 positional arguments but 4 were given
الخطأ، تحقق من التبعية بين flask v2 وazureml-inference-server-http
. لمزيد من المعلومات، راجع الأسئلة المتداولة لخادم HTTP الاستدلال.
«خطأ»: ResourceNotFound
القائمة التالية هي أسباب قد تواجه هذا الخطأ فقط عند استخدام إما نقطة نهاية مدارة عبر الإنترنت أو نقطة نهاية Kubernetes عبر الإنترنت:
يتعذر على Resource Manager العثور على مورد
يحدث هذا الخطأ عند تعذر Azure Resource Manager في العثور على المورد المطلوب. على سبيل المثال، يمكنك تلقي هذا الخطأ إذا تمت الإشارة إلى حساب تخزين ولكن لا يمكن العثور عليه في المسار الذي تم تحديده عليه. تأكد من التحقق مرة أخرى من الموارد التي قد تم توفيرها بواسطة المسار المحدد أو التدقيق الإملائي لأسمائها.
لمزيد من المعلومات، راجع حل أخطاء عدم العثور على المورد.
خطأ في تخويل سجل الحاوية
يحدث هذا الخطأ عند توفير صورة تنتمي إلى سجل حاوية خاص أو غير قابل للوصول للتوزيع. في هذا الوقت، لا يمكن لواجهات برمجة التطبيقات قبول بيانات اعتماد السجل الخاص.
للتخفيف من هذا الخطأ، تأكد من أن سجل الحاوية ليس خاصًا أو اتبع الخطوات التالية:
- امنح دور
acrPull
للسجل الخاص بك إلى هوية النظام لنقطة النهاية عبر الإنترنت. - في تعريف البيئة الخاصة بك، حدد عنوان صورتك الخاصة وتعليمات عدم تعديل (إنشاء) الصورة.
إذا كان التخفيف ناجحا، فإن الصورة لا تتطلب البناء، وعنوان الصورة النهائي هو عنوان الصورة المحدد. في وقت النشر، تسحب هوية نظام نقطة النهاية عبر الإنترنت الصورة من السجل الخاص.
لمزيد من المعلومات التشخيصية، راجع كيفية استخدام واجهة برمجة تطبيقات تشخيص مساحة العمل.
خطأ: WorkspaceManagedNetworkNotReady
يحدث هذا الخطأ عند محاولة إنشاء نشر عبر الإنترنت ضمن مساحة العمل التي مكنت VNet المدارة لمساحة العمل ولكن لم يتم توفير الشبكة الظاهرية المدارة بعد. يجب توفير الشبكة الظاهرية المدارة لمساحة العمل قبل إنشاء نشر عبر الإنترنت. اتبع الإرشادات التي توفر شبكة ظاهرية مدارة لمساحة العمل يدويا لتوفير الشبكة الظاهرية المدارة لمساحة العمل يدويا. بمجرد الانتهاء، يمكنك البدء في إنشاء عمليات النشر عبر الإنترنت. لمزيد من المعلومات، راجع عزل الشبكة باستخدام نقطة النهاية المدارة عبر الإنترنت وتأمين نقاط النهاية المدارة عبر الإنترنت بعزل الشبكة.
ERROR: OperationCanceled
القائمة التالية هي أسباب قد تواجه هذا الخطأ عند استخدام نقطة نهاية مدارة عبر الإنترنت أو نقطة نهاية Kubernetes عبر الإنترنت:
- تم إلغاء العملية بواسطة عملية أخرى لها أولوية أعلى
- تم إلغاء العملية بسبب عملية سابقة تنتظر تأكيد التأمين
تم إلغاء العملية بواسطة عملية أخرى ذات أولوية أعلى
تتمتع عمليات Azure بمستوى أولوية معين ويتم تنفيذها من الأعلى إلى الأسفل. يحدث هذا الخطأ عند تجاوز العملية بواسطة عملية أخرى لها أولوية أعلى.
قد تسمح إعادة محاولة تنفيذ العملية دون إلغائها.
تم إلغاء العملية في انتظار تأكيد التأمين
عمليات Azure لها فترة انتظار قصيرة بعد إرسالها، والتي تسترد خلالها التأمين للتأكد من أننا لا نواجه حالات تعارض. يحدث هذا الخطأ عندما تكون العملية التي أرسلتها هي نفسها عملية أخرى. وتنتظر العملية الأخرى حاليا تأكيدا بأنها تلقت التأمين للمتابعة. قد يشير إلى أنك قمت بإرسال طلب مماثل بعد وقت قصير جدا من الطلب الأولي.
قد تسمح إعادة محاولة العملية بعد الانتظار عدة ثوان حتى دقيقة بتنفيذها دون إلغاء.
خطأ: SecretsInjectionError
يستخدم استرداد البيانات السرية وحقنها أثناء إنشاء النشر عبر الإنترنت الهوية المقترنة بنقطة النهاية عبر الإنترنت لاسترداد الأسرار من اتصالات مساحة العمل و/أو خزائن المفاتيح. يقع هذا الخطأ عند:
- لا تملك هوية نقطة النهاية إذن التحكم في الوصول استنادا إلى الدور من Azure لقراءة الأسرار من اتصالات مساحة العمل و/أو خزائن المفاتيح، على الرغم من تحديد الأسرار بواسطة تعريف النشر كمراجع (تم تعيينها إلى متغيرات البيئة). تذكر أن تعيين الدور قد يستغرق وقتا حتى تسري التغييرات.
- تنسيق المراجع السرية غير صحيح، أو الأسرار المحددة غير موجودة في اتصالات مساحة العمل و/أو خزائن المفاتيح.
لمزيد من المعلومات، راجع إدخال البيانات السرية في نقاط النهاية عبر الإنترنت (معاينة) وبيانات Access السرية من النشر عبر الإنترنت باستخدام حقن البيانات السرية (معاينة).
«خطأ»: InternalServerError
على الرغم من أننا نبذل قصارى جهدنا لتوفير خدمة مستقرة وموثوقة، ففي بعض الأحيان لا تسير الأمور وفقًا للخطة. إذا تلقيت هذا الخطأ، فهذا يعني أن شيئًا ما ليس صحيحًا من جانبنا، ونحتاج إلى إصلاحه. أرسل تذكرة دعم العملاء مع جميع المعلومات ذات الصلة ويمكننا معالجة المشكلة.
الأخطاء الشائعة الخاصة بنشر Kubernetes
الأخطاء المتعلقة بالهوية والمصادقة:
- ACRSecretError
- الرمز المميزRefreshFailed
- GetAADTokenFailed
- ACRAuthenticationChallengeFailed
- ACRTokenExchangeFailed
- KubernetesUnaccessible
الأخطاء المتعلقة ب crashloopbackoff:
أخطاء تتعلق بتسجيل البرنامج النصي:
الاخرين:
- NamespaceNotFound
- EndpointAlreadyExists
- تسجيل النقاط غير المهينة
- التحقق من صحة التحقق من الصحة
- InvalidDeploymentSpec
- PodUnschulable
- PodOutOfMemory
- الاستدلالClientCallFailed
خطأ: ACRSecretError
القائمة التالية هي أسباب قد تواجه هذا الخطأ عند إنشاء/تحديث عمليات توزيع Kubernetes عبر الإنترنت:
- لم يتم إكمال تعيين الدور. في هذه الحالة، انتظر لبضع ثوان وحاول مرة أخرى لاحقا.
- لم يتم تثبيت أو تكوين ملحق Azure ARC (لنظام مجموعة Azure Arc Kubernetes) أو ملحق Azure التعلم الآلي (ل AKS) بشكل صحيح. حاول التحقق من تكوين ملحق Azure ARC أو Azure التعلم الآلي وحالته.
- يحتوي نظام مجموعة Kubernetes على تكوين شبكة غير صحيح، تحقق من الوكيل أو نهج الشبكة أو الشهادة.
- إذا كنت تستخدم مجموعة AKS خاصة، فمن الضروري إعداد نقاط نهاية خاصة ل ACR وحساب التخزين ومساحة العمل في شبكة AKS الظاهرية.
- تأكد من أن إصدار ملحق Azure التعلم الآلي أكبر من الإصدار 1.1.25.
ERROR: TokenRefreshFailed
يرجع هذا الخطأ إلى أنه لا يمكن للملحق الحصول على بيانات اعتماد أساسية من Azure لأن هوية نظام مجموعة Kubernetes لم يتم تعيينها بشكل صحيح. أعد تثبيت ملحق Azure التعلم الآلي وحاول مرة أخرى.
خطأ: GetAADTokenFailed
يرجع هذا الخطأ إلى فشل رمز Azure AD المميز لطلب نظام مجموعة Kubernetes أو انتهاء مهلته، تحقق من إمكانية وصول ذوي الاحتياجات الخاصة إلى الشبكة ثم حاول مرة أخرى.
- يمكنك اتباع تكوين حركة مرور الشبكة المطلوبة للتحقق من الوكيل الصادر، والتأكد من أن نظام المجموعة يمكنه الاتصال بمساحة العمل.
- يمكن العثور على عنوان URL لنقطة نهاية مساحة العمل في CRD نقطة النهاية عبر الإنترنت في نظام المجموعة.
إذا كانت مساحة العمل الخاصة بك عبارة عن مساحة عمل خاصة، مما أدى إلى تعطيل الوصول إلى الشبكة العامة، يجب أن تتصل مجموعة Kubernetes بمساحة العمل الخاصة هذه فقط من خلال الارتباط الخاص.
- يمكنك التحقق مما إذا كان الوصول إلى مساحة العمل يسمح بالوصول العام، بغض النظر عما إذا كان نظام مجموعة AKS نفسه عاما أو خاصا، فإنه لا يمكنه الوصول إلى مساحة العمل الخاصة.
- مزيد من المعلومات يمكنك الرجوع إلى بيئة استدلال خدمة Azure Kubernetes الآمنة
خطأ: ACRAuthenticationChallengeFailed
يرجع هذا الخطأ إلى أن مجموعة Kubernetes لا يمكنها الوصول إلى خدمة ACR لمساحة العمل للقيام بتحدي المصادقة. تحقق من شبكتك، خاصة الوصول إلى الشبكة العامة ACR، ثم حاول مرة أخرى.
يمكنك اتباع خطوات استكشاف الأخطاء وإصلاحها في GetAADTokenFailed للتحقق من الشبكة.
خطأ: ACRTokenExchangeFailed
يرجع هذا الخطأ إلى فشل رمز ACR لتبادل نظام مجموعة Kubernetes لأن الرمز المميز ل Azure AD غير مصرح به بعد. نظرا لأن تعيين الدور يستغرق بعض الوقت، حتى تتمكن من الانتظار لحظة ثم المحاولة مرة أخرى.
قد يكون هذا الفشل أيضا بسبب طلبات كثيرة جدا لخدمة ACR في ذلك الوقت، يجب أن يكون خطأ عابرا، يمكنك المحاولة مرة أخرى لاحقا.
خطأ: KubernetesUnaccessible
قد تحصل على الخطأ التالي أثناء عمليات نشر نموذج Kubernetes:
{"code":"BadRequest","statusCode":400,"message":"The request is invalid.","details":[{"code":"KubernetesUnaccessible","message":"Kubernetes error: AuthenticationException. Reason: InvalidCertificate"}],...}
للتخفيف من هذا الخطأ، يمكنك:
- قم بتدوير شهادة AKS لنظام المجموعة. لمزيد من المعلومات، راجع دوران الشهادة في خدمة Azure Kubernetes (AKS).
- يجب تحديث الشهادة الجديدة إلى بعد 5 ساعات، بحيث يمكنك الانتظار لمدة 5 ساعات وإعادة نشرها.
خطأ: ImagePullLoopBackOff
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث عمليات نشر Kubernetes عبر الإنترنت هو أنه لا يمكنك تنزيل الصور من سجل الحاوية، ما يؤدي إلى فشل سحب الصور.
في هذه الحالة، يمكنك التحقق من نهج شبكة نظام المجموعة وسجل حاوية مساحة العمل إذا كان نظام المجموعة يمكنه سحب الصورة من سجل الحاوية.
خطأ: DeploymentCrashLoopBackOff
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث عمليات نشر Kubernetes عبر الإنترنت هو تعطل حاوية المستخدم في التهيئة. هناك سببان محتملان لهذا الخطأ:
- يحتوي البرنامج النصي
score.py
للمستخدم على خطأ في بناء الجملة أو خطأ في الاستيراد ثم رفع استثناءات في التهيئة. - أو تحتاج جراب النشر إلى ذاكرة أكثر من حدها.
للتخفيف من هذا الخطأ، يمكنك أولا التحقق من سجلات النشر بحثا عن أي استثناءات في البرامج النصية للمستخدم. إذا استمر الخطأ، فحاول توسيع حد ذاكرة نوع الموارد/المثيل.
خطأ: KubernetesCrashLoopBackOff
القائمة التالية هي الأسباب التي قد تواجهك في هذا الخطأ عند إنشاء/تحديث نقاط نهاية/توزيع Kubernetes عبر الإنترنت:
- جراب واحد أو أكثر عالق في حالة CrashLoopBackoff، يمكنك التحقق مما إذا كان سجل النشر موجودا، والتحقق مما إذا كانت هناك رسائل خطأ في السجل.
- هناك خطأ في
score.py
وتعطلت الحاوية عند إعداد رمز النتيجة الخاص بك، يمكنك اتباع خطأ: جزء ResourceNotReady . - تحتاج عملية التسجيل إلى مزيد من الذاكرة بحيث يكون حد تكوين التوزيع غير كاف، ويمكنك محاولة تحديث النشر بحد ذاكرة أكبر.
خطأ: NamespaceNotFound
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث نقاط النهاية Kubernetes عبر الإنترنت هو أن مساحة الاسم الخاصة بك حساب Kubernetes المستخدم غير متوفر في نظام المجموعة الخاص بك.
يمكنك التحقق من حساب Kubernetes في مدخل مساحة العمل والتحقق من مساحة الاسم في مجموعة Kubernetes الخاصة بك. إذا لم تكن مساحة الاسم متوفرة، يمكنك فصل الحوسبة القديمة وإعادة إرفاقها لإنشاء مساحة اسم جديدة، مع تحديد مساحة اسم موجودة بالفعل في مجموعتك.
خطأ: UserScriptInitFailed
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث عمليات نشر Kubernetes عبر الإنترنت هو أن الدالة init في الملف الذي تم تحميله score.py
أثارت استثناء.
يمكنك التحقق من سجلات النشر لمشاهدة رسالة الاستثناء بالتفصيل وإصلاح الاستثناء.
خطأ: UserScriptImportError
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث عمليات نشر Kubernetes عبر الإنترنت هو أن الملف الذي score.py
قمت بتحميله قد استورد حزما غير متوفرة.
يمكنك التحقق من سجلات النشر لمشاهدة رسالة الاستثناء بالتفصيل وإصلاح الاستثناء.
خطأ: UserScriptFunctionNotFound
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث عمليات نشر Kubernetes عبر الإنترنت هو أن الملف الذي score.py
قمت بتحميله لا يحتوي على دالة تسمى init()
أو run()
. يمكنك التحقق من التعليمات البرمجية وإضافة الدالة.
خطأ: EndpointNotFound
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث عمليات نشر Kubernetes عبر الإنترنت هو أن النظام لا يمكنه العثور على مورد نقطة النهاية للتوزيع في نظام المجموعة. يجب إنشاء النشر في نقطة نهاية موجودة أو إنشاء نقطة النهاية هذه أولا في نظام المجموعة.
خطأ: EndpointAlreadyExists
السبب في أنك قد تواجه هذا الخطأ عند إنشاء نقطة نهاية Kubernetes عبر الإنترنت هو أن إنشاء نقطة النهاية موجود بالفعل في نظام المجموعة الخاص بك.
يجب أن يكون اسم نقطة النهاية فريدا لكل مساحة عمل ولكل مجموعة، لذلك في هذه الحالة، يجب إنشاء نقطة نهاية باسم آخر.
ERROR: ScoringFeUnhealthy
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث نقطة نهاية/نشر Kubernetes عبر الإنترنت هو أن Azureml-fe هي خدمة النظام التي تعمل في نظام المجموعة غير موجود أو غير سليم.
لحل هذه المشكلة، يمكنك إعادة تثبيت ملحق Azure التعلم الآلي أو تحديثه في مجموعتك.
خطأ: ValidateScoringFailed
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث عمليات نشر Kubernetes عبر الإنترنت هو فشل التحقق من صحة عنوان URL لطلب التسجيل عند معالجة نشر النموذج.
في هذه الحالة، يمكنك أولا التحقق من عنوان URL لنقطة النهاية ثم محاولة إعادة نشر النشر.
خطأ: InvalidDeploymentSpec
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث عمليات نشر Kubernetes عبر الإنترنت هو أن مواصفات التوزيع غير صالحة.
في هذه الحالة، يمكنك التحقق من رسالة الخطأ.
- تأكد من
instance count
أن صالح. - إذا قمت بتمكين التحجيم التلقائي، فتأكد من
minimum instance count
أن وmaximum instance count
صالحان.
خطأ: PodUnschulable
القائمة التالية هي الأسباب التي قد تواجهك في هذا الخطأ عند إنشاء/تحديث نقاط نهاية/توزيع Kubernetes عبر الإنترنت:
- غير قادر على جدولة pod إلى العقد، بسبب عدم كفاية الموارد في نظام المجموعة.
- لا توجد عقدة تطابق العقدة/ محدد.
للتخفيف من هذا الخطأ، يمكنك اتباع الخطوات التالية:
node selector
تحقق من تعريف الذي استخدمتهinstance type
وتكوينnode label
عقد نظام المجموعة.- تحقق من
instance type
حجم عقدة SKU لنظام مجموعة AKS أو مورد العقدة لمجموعة Arc-Kubernetes.- إذا كان نظام المجموعة أقل من الموارد، يمكنك تقليل متطلبات مورد نوع المثيل أو استخدام نوع مثيل آخر مع مورد أصغر مطلوب.
- إذا لم يكن لدى نظام المجموعة مورد إضافي لتلبية متطلبات النشر، فاحذف بعض النشر لتحرير الموارد.
خطأ: PodOutOfMemory
السبب الذي قد تواجهه في هذا الخطأ عند إنشاء/تحديث النشر عبر الإنترنت هو حد الذاكرة الذي تعطيه للتوزيع غير كاف. يمكنك تعيين حد الذاكرة إلى قيمة أكبر أو استخدام نوع مثيل أكبر للتخفيف من هذا الخطأ.
خطأ: الاستدلالClientCallFailed
السبب في أنك قد تواجه هذا الخطأ عند إنشاء/تحديث نقاط نهاية/توزيع Kubernetes عبر الإنترنت هو أن ملحق k8s لمجموعة Kubernetes غير قابل للاتصال.
في هذه الحالة، يمكنك فصل الحساب ثم إعادة إرفاقه .
إشعار
لاستكشاف الأخطاء وإصلاحها عن طريق إعادة إرفاقها، يرجى ضمان إعادة الاتصال بالتكوين نفسه تماما مثل الحوسبة المنفصلة مسبقا، مثل نفس اسم الحساب ومساحة الاسم، وإلا فقد تواجه أخطاء أخرى.
إذا كان لا يزال لا يعمل، يمكنك أن تطلب من المسؤول الذي يمكنه الوصول إلى نظام المجموعة لاستخدامه kubectl get po -n azureml
للتحقق مما إذا كانت جرابات خادم الترحيل قيد التشغيل.
مشكلات التحجيم التلقائي
إذا كنت تواجه مشكلة في التحجيم التلقائي، راجع استكشاف أخطاء التحجيم التلقائي في Azure وإصلاحها.
بالنسبة لنقطة نهاية Kubernetes عبر الإنترنت، هناك موجه استدلال Azure التعلم الآلي وهو مكون واجهة أمامية للتعامل مع التحجيم التلقائي لجميع عمليات نشر النموذج على مجموعة Kubernetes، يمكنك العثور على مزيد من المعلومات في التحجيم التلقائي لتوجيه استدلال Kubernetes
أخطاء استهلاك النموذج الشائعة
القائمة التالية هي من أخطاء استهلاك النموذج الشائعة الناتجة عن حالة عملية نقطة invoke
النهاية.
مشكلات في حد النطاق الترددي
تمتلك نقاط النهاية المُدارة عبر الإنترنت حدود للنطاق الترددي في كل نقطة من نقاط النهاية. يمكنك العثور على تكوين الحد في حدود نقاط النهاية عبر الإنترنت. إذا تجاوز استخدام النطاق الترددي الحد الأقصى، يتم تأخير طلبك. لمراقبة تأخير النطاق الترددي:
- استخدم مقياس "وحدات بايت الشبكة" لفهم استخدام النطاق الترددي الحالي. لمزيد من المعلومات، راجع نقاط النهاية المُدارة عبر الإنترنت.
- هناك مقطورتان للاستجابة يتم إرجاعهما إذا تم فرض حد النطاق الترددي:
ms-azureml-bandwidth-request-delay-ms
: وقت التأخير بالمللي ثانية المستغرق لنقل دفق الطلب.ms-azureml-bandwidth-response-delay-ms
: وقت التأخير بالمللي ثانية المستغرق لنقل دفق الاستجابة.
تعليمة برمجية حالة HTTP
عند الوصول إلى نقاط النهاية عبر الإنترنت بطلبات REST، تلتزم رموز الحالة التي تم إرجاعها بمعايير التعليمات البرمجية لحالة HTTP. هذه تفاصيل حول كيفية تعيين استدعاء نقطة النهاية وأخطاء التنبؤ إلى رموز حالة HTTP.
رموز الخطأ الشائعة لنقاط النهاية المدارة عبر الإنترنت
يحتوي الجدول التالي على رموز الخطأ الشائعة عند استهلاك نقاط النهاية المدارة عبر الإنترنت مع طلبات REST:
كود الحالة | عبارة السبب | لماذا قد يتم إرجاع هذه التعليمة البرمجية |
---|---|---|
200 | موافق | تم تنفيذ النموذج الخاص بك بنجاح، في غضون حد زمن الانتقال. |
401 | غير مصرح به | ليس لديك الإذن للقيام بالإجراء المطلوب، مثل النتيجة، أو انتهت صلاحية الرمز المميز الخاص بك أو بتنسيق خاطئ. لمزيد من المعلومات، راجع مفهوممصادقة نقطة النهاية وكيفية المصادقة لنقطة النهاية. |
404 | غير موجود | لا تحتوي نقطة النهاية على أي توزيع صالح مع وزن موجب. |
408 | انتهي وقت الطلب | استغرق تنفيذ النموذج وقتًا أطول من المهلة الموجودة في request_timeout_ms ضمن request_settings من تكوين نشر النموذج الخاص بك. |
424 | خطأ بالنموذج | إذا كانت حاوية النموذج تُرجع رمز استجابة غير 200، فإن Azure تُرجع رمز استجابة 424. تحقق من Model Status Code البعد ضِمن المقياس Requests Per Minute على Azure Monitor Metric Explorer الخاص بنقطة النهاية. تحقّق من عناوين الاستجابة ms-azureml-model-error-statuscode و ms-azureml-model-error-reason للحصول على مزيد من المَعلومات. إذا كان 424 يأتي مع فشل فحص فعالية أو جاهزية، ففكر في ضبط إعدادات الفحص للسماح بوقت أطول لفحص فعالية الحاوية أو استعدادها. |
429 | عدد كبير للغاية من الطلبات المعلقة | يحصل النموذج الخاص بك حاليا على طلبات أكثر مما يمكنه التعامل معه. نفذت Azure التعلم الآلي نظاما يسمح بمعالجة الحد الأقصى 2 * max_concurrent_requests_per_instance * instance_count requests بالتوازي في أي لحظة لضمان التشغيل السلس. يتم رفض الطلبات الأخرى التي تتجاوز هذا الحد الأقصى. يمكنك مراجعة تكوين توزيع النموذج الخاص بك ضمن قسمي request_settings scale_settings للتحقق من هذه الإعدادات وضبطها. بالإضافة إلى ذلك، كما هو موضح في تعريف YAML ل RequestSettings، من المهم التأكد من تمرير متغير WORKER_COUNT البيئة بشكل صحيح. إذا كنت تستخدم التحجيم التلقائي والحصول على هذا الخطأ، فهذا يعني أن النموذج الخاص بك يحصل على طلبات أسرع مما يمكن للنظام توسيع نطاقه. في هذه الحالة، ضع في اعتبارك إعادة إرسال الطلبات مع التراجع الأسي لمنح النظام الوقت الذي يحتاجه للضبط. يمكنك أيضا زيادة عدد المثيلات باستخدام التعليمات البرمجية لحساب عدد المثيلات. تساعد هذه الخطوات، جنبا إلى جنب مع تعيين التحجيم التلقائي، في ضمان أن النموذج الخاص بك جاهز للتعامل مع تدفق الطلبات. |
429 | محدود السعر | وصل عدد الطلبات في الثانية إلى حدود نقاط النهاية المدارة عبر الإنترنت. |
500 | خطأ في الخادم الداخلي | فشل البنية الأساسية التي توفرها Azure التعلم الآلي. |
رموز الخطأ الشائعة لنقاط نهاية kubernetes عبر الإنترنت
يحتوي الجدول التالي على رموز الخطأ الشائعة عند استهلاك نقاط نهاية Kubernetes عبر الإنترنت مع طلبات REST:
كود الحالة | عبارة السبب | لماذا قد يتم إرجاع هذه التعليمة البرمجية |
---|---|---|
409 | خطأ في التعارض | عندما تكون عملية قيد التقدم بالفعل، تستجيب أي عملية جديدة على نفس نقطة النهاية عبر الإنترنت بخطأ تعارض 409. على سبيل المثال، إذا كانت عملية إنشاء نقطة النهاية عبر الإنترنت أو تحديثها قيد التقدم وإذا قمت بتشغيل عملية حذف جديدة، فإنها تطرح خطأ. |
502 | طرح استثناء أو تعطل في run() أسلوب ملف score.py |
عند وجود خطأ في score.py ، على سبيل المثال، لا توجد حزمة مستوردة في بيئة conda أو خطأ في بناء الجملة أو فشل في init() الأسلوب. يمكنك المتابعة هنا لتصحيح أخطاء الملف. |
503 | تلقي ارتفاعات كبيرة في الطلبات في الثانية | تم تصميم التحجيم التلقائي للتعامل مع التغييرات التدريجية في التحميل. إذا تلقيت طفرات كبيرة في الطلبات في الثانية، فقد يتلقى العملاء رمز حالة HTTP 503. على الرغم من أن التحجيم التلقائي يتفاعل بسرعة، إلا أن AKS يستغرق قدرًا كبيرًا من الوقت لإنشاء حاويات إضافية. يمكنك المتابعة هنا لمنع 503 رمز حالة. |
504 | انتهت مهلة الطلب | يشير رمز الحالة 504 إلى انتهاء مهلة الطلب. إعداد المهلة الافتراضي هو 5 ثوان. يمكنك زيادة المهلة أو محاولة تسريع نقطة النهاية عن طريق تعديل score.py لإزالة المكالمات غير الضرورية. إذا لم تصحح هذه الإجراءات المشكلة، يمكنك المتابعة هنا لتصحيح score.py الملف. قد تكون التعليمات البرمجية في حالة غير مستجيبة أو حلقة لا نهائية. |
500 | خطأ في الخادم الداخلي | فشل البنية الأساسية التي توفرها Azure التعلم الآلي. |
كيفية منع رموز الحالة 503
تدعم عمليات نشر Kubernetes عبر الإنترنت التحجيم التلقائي، والذي يسمح بإضافة النسخ المتماثلة لدعم التحميل الإضافي، والمزيد من المعلومات التي يمكنك العثور عليها في موجه الاستدلال Azure التعلم الآلي. تستند قرارات التوسع/التقليص إلى استخدام النسخ المتماثلة للحاوية الحالية.
هناك أمران يمكن أن يساعدا في منع رموز الحالة 503:
تلميح
يمكن استخدام هذين النهجين بشكل فردي أو معا.
تغيير مستوى الاستخدام الذي ينشئ فيه التحجيم التلقائي نسخا متماثلة جديدة. يمكنك ضبط هدف الاستخدام عن طريق تعيين
autoscale_target_utilization
إلى قيمة أقل.هام
لا يؤدي هذا التغيير إلى إنشاء النسخ المتماثلة بشكل أسرع. بدلا من ذلك، يتم إنشاؤها عند حد استخدام أقل. بدلا من الانتظار حتى يتم استخدام الخدمة بنسبة 70٪، يؤدي تغيير القيمة إلى 30٪ إلى إنشاء النسخ المتماثلة عند حدوث استخدام 30٪.
إذا كانت نقطة نهاية Kubernetes عبر الإنترنت تستخدم بالفعل النسخ المتماثلة القصوى الحالية وما زلت ترى 503 رمز حالة، فقم بزيادة
autoscale_max_replicas
القيمة لزيادة الحد الأقصى لعدد النسخ المتماثلة.تغيير الحد الأدنى لعدد النسخ المتماثلة. توفر زيادة الحد الأدنى من النسخ المتماثلة تجمعا أكبر للتعامل مع الارتفاعات الواردة.
لزيادة عدد المثيلات، يمكنك حساب النسخ المتماثلة المطلوبة باتباع هذه الرموز.
from math import ceil # target requests per second target_rps = 20 # time to process the request (in seconds, choose appropriate percentile) request_process_time = 10 # Maximum concurrent requests per instance max_concurrent_requests_per_instance = 1 # The target CPU usage of the model container. 70% in this example target_utilization = .7 concurrent_requests = target_rps * request_process_time / target_utilization # Number of instance count instance_count = ceil(concurrent_requests / max_concurrent_requests_per_instance)
إشعار
إذا تلقيت طفرات في الطلب أكبر من الحد الأدنى الجديد للنسخ المتماثلة التي يمكن معالجتها، فقد تتلقى 503 مرة أخرى. على سبيل المثال، مع زيادة نسبة استخدام الشبكة إلى نقطة النهاية، قد تحتاج إلى زيادة الحد الأدنى من النسخ المتماثلة.
كيفية حساب عدد المثيلات
لزيادة عدد المثيلات، يمكنك حساب النسخ المتماثلة المطلوبة باستخدام التعليمات البرمجية التالية:
from math import ceil
# target requests per second
target_rps = 20
# time to process the request (in seconds, choose appropriate percentile)
request_process_time = 10
# Maximum concurrent requests per instance
max_concurrent_requests_per_instance = 1
# The target CPU usage of the model container. 70% in this example
target_utilization = .7
concurrent_requests = target_rps * request_process_time / target_utilization
# Number of instance count
instance_count = ceil(concurrent_requests / max_concurrent_requests_per_instance)
محظور بواسطة نهج CORS
لا تدعم نقاط النهاية عبر الإنترنت (v2) حاليا مشاركة الموارد عبر المنشأ (CORS) في الأصل. إذا حاول تطبيق الويب استدعاء نقطة النهاية دون المعالجة المناسبة لطلبات الاختبار المبدئي CORS، يمكنك مشاهدة رسالة الخطأ التالية:
Access to fetch at 'https://{your-endpoint-name}.{your-region}.inference.ml.azure.com/score' from origin http://{your-url} has been blocked by CORS policy: Response to preflight request doesn't pass access control check. No 'Access-control-allow-origin' header is present on the request resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with the CORS disabled.
نوصي باستخدام Azure Functions أو Azure Application Gateway أو أي خدمة كطبقة مؤقتة لمعالجة طلبات الاختبار المبدئي ل CORS.
مشاكل عزل الشبكة الشائعة
فشل إنشاء نقطة النهاية عبر الإنترنت مع رسالة V1LegacyMode == true
يمكن تكوين مساحة عمل التعلم الآلي من Azure v1_legacy_mode
، والتي تعطل واجهات برمجة التطبيقات v2. نقاط النهاية المدارة عبر الإنترنت هي ميزة من ميزات النظام الأساسي لواجهة برمجة التطبيقات v2، ولن تعمل إذا تم تمكين v1_legacy_mode
لمساحة العمل.
هام
تحقق مع فريق أمان الشبكة قبل تعطيل v1_legacy_mode
. ربما تم تمكينه من قبل فريق أمان الشبكة لسبب ما.
للحصول على معلومات حول كيفية تعطيل v1_legacy_mode
، راجع عزل الشبكة باستخدام v2.
فشل إنشاء نقطة النهاية عبر الإنترنت باستخدام المصادقة المستندة إلى المفتاح
استخدم الأمر التالي لسرد قواعد الشبكة الخاصة بـAzure Key Vault لمساحة العمل الخاصة بك. استبدل <keyvault-name>
باسم مخزن المفاتيح الخاصة بك:
az keyvault network-rule list -n <keyvault-name>
تشبه استجابة هذا الأمر مستند JSON التالي:
{
"bypass": "AzureServices",
"defaultAction": "Deny",
"ipRules": [],
"virtualNetworkRules": []
}
إذا كانت قيمة bypass
ليست AzureServices
، فاستخدم الإرشادات الواردة في تكوين إعدادات شبكة مخزن المفاتيح لتعيينها إلى AzureServices
.
فشل عمليات النشر عبر الإنترنت بحدوث خطأ في تنزيل الصورة
إشعار
تنطبق هذه المشكلة عند استخدام أسلوب عزل الشبكة القديمة لنقاط النهاية المدارة عبر الإنترنت، حيث يقوم Azure التعلم الآلي بإنشاء شبكة ظاهرية مدارة لكل عملية نشر ضمن نقطة نهاية.
تحقق مما إذا كانت
egress-public-network-access
العلامة معطلة للنشر. إذا تم تمكين هذه العلامة، وكانت رؤية سجل الحاوية خاصة، فمن المتوقع حدوث ذلك الفشل.استخدم الأمر التالي للتحقق من حالة اتصال نقطة النهاية الخاصة. استبدل
<registry-name>
باسم Azure Container Registry لمساحة العمل الخاصة بك:az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
في مستند الاستجابة، تحقق من تعيين الحقل
status
إلىApproved
. إذا لم تتم الموافقة عليه، فاستخدم الأمر التالي للموافقة عليه. استبدل<private-endpoint-name>
بالاسم الذي تم إرجاعه من الأمر السابق:az network private-endpoint-connection approve -n <private-endpoint-name>
لا يمكن حل نقطة نهاية التسجيل
تحقق من أن العميل الذي أصدر طلب التسجيل عبارة عن شبكة ظاهرية يمكنها الوصول إلى مساحة عمل «التعلم الآلي» من Azure.
استخدم الأمر
nslookup
في اسم مضيف نقطة النهاية لاسترداد معلومات عنوان IP:nslookup endpointname.westcentralus.inference.ml.azure.com
تحتوي الاستجابة على عنوان. يجب أن يكون هذا العنوان في النطاق الذي توفره الشبكة الظاهرية
إشعار
بالنسبة لنقطة نهاية Kubernetes عبر الإنترنت، يجب أن يكون اسم مضيف نقطة النهاية CName (اسم المجال) الذي تم تحديده في مجموعة Kubernetes. إذا كانت نقطة نهاية HTTP، تضمين عنوان IP في URI نقطة النهاية التي يمكنك الحصول عليها مباشرة في واجهة مستخدم Studio. يمكن العثور على مزيد من الطرق للحصول على عنوان IP لنقطة النهاية في نقطة نهاية Secure Kubernetes عبر الإنترنت.
إذا لم يتم حل اسم المضيف بواسطة
nslookup
الأمر:بالنسبة لنقطة النهاية المدارة عبر الإنترنت،
تحقق مما إذا كان هناك سجل A في منطقة DNS الخاصة للشبكة الظاهرية.
للتحقق من السجلات، استخدم الأمر التالي:
az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
يجب أن تحتوي النتائج على إدخال مشابه لـ
*.<GUID>.inference.<region>
.إذا لم يتم إرجاع أي قيمة استنتاج، فاحذف نقطة النهاية الخاصة لمساحة العمل ثم أعد إنشاءها. للحصول على مزيد من المعلومات، راجع كيفية تكوين نقطة نهاية خاصة.
إذا تم إعداد مساحة العمل مع نقطة نهاية خاصة باستخدام DNS مخصص كيفية استخدام مساحة العمل الخاصة بك مع خادم DNS مخصص، فاستخدم الأمر التالي للتحقق مما إذا كانت الدقة تعمل بشكل صحيح من DNS المخصص.
dig endpointname.westcentralus.inference.ml.azure.com
بالنسبة لنقطة نهاية Kubernetes عبر الإنترنت،
تحقق من تكوين DNS في مجموعة Kubernetes.
بالإضافة إلى ذلك، يمكنك التحقق مما إذا كان azureml-fe يعمل كما هو متوقع، استخدم الأمر التالي:
kubectl exec -it deploy/azureml-fe -- /bin/bash (Run in azureml-fe pod) curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json "Swagger not found"
بالنسبة إلى HTTP، استخدم
curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json "Swagger not found"
إذا فشل curl HTTPs (على سبيل المثال، المهلة) ولكن HTTP يعمل، يرجى التحقق من أن الشهادة صالحة.
إذا فشل حل هذا إلى سجل A، فتحقق مما إذا كانت الدقة تعمل من Azure DNS(168.63.129.16).
dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
إذا نجح ذلك، يمكنك استكشاف أخطاء معاد التوجيه الشرطي للارتباط الخاص على DNS المخصص وإصلاحها.
لا يمكن تسجيل عمليات النشر عبر الإنترنت
استخدم الأمر التالي لمعرفة ما إذا تم توزيع النشر بنجاح:
az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}'
إذا اكتمل النشر بنجاح، فإن قيمة
state
ستكونSucceeded
.إذا كان النشر ناجحاً، فاستخدم الأمر التالي للتحقق من تخصيص نسبة استخدام الشبكة للنشر. قم باستبدال
<endpointname>
باسم نقطة النهاية الخاصة بك:az ml online-endpoint show -n <endpointname> --query traffic
تلميح
هذه الخطوة غير ضرورية إذا كنت تستخدم العنوان
azureml-model-deployment
في طلبك لاستهداف هذا النشر.يجب أن تسرد الاستجابة من هذا الأمر النسبة المئوية لنسبة استخدام الشبكة المخصصة لعمليات النشر.
إذا تم تعيين تعيينات نسبة استخدام الشبكة (أو عنوان النشر) بشكل صحيح، فاستخدم الأمر التالي للحصول على السجلات لنقطة النهاية. استبدل
<endpointname>
باسم نقطة النهاية و<deploymentname>
بالنشر:az ml online-deployment get-logs -e <endpointname> -n <deploymentname>
ابحث في السجلات لمعرفة ما إذا كانت هناك مشكلة في تشغيل رمز التسجيل عند إرسال طلب إلى النشر.
استكشاف أخطاء خادم الاستدلال وإصلاحها
في هذا القسم، نقدم تلميحات أساسية لاستكشاف الأخطاء وإصلاحها لخادم HTTP للاستدلال على Azure التعلم الآلي.
الخطوات الأساسية
الخطوات الأساسية لاستكشاف الأخطاء وإصلاحها هي:
- جمع معلومات الإصدار لبيئة Python الخاصة بك.
- تأكد من أن إصدار حزمة azureml-inference-server-http python المحدد في ملف البيئة يطابق إصدار خادم HTTP للاستدلال على AzureML الذي يتم عرضه في سجل بدء التشغيل. في بعض الأحيان يؤدي محلل تبعية pip إلى إصدارات غير متوقعة من الحزم المثبتة.
- إذا قمت بتحديد Flask (وتبعياتها) في بيئتك، فقم بإزالتها. تتضمن
Flask
التبعيات وJinja2
itsdangerous
وWerkzeug
MarkupSafe
و.click
يتم سرد Flask كتبعية في حزمة الخادم ومن الأفضل السماح لخادمنا بتثبيتها. بهذه الطريقة عندما يدعم الخادم إصدارات جديدة من Flask، ستحصل عليها تلقائيا.
إصدار الخادم
يتم نشر حزمة azureml-inference-server-http
الخادم إلى PyPI. يمكنك العثور على سجل التغيير وجميع الإصدارات السابقة على صفحة PyPI الخاصة بنا. قم بتحديث إلى أحدث إصدار إذا كنت تستخدم إصدارا سابقا.
- 0.4.x: الإصدار المجمع في صور التدريب ≤
20220601
وفيazureml-defaults>=1.34,<=1.43
.0.4.13
هو آخر إصدار مستقر. إذا كنت تستخدم الخادم قبل الإصدار0.4.11
، فقد ترى مشكلات تبعية Flask مثل تعذر استيراد الاسمMarkup
منjinja2
. يوصى بالترقية إلى0.4.13
أو0.8.x
(أحدث إصدار)، إن أمكن. - 0.6.x: الإصدار المثبت مسبقا في استنتاج الصور ≤ 20220516. أحدث إصدار مستقر هو
0.6.1
. - 0.7.x: الإصدار الأول الذي يدعم Flask 2. أحدث إصدار مستقر هو
0.7.7
. - 0.8.x: تم تغيير تنسيق السجل وتراجع دعم Python 3.6.
تبعيات الحزمة
الحزم الأكثر صلة بالخادم azureml-inference-server-http
هي الحزم التالية:
- قارورة
- opencensus-ext-azure
- مخطط الاستدلال
إذا حددت azureml-defaults
في بيئة Python الخاصة بك، فإن الحزمة azureml-inference-server-http
تعتمد على، وسيتم تثبيتها تلقائيا.
تلميح
إذا كنت تستخدم Python SDK v1 ولم تحدد azureml-defaults
بشكل صريح في بيئة Python الخاصة بك، فقد تضيف SDK الحزمة لك. ومع ذلك، فإنه سيتم تأمينه على الإصدار الذي تعمل عليه SDK. على سبيل المثال، إذا كان إصدار SDK هو 1.38.0
، فإنه سيضيف azureml-defaults==1.38.0
إلى متطلبات النقطة للبيئة.
الأسئلة الشائعة
1. واجهت الخطأ التالي أثناء بدء تشغيل الخادم:
TypeError: register() takes 3 positional arguments but 4 were given
File "/var/azureml-server/aml_blueprint.py", line 251, in register
super(AMLBlueprint, self).register(app, options, first_registration)
TypeError: register() takes 3 positional arguments but 4 were given
لقد قمت بتثبيت Flask 2 في بيئة Python الخاصة بك ولكنك تقوم بتشغيل إصدار azureml-inference-server-http
لا يدعم Flask 2. تتم إضافة دعم Flask 2 في azureml-inference-server-http>=0.7.0
، وهو أيضًا في azureml-defaults>=1.44
.
إذا كنت لا تستخدم هذه الحزمة في صورة AzureML docker، فاستخدم أحدث إصدار من
azureml-inference-server-http
أوazureml-defaults
.إذا كنت تستخدم هذه الحزمة مع صورة AzureML docker، فتأكد من استخدام صورة مضمنة في يوليو 2022 أو بعده. يتوفر إصدار الصورة في سجلات الحاوية. يجب أن تكون قادرا على العثور على سجل مشابه للسجلات التالية:
2022-08-22T17:05:02,147738763+00:00 | gunicorn/run | AzureML Container Runtime Information 2022-08-22T17:05:02,161963207+00:00 | gunicorn/run | ############################################### 2022-08-22T17:05:02,168970479+00:00 | gunicorn/run | 2022-08-22T17:05:02,174364834+00:00 | gunicorn/run | 2022-08-22T17:05:02,187280665+00:00 | gunicorn/run | AzureML image information: openmpi4.1.0-ubuntu20.04, Materializaton Build:20220708.v2 2022-08-22T17:05:02,188930082+00:00 | gunicorn/run | 2022-08-22T17:05:02,190557998+00:00 | gunicorn/run |
يظهر تاريخ إنشاء الصورة بعد "بناء التجسيد"، والذي في المثال أعلاه هو
20220708
، أو 8 يوليو 2022. هذه الصورة متوافقة مع Flask 2. إذا لم تشاهد شعارًا مثل هذا في سجل الحاوية، فإن صورتك قديمة ويجب تحديثها. إذا كنت تستخدم صورة CUDA، ولم تتمكن من العثور على صورة أحدث، فتحقق مما إذا كانت صورتك مهملة في AzureML-Containers. إذا كان الأمر كذلك، يجب أن تكون قادرا على العثور على بدائل.إذا كنت تستخدم الخادم مع نقطة نهاية عبر الإنترنت، يمكنك أيضا العثور على السجلات ضمن "سجلات النشر" في صفحة نقطة النهاية عبر الإنترنت في Azure التعلم الآلي studio. إذا قمت بالنشر باستخدام SDK v1 ولم تحدد صورة بشكل صريح في تكوين التوزيع الخاص بك، فسيكون استخدام إصدار من
openmpi4.1.0-ubuntu20.04
ذلك يطابق مجموعة أدوات SDK المحلية، والتي قد لا تكون أحدث إصدار من الصورة. على سبيل المثال، سيستخدم SDK 1.43openmpi4.1.0-ubuntu20.04:20220616
افتراضيًا، وهو غير متوافق. تأكد من استخدام أحدث SDK للتوزيع.إذا كنت غير قادر على تحديث الصورة لسبب ما، يمكنك تجنب المشكلة مؤقتا عن طريق تثبيت
azureml-defaults==1.43
أوazureml-inference-server-http~=0.4.13
، والذي سيقوم بتثبيت خادم الإصدار الأقدم باستخدامFlask 1.0.x
.
2. واجهت ImportError
أو ModuleNotFoundError
على الوحدات النمطية opencensus
أو jinja2
أو MarkupSafe
أو click
في أثناء بدء التشغيل كما يلي:
ImportError: cannot import name 'Markup' from 'jinja2'
لم تقم الإصدارات القديمة (<= 0.4.10) من الخادم بتثبيت تبعية Flask على الإصدارات المتوافقة. تم إصلاح هذه المشكلة في أحدث إصدار من الخادم.
الخطوات التالية
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ