تصحيح أخطاء البرنامج النصي لتسجيل النقاط باستخدام خادم HTTP للاستدلال Azure التعلم الآلي
خادم HTTP للاستدلال على Azure التعلم الآلي هو حزمة Python تعرض وظيفة تسجيل النقاط كنقطة نهاية HTTP والتفاف التعليمات البرمجية لخادم Flask والتبعيات في حزمة مفردة. يتم تضمينه في صور Docker التي تم إنشاؤها مسبقا للاستدلال الذي يتم استخدامه عند نشر نموذج مع 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، أو اختبار الخادم باستخدام برنامج نصي لتسجيل النقاط الفعلي وملف نموذج وملف بيئة من مستودع الأمثلة لدينا.
اختبار سلوك الخادم باستخدام برنامج نصي لتسجيل النقاط وهمية
قم بإنشاء دليل يحتوي على ملفاتك:
mkdir server_quickstart cd server_quickstart
لتجنب تعارض الحزم، أنشئ بيئة ظاهرية وقم بتنشيطها:
python -m venv myenv source myenv/bin/activate
تلميح
بعد الاختبار، قم بتشغيل
deactivate
لإلغاء تنشيط بيئة Python الظاهرية.تثبيت الحزمة
azureml-inference-server-http
من مُوجز pypi:python -m pip install azureml-inference-server-http
قم بإنشاء نص الإدخال الخاص بك (
score.py
). يقوم المثال التالي بإنشاء برنامج نصي أساسي للإدخال:echo ' import time def init(): time.sleep(1) def run(input_data): return {"message":"Hello, World!"} ' > score.py
بدء تشغيل الخادم (azmlinfsrv) وتعيينه
score.py
كبرنامج نصي للإدخل:azmlinfsrv --entry_script score.py
إشعار
الخادم مستضاف على 0.0.0.0، ما يعني أنه سيستمع إلى جميع عناوين IP الخاصة بجهاز الاستضافة.
إرسال طلب تسجيل إلى الخادم من خلال
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.ابدأ تشغيل VS Code وافتح المجلد الذي يحتوي على البرنامج النصي (
score.py
).أضف التكوين التالي إلى
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" ] } ] }
ابدأ جلسة تصحيح الأخطاء في VS Code. حدد "Run" -> "Start Debugging" (أو
F5
).
وضع الإرفاق: ابدأ تشغيل خادم HTTP للاستدلال على Azure التعلم الآلي في سطر أوامر واستخدم VS Code + Python Extension للإرفاق بالعملية.
إشعار
إذا كنت تستخدم بيئة Linux، فقم أولا بتثبيت الحزمة
gdb
عن طريق تشغيلsudo apt-get install -y gdb
.أضف التكوين التالي إلى
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 }, ] }
ابدأ تشغيل خادم الاستدلال باستخدام CLI (
azmlinfsrv --entry_script score.py
).ابدأ جلسة تصحيح الأخطاء في VS Code.
- في VS Code، حدد "Run" -> "Start Debugging" (أو
F5
). - أدخل معرف
azmlinfsrv
العملية ل (وليسgunicorn
) باستخدام السجلات (من خادم الاستدلال) المعروضة في CLI.
إشعار
إذا لم يتم عرض منتقي العملية، أدخل معرف العملية يدويا في
processId
حقل .launch.json
- في VS Code، حدد "Run" -> "Start Debugging" (أو
في كلتا الطريقتين، يمكنك تعيين نقطة التوقف وتصحيح الأخطاء خطوة بخطوة.
مثال شامل
في هذا القسم، سنقوم بتشغيل الخادم محليا مع ملفات العينة (البرنامج النصي لتسجيل النقاط وملف النموذج والبيئة) في مستودع المثال لدينا. يتم استخدام نماذج الملفات أيضا في مقالتنا لنشر نموذج التعلم الآلي وتسجيله باستخدام نقطة نهاية عبر الإنترنت
استنساخ مستودع العينة.
git clone --depth 1 https://github.com/Azure/azureml-examples cd azureml-examples/cli/endpoints/online/model-1/
إنشاء وتنشيط بيئة ظاهرية باستخدام 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
راجع البرنامج النصي لتسجيل النقاط.
تسجيل/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()
قم بتشغيل خادم الاستدلال مع تحديد برنامج نصي لتسجيل النقاط وملف النموذج. سيتم تعريف دليل النموذج المحدد (
model_dir
المعلمة) كمتغيرAZUREML_MODEL_DIR
واسترداده في البرنامج النصي لتسجيل النقاط. في هذه الحالة، نحدد الدليل الحالي (./
) حيث يتم تحديد الدليل الفرعي في البرنامج النصي لتسجيل النقاط كmodel/sklearn_regression_model.pkl
.azmlinfsrv --entry_script ./onlinescoring/score.py --model_dir ./
سيظهر مثال سجل بدء التشغيل إذا تم تشغيل الخادم وتم استدعاء البرنامج النصي لتسجيل النقاط بنجاح. وإلا، ستكون هناك رسائل خطأ في السجل.
اختبر البرنامج النصي لتسجيل النقاط باستخدام عينة من البيانات. افتح محطة طرفية أخرى وانتقل إلى نفس دليل العمل لتشغيل الأمر.
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) للطلبات الواردة:
- يوجد غلاف Python CLI حول مكدس شبكة الخادم ويستخدم لبدء تشغيل الخادم.
- يرسل العميل طلباً إلى الخادم.
- عند تلقي طلب، فإنه يمر عبر خادم WSGI ثم يتم إرساله إلى أحد العمال.
- ثم تتم معالجة الطلبات بواسطة تطبيق Flask ، الذي يقوم بتحميل البرنامج النصي للإدخال وأي تبعيات.
- أخيراً، يتم إرسال الطلب إلى برنامج الإدخال الخاص بك. يقوم نص الإدخال بعد ذلك بإجراء استدعاء استنتاج للنموذج المحمل ويعيد استجابة.
فهم السجلات
هنا نصف سجلات خادم 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 التعلم الآلي. إذا كنت ترغب في استكشاف أخطاء نقاط النهاية عبر الإنترنت وإصلاحها، فراجع أيضا استكشاف أخطاء نشر نقاط النهاية عبر الإنترنت وإصلاحها
الخطوات الأساسية
الخطوات الأساسية لاستكشاف الأخطاء وإصلاحها هي:
- جمع معلومات الإصدار لبيئة 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 على الإصدارات المتوافقة. تم إصلاح هذه المشكلة في أحدث إصدار من الخادم.
الخطوات التالية
- لمزيد من المعلومات حول إنشاء برنامج نصي للإدخال وتوزيع النماذج، راجع كيفية توزيع نموذج باستخدام التعلم الآلي.
- تعرَّف على صور عامل الإرساء مسبقة الصنع للاستدلال