تصحيح أخطاء البرنامج النصي لتسجيل النقاط باستخدام خادم HTTP للاستدلال Azure التعلم الآلي

خادم HTTP للاستدلال على Azure التعلم الآلي هو حزمة Python تعرض وظيفة تسجيل النقاط كنقطة نهاية HTTP والتفاف التعليمات البرمجية لخادم Flask والتبعيات في حزمة مفردة. يتم تضمينه في صور Docker التي تم إنشاؤها مسبقا للاستدلال الذي يتم استخدامه عند نشر نموذج مع Azure التعلم الآلي. باستخدام الحزمة وحدها، يمكنك نشر النموذج محليا للإنتاج، ويمكنك أيضا التحقق من صحة البرنامج النصي لتسجيل النقاط (الإدخال) بسهولة في بيئة تطوير محلية. إذا كانت هناك مشكلة في البرنامج النصي لتسجيل النقاط، فسيرجع الخادم خطأ والموقع الذي حدث فيه الخطأ.

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

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

تصحيح الأخطاء المحلي لنقطة النهاية عبر الإنترنت

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

  • خادم HTTP للاستدلال على Azure التعلم الآلي
  • نقطة نهاية محلية

تركز هذه المقالة على خادم HTTP للاستدلال على Azure التعلم الآلي.

يوفر الجدول التالي نظرة عامة على السيناريوهات لمساعدتك في اختيار الأفضل بالنسبة لك.

السيناريو خادم الاستدلال HTTP نقطة النهاية المحلية
تحديث بيئة Python المحلية دون إعادة إنشاء صورة Docker ‏‏نعم‬ لا
تحديث البرنامج النصي لتسجيل النقاط ‏‏نعم‬ ‏‏نعم‬
تحديث تكوينات النشر (النشر، البيئة، التعليمة البرمجية، النموذج) لا ‏‏نعم‬
دمج VS Code Debugger ‏‏نعم‬ ‏‏نعم‬

من خلال تشغيل خادم HTTP الاستدلال محليا، يمكنك التركيز على تصحيح أخطاء البرنامج النصي لتسجيل النقاط دون أن تتأثر بتكوينات حاوية النشر.

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

  • يتطلب: Python >=3.8
  • Anaconda

تلميح

يعمل خادم HTTP للاستدلال على Azure التعلم الآلي على أنظمة التشغيل المستندة إلى Windows وLinux.

التثبيت

إشعار

لتجنب تعارض الحزمة، قم بتثبيت الخادم في بيئة ظاهرية.

لتثبيت azureml-inference-server-http package، قم بتشغيل الأمر التالي في موجه الأوامر/المحطة الطرفي لديك:

python -m pip install azureml-inference-server-http

تصحيح أخطاء البرنامج النصي لتسجيل النقاط محليا

لتصحيح أخطاء البرنامج النصي لتسجيل النقاط محليا، يمكنك اختبار كيفية تصرف الخادم باستخدام برنامج نصي لتسجيل النقاط وهمي، أو استخدام VS Code لتصحيح الأخطاء باستخدام حزمة azureml-inference-server-http، أو اختبار الخادم باستخدام برنامج نصي لتسجيل النقاط الفعلي وملف نموذج وملف بيئة من مستودع الأمثلة لدينا.

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

  1. قم بإنشاء دليل يحتوي على ملفاتك:

    mkdir server_quickstart
    cd server_quickstart
    
  2. لتجنب تعارض الحزم، أنشئ بيئة ظاهرية وقم بتنشيطها:

    python -m venv myenv
    source myenv/bin/activate
    

    تلميح

    بعد الاختبار، قم بتشغيل deactivate لإلغاء تنشيط بيئة Python الظاهرية.

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

    python -m pip install azureml-inference-server-http
    
  4. قم بإنشاء نص الإدخال الخاص بك (score.py). يقوم المثال التالي بإنشاء برنامج نصي أساسي للإدخال:

    echo '
    import time
    
    def init():
        time.sleep(1)
    
    def run(input_data):
        return {"message":"Hello, World!"}
    ' > score.py
    
  5. بدء تشغيل الخادم (azmlinfsrv) وتعيينه score.py كبرنامج نصي للإدخل:

    azmlinfsrv --entry_script score.py
    

    إشعار

    الخادم مستضاف على 0.0.0.0، ما يعني أنه سيستمع إلى جميع عناوين IP الخاصة بجهاز الاستضافة.

  6. إرسال طلب تسجيل إلى الخادم من خلالcurl:

    curl -p 127.0.0.1:5001/score
    

    يجب أن يستجيب الخادم هكذا.

    {"message": "Hello, World!"}
    

بعد الاختبار، يمكنك الضغط Ctrl + C لإنهاء الخادم. الآن يمكنك تعديل البرنامج النصي لتسجيل النقاط (score.py) واختبار التغييرات الخاصة بك عن طريق تشغيل الخادم مرة أخرى (azmlinfsrv --entry_script score.py).

كيفية التكامل مع Visual Studio Code

هناك طريقتان لاستخدام Visual Studio Code (VS Code) وملحق Python لتصحيح الأخطاء باستخدام حزمة azureml-inference-server-http (وضعي التشغيل والإرفاق).

  • وضع التشغيل: قم بإعداد launch.json في VS Code وابدأ خادم HTTP للاستدلال على Azure التعلم الآلي داخل VS Code.

    1. ابدأ تشغيل VS Code وافتح المجلد الذي يحتوي على البرنامج النصي (score.py).

    2. أضف التكوين التالي إلى launch.json لمساحة العمل هذه في VS Code:

      launch.json

      {
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Debug score.py",
                  "type": "python",
                  "request": "launch",
                  "module": "azureml_inference_server_http.amlserver",
                  "args": [
                      "--entry_script",
                      "score.py"
                  ]
              }
          ]
      }
      
    3. ابدأ جلسة تصحيح الأخطاء في VS Code. حدد "Run" -> "Start Debugging" (أو F5).

  • وضع الإرفاق: ابدأ تشغيل خادم HTTP للاستدلال على Azure التعلم الآلي في سطر أوامر واستخدم VS Code + Python Extension للإرفاق بالعملية.

    إشعار

    إذا كنت تستخدم بيئة Linux، فقم أولا بتثبيت الحزمة gdb عن طريق تشغيل sudo apt-get install -y gdb.

    1. أضف التكوين التالي إلى launch.json لمساحة العمل هذه في VS Code:

      launch.json

      {
          "version": "0.2.0",
          "configurations": [
              {
                  "name": "Python: Attach using Process Id",
                  "type": "python",
                  "request": "attach",
                  "processId": "${command:pickProcess}",
                  "justMyCode": true
              },
          ]
      }
      
    2. ابدأ تشغيل خادم الاستدلال باستخدام CLI (azmlinfsrv --entry_script score.py).

    3. ابدأ جلسة تصحيح الأخطاء في VS Code.

      1. في VS Code، حدد "Run" -> "Start Debugging" (أو F5).
      2. أدخل معرف azmlinfsrv العملية ل (وليس gunicorn) باستخدام السجلات (من خادم الاستدلال) المعروضة في CLI. لقطة شاشة ل CLI تعرض معرف العملية للخادم.

      إشعار

      إذا لم يتم عرض منتقي العملية، أدخل معرف العملية يدويا في processId حقل .launch.json

في كلتا الطريقتين، يمكنك تعيين نقطة التوقف وتصحيح الأخطاء خطوة بخطوة.

مثال شامل

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

  1. استنساخ مستودع العينة.

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd azureml-examples/cli/endpoints/online/model-1/
    
  2. إنشاء وتنشيط بيئة ظاهرية باستخدام conda. في هذا المثال، يتم تثبيت الحزمة azureml-inference-server-http تلقائيا لأنها مضمنة كمكتبة تابعة للحزمة azureml-defaults في conda.yml كما يلي.

    # Create the environment from the YAML file
    conda env create --name model-env -f ./environment/conda.yml
    # Activate the new environment
    conda activate model-env
    
  3. راجع البرنامج النصي لتسجيل النقاط.

    تسجيل/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()
    
  4. قم بتشغيل خادم الاستدلال مع تحديد برنامج نصي لتسجيل النقاط وملف النموذج. سيتم تعريف دليل النموذج المحدد (model_dir المعلمة) كمتغير AZUREML_MODEL_DIR واسترداده في البرنامج النصي لتسجيل النقاط. في هذه الحالة، نحدد الدليل الحالي (./) حيث يتم تحديد الدليل الفرعي في البرنامج النصي لتسجيل النقاط ك model/sklearn_regression_model.pkl.

    azmlinfsrv --entry_script ./onlinescoring/score.py --model_dir ./
    

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

  5. اختبر البرنامج النصي لتسجيل النقاط باستخدام عينة من البيانات. افتح محطة طرفية أخرى وانتقل إلى نفس دليل العمل لتشغيل الأمر. curl استخدم الأمر لإرسال طلب مثال إلى الخادم وتلقي نتيجة تسجيل.

    curl --request POST "127.0.0.1:5001/score" --header "Content-Type:application/json" --data @sample-request.json
    

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

مسارات الخادم

يستمع الخادم على المنفذ 5001 (كافتراضي) في هذه المسارات.

الاسم المسار
مسبار الحياة 127.0.0.1:5001/
الدرجة 127.0.0.1:5001/score
OpenAPI (swagger) 127.0.0.1:5001/swagger.json

معلمات الخادم

يحتوي الجدول التالي على المعلمات المقبولة من قبل الخادم:

المعلمة‬ المطلوب Default ‏‏الوصف
entry_script صواب ‏‫غير متوفر‬ المسار النسبي أو المطلق إلى برنامج تسجيل النقاط.
model_dir خطأ ‏‫غير متوفر‬ المسار النسبي أو المطلق للدليل الذي يحتفظ بالنموذج المستخدم للاستدلال.
المنفذ خطأ 5001 منفذ خدمة الخادم.
worker_count خطأ 1 عدد مؤشرات الترابط العاملة التي ستقوم بمعالجة الطلبات المتزامنة.
appinsights_instrumentation_key خطأ ‏‫غير متوفر‬ مفتاح الأجهزة لأفكار التطبيق حيث سيتم نشر السجلات.
access_control_allow_origins خطأ ‏‫غير متوفر‬ تمكين CORS للأصول المحددة. فصل أصول متعددة مع "،".
مثال: "microsoft.com، bing.com"

طلب التدفق

توضح الخطوات التالية كيفية معالجة خادم HTTP للاستدلال Azure التعلم الآلي (azmlinfsrv) للطلبات الواردة:

  1. يوجد غلاف Python CLI حول مكدس شبكة الخادم ويستخدم لبدء تشغيل الخادم.
  2. يرسل العميل طلباً إلى الخادم.
  3. عند تلقي طلب، فإنه يمر عبر خادم WSGI ثم يتم إرساله إلى أحد العمال.
    • Gunicorn مستخدم في Linux.
    • يتم استخدامWaitress في أنظمة تشغيل Windows.
  4. ثم تتم معالجة الطلبات بواسطة تطبيق Flask ، الذي يقوم بتحميل البرنامج النصي للإدخال وأي تبعيات.
  5. أخيراً، يتم إرسال الطلب إلى برنامج الإدخال الخاص بك. يقوم نص الإدخال بعد ذلك بإجراء استدعاء استنتاج للنموذج المحمل ويعيد استجابة.

رسم تخطيطي لعملية خادم HTTP.

فهم السجلات

هنا نصف سجلات خادم HTTP للاستدلال على Azure التعلم الآلي. يمكنك الحصول على السجل عند تشغيل azureml-inference-server-http محليا، أو الحصول على سجلات الحاوية إذا كنت تستخدم نقاط النهاية عبر الإنترنت.

إشعار

تم تغيير تنسيق التسجيل منذ الإصدار 0.8.0. إذا وجدت سجلك بنمط مختلف، فقم بتحديث الحزمة azureml-inference-server-http إلى أحدث إصدار.

تلميح

إذا كنت تستخدم نقاط النهاية عبر الإنترنت، يبدأ السجل من خادم الاستدلال ب Azure Machine Learning Inferencing HTTP server <version>.

سجلات بدء التشغيل

عند بدء تشغيل الخادم، يتم عرض إعدادات الخادم أولا بواسطة السجلات كما يلي:

Azure Machine Learning Inferencing HTTP server <version>


Server Settings
---------------
Entry Script Name: <entry_script>
Model Directory: <model_dir>
Worker Count: <worker_count>
Worker Timeout (seconds): None
Server Port: <port>
Application Insights Enabled: false
Application Insights Key: <appinsights_instrumentation_key>
Inferencing HTTP server version: azmlinfsrv/<version>
CORS for the specified origins: <access_control_allow_origins>


Server Routes
---------------
Liveness Probe: GET   127.0.0.1:<port>/
Score:          POST  127.0.0.1:<port>/score

<logs>

على سبيل المثال، عند تشغيل الخادم اتبع المثال الشامل:

Azure Machine Learning Inferencing HTTP server v0.8.0


Server Settings
---------------
Entry Script Name: /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
Model Directory: ./
Worker Count: 1
Worker Timeout (seconds): None
Server Port: 5001
Application Insights Enabled: false
Application Insights Key: None
Inferencing HTTP server version: azmlinfsrv/0.8.0
CORS for the specified origins: None


Server Routes
---------------
Liveness Probe: GET   127.0.0.1:5001/
Score:          POST  127.0.0.1:5001/score

2022-12-24 07:37:53,318 I [32726] gunicorn.error - Starting gunicorn 20.1.0
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Listening at: http://0.0.0.0:5001 (32726)
2022-12-24 07:37:53,319 I [32726] gunicorn.error - Using worker: sync
2022-12-24 07:37:53,322 I [32756] gunicorn.error - Booting worker with pid: 32756
Initializing logger
2022-12-24 07:37:53,779 I [32756] azmlinfsrv - Starting up app insights client
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Found user script at /home/user-name/azureml-examples/cli/endpoints/online/model-1/onlinescoring/score.py
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - run() is not decorated. Server will invoke it with the input in JSON string.
2022-12-24 07:37:54,518 I [32756] azmlinfsrv.user_script - Invoking user's init function
2022-12-24 07:37:55,974 I [32756] azmlinfsrv.user_script - Users's init has completed successfully
2022-12-24 07:37:55,976 I [32756] azmlinfsrv.swagger - Swaggers are prepared for the following versions: [2, 3, 3.1].
2022-12-24 07:37:55,977 I [32756] azmlinfsrv - AML_FLASK_ONE_COMPATIBILITY is set, but patching is not necessary.

تنسيق السجل

يتم إنشاء السجلات من خادم الاستدلال بالتنسيق التالي، باستثناء البرامج النصية للمشغل لأنها ليست جزءا من حزمة python:

<UTC Time> | <level> [<pid>] <logger name> - <message>

هنا <pid> هو معرف <level> العملية وهو الحرف الأول من مستوى التسجيل - E ل ERROR، I للمعلومات، وما إلى ذلك.

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

مستوى التسجيل قيمة رقمية
‏‏حرج 50
خطأ 40
‏‏تحذير 30
معلومات 20
تتبع الأخطاء 10
NOTSET 0

دليل استكشاف الأخطاء وإصلاحها

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

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

الخطوات الأساسية لاستكشاف الأخطاء وإصلاحها هي:

  1. جمع معلومات الإصدار لبيئة Python الخاصة بك.
  2. تأكد من أن إصدار حزمة azureml-inference-server-http python المحدد في ملف البيئة يطابق إصدار خادم HTTP للاستدلال على AzureML الذي يتم عرضه في سجل بدء التشغيل. في بعض الأحيان يؤدي محلل تبعية pip إلى إصدارات غير متوقعة من الحزم المثبتة.
  3. إذا قمت بتحديد Flask (وتبعياتها) في بيئتك، فقم بإزالتها. تتضمن Flaskالتبعيات و Jinja2itsdangerousو WerkzeugMarkupSafeو.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.43 openmpi4.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 على الإصدارات المتوافقة. تم إصلاح هذه المشكلة في أحدث إصدار من الخادم.

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