تصحيح الأخطاء التفاعلي باستخدام Visual Studio Code

ينطبق على: Python SDK azureml v1

تعرف على كيفية تصحيح أخطاء Azure التعلم الآلي التجارب والمسارات وعمليات التوزيع بشكل تفاعلي باستخدام Visual Studio Code (VS Code) وdebugpy.

تشغيل التجارب وتتبع أخطائها محلياً

استخدم ملحق التعلم الآلي من Azure للتحقق من صحة تجارب التعلم الآلي وتشغيلها وتصحيحها قبل إرسالها إلى السحابة.

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

تتبع أخطاء التجربة محلياً

هام

قبل تشغيل تجربتك محلياً، تأكد مما يلي:

  • Docker قيد التشغيل.
  • يتم تعيين الإعداد azureML.CLI Compatibility Mode في Visual Studio Code إلى 1.0 كما هو محدد في المتطلبات الأساسية
  1. في VS Code، افتح طريقة عرض ملحق Azure للتعلم الآلي.

  2. قم بتوسيع عقدة الاشتراك التي تحتوي على مساحة عملك. إذا لم تكن لديك مساحة عمل بالفعل، يمكنك إنشاء مساحة عمل Azure للتعلم الآلي باستخدام الملحق.

  3. وسع عقدة مساحة عملك.

  4. انقر بزر الماوس الأيمن فوق عقدة التجارب، وحدد إنشاء تجربة. عند ظهور المطالبة، قم بتوفير اسم للتجربة.

  5. قم بتوسيع عقدة التجارب، وانقر بزر الماوس الأيمن فوق التجربة التي تريد تشغيلها، وحدد تشغيل التجربة.

  6. من قائمة الخيارات، حدد محليًا.

  7. الاستخدام لأول مرة على Windows فقط. عند مطالبتك بالسماح بمشاركة الملف، حدد نعم. عند تمكين مشاركة الملف، فإنه يسمح لـ Docker بتحميل الدليل الذي يحتوي على البرنامج النصي الخاص بك في الحاوية. بالإضافة إلى ذلك، فإنه يسمح أيضا لـ Docker بتخزين السجلات والمخرجات من التشغيل لديك في دليل مؤقت على نظامك.

  8. حدد نعم لتصحيح أخطاء تجربتك. بخلاف هذا، حدد لا. سيؤدي تحديد «لا» إلى تشغيل تجربتك محلياً دون إرفاقها بمصحح الأخطاء.

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

    1. اختر بيئتك. يمكنك الاختيار من بين أي من بيئات التعلم الآلي من Azure المنسقة أو إنشاء بيئة خاصة بك.
    2. أدخل اسم البرنامج النصي الذي تريد تشغيله. يعد المسار نسبياً إلى الدليل الذي تم فتحه في VS Code.
    3. اختر ما إذا كنت تريد استخدام مجموعة بيانات التعلم الآلي من Azure أم لا. يمكنك إنشاء مجموعات بيانات التعلم الآلي من Azure باستخدام الملحق.
    4. Debugpy مطلوب لإرفاق مصحح الأخطاء بالحاوية التي تقوم بتشغيل تجربتك. لإضافة Debugpy كتبعية، حدد إضافة Debugpy. وإلا، حدد تخطي. يؤدي عدم إضافة تتبع الأخطاء كتبعية إلى تشغيل تجربتك دون إرفاقها بالمصحح.
    5. يتم فتح ملف تكوين يحتوي على إعدادات تكوين التشغيل في المحرر. إذا كنت راضياً عن الإعدادات، فحدد إرسال التجربة. بدلاً من ذلك، يمكنك فتح لوحة الأوامر (عرض > لوحة الأوامر) من شريط القوائم وإدخال الأمر AzureML: Submit experiment في مربع النص.
  10. بمجرد إرسال تجربتك، يتم إنشاء صورة Docker تحتوي على البرنامج النصي لديك والتكوينات المحددة في تكوين التشغيل.

    عند بدء عملية إنشاء صورة Docker، يتم نقل محتويات دفق الملف 60_control_log.txt إلى وحدة تحكم الإخراج في VS Code.

    إشعار

    قد تستغرق المرة الأولى التي يتم فيها إنشاء صورة Docker عدة دقائق.

  11. بمجرد إنشاء الصورة، تظهر مطالبة لبدء مصحح الأخطاء. قم بتعيين نقاط التوقف في البرنامج النصي، وحدد بدء مصحح الأخطاء عندما تكون جاهزاً لبدء تصحيح الأخطاء. يؤدي القيام بذلك إلى إرفاق مصحح أخطاء VS Code بالحاوية التي تقوم بتشغيل تجربتك. بدلا من ذلك، في ملحق التعلم الآلي من Azure، مرر مؤشر الماوس فوق العقدة لتشغيلك الحالي، وحدد أيقونة التشغيل لبدء مصحح الأخطاء.

    هام

    لا يمكن أن تكون لديك جلسات تصحيح متعددة لتجربة واحدة. ومع ذلك، يمكنك تصحيح تجربتين أو أكثر باستخدام مثيلات VS Code متعددة.

عند هذه النقطة، يجب أن تكون قادراً على التنقل وتصحيح التعليمات البرمجية باستخدام VS Code.

إذا كنت تريد إلغاء التشغيل في أي وقت، فانقر بزر الماوس الأيمن فوق عقدة التشغيل، وحدد إلغاء التشغيل.

على غرار عمليات تشغيل التجربة عن بعد، يمكنك توسيع عقدة التشغيل لفحص السجلات والمخرجات.

تلميح

تتم إعادة استخدام صور Docker التي تستخدم نفس التبعيات المحددة في بيئتك بين عمليات التشغيل. ومع ذلك، إذا قمت بتشغيل تجربة باستخدام بيئة جديدة أو مختلفة، يتم إنشاء صورة جديدة. نظراً لأن هذه الصور محفوظة في التخزين المحلي، فمن المستحسن إزالة صور Docker القديمة أو غير المستخدمة. لإزالة الصور من نظامك، استخدم ملحق Docker CLI أو ملحق VS Code Docker.

تصحيح أخطاء مسارات التعلم الآلي واستكشاف الأخطاء وإصلاحها

في بعض الحالات، قد تحتاج إلى التصحيح التفاعلي لرمز Python المستخدم في البنية الأساسية للتعلم الآلي من Microsoft Azure الخاص بك. باستخدام VS Code وdebugpy، يمكنك إرفاق التعليمات البرمجية أثناء تشغيلها في بيئة التدريب.

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

  • مساحة عمل التعلم الآلي من Azure التي تم تكوينها لاستخدام شبكة Azure الظاهرية.

  • البنية الأساسية للتعلم الآلي من Azure التي تستخدم برامج Python النصية كجزء من خطوات البنية الأساسية. على سبيل المثال، PythonScriptStep.

  • نظام مجموعة حساب التعلم الآلي من Azure، وهو موجود في الشبكة الظاهرية وويستخدمه المسار للتدريب.

  • بيئة تطوير موجودة في الشبكة الظاهرية. قد تكون بيئة التطوير واحدة مما يلي:

    • جهاز Azure الظاهري في الشبكة الظاهرية
    • مثيل حساب لدفتر الملاحظات الظاهري في الشبكة الظاهرية
    • جهاز عميل لديه اتصال شبكة خاصة بالشبكة الظاهرية، إما عن طريق VPN أو عبر ExpressRoute.

لمزيد من المعلومات حول استخدام شبكة Azure الظاهرية مع التعلم الآلي من Azure، راجع عزل الشبكة الظاهرية ونظرة عامة على الخصوصية.

تلميح

على الرغم من أنه يمكنك العمل مع موارد Azure للتعلم الآلي غير الموجودة خلف شبكة ظاهرية، يوصى باستخدام شبكة ظاهرية.

طريقة العمل

تقوم خطوات مسار التعلم الآلي بتشغيل البرامج النصية لـ Python. يتم تعديل هذه البرامج النصية لتنفيذ الإجراءات التالية:

  1. قم بتسجيل عنوان IP الخاص بالمضيف الذي يتم تشغيله عليه. يمكنك استخدام عنوان IP لتوصيل مصحح الأخطاء بالبرنامج النصي.

  2. ابدأ تشغيل مكون تصحيح الأخطاء، وانتظر حتى يتصل مصحح الأخطاء.

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

  4. يمكنك إخبار VS Code بعنوان IP لتوصيل مصحح الأخطاء باستخدام ملف launch.json.

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

تكوين البرامج النصية لـ Python

لتمكين تصحيح الأخطاء، قم بإجراء التغييرات التالية على البرنامج النصي (البرامج النصية) Python المستخدمة من قبل الخطوات في مسار التعلم الآلي:

  1. إضافة عبارات الاستيراد التالية:

    import argparse
    import os
    import debugpy
    import socket
    from azureml.core import Run
    
  2. إضافة الوسيطات التالية. تسمح لك هذه الوسيطات بتمكين مصحح الأخطاء حسب الحاجة، وتعيين المهلة لإرفاق مصحح الأخطاء:

    parser.add_argument('--remote_debug', action='store_true')
    parser.add_argument('--remote_debug_connection_timeout', type=int,
                        default=300,
                        help=f'Defines how much time the Azure Machine Learning compute target '
                        f'will await a connection from a debugger client (VSCODE).')
    parser.add_argument('--remote_debug_client_ip', type=str,
                        help=f'Defines IP Address of VS Code client')
    parser.add_argument('--remote_debug_port', type=int,
                        default=5678,
                        help=f'Defines Port of VS Code client')
    
  3. أضف عبارات التالية. تقوم هذه العبارات بتحميل سياق التشغيل الحالي بحيث يمكنك تسجيل عنوان IP للعقدة التي تعمل عليها التعليمات البرمجية:

    global run
    run = Run.get_context()
    
  4. أضف عبارة if التي تبدأ في تتبع الأخطاء وتنتظر إرفاق مصحح الأخطاء. إذا لم يتم إرفاق مصحح الأخطاء قبل المهلة، يستمر البرنامج النصي كالمعتاد. تأكد من استبدال القيم HOST وPORT، وهي الدالة listen الخاصة بك.

    if args.remote_debug:
        print(f'Timeout for debug connection: {args.remote_debug_connection_timeout}')
        # Log the IP and port
        try:
            ip = args.remote_debug_client_ip
        except:
            print("Need to supply IP address for VS Code client")
        print(f'ip_address: {ip}')
        debugpy.listen(address=(ip, args.remote_debug_port))
        # Wait for the timeout for debugger to attach
        debugpy.wait_for_client()
        print(f'Debugger attached = {debugpy.is_client_connected()}')
    

يوضح مثال Python التالي ملف train.py بسيطًا يمكِّن تصحيح الأخطاء:

# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license.

import argparse
import os
import debugpy
import socket
from azureml.core import Run

print("In train.py")
print("As a data scientist, this is where I use my training code.")

parser = argparse.ArgumentParser("train")

parser.add_argument("--input_data", type=str, help="input data")
parser.add_argument("--output_train", type=str, help="output_train directory")

# Argument check for remote debugging
parser.add_argument('--remote_debug', action='store_true')
parser.add_argument('--remote_debug_connection_timeout', type=int,
                    default=300,
                    help=f'Defines how much time the Azure Machine Learning compute target '
                    f'will await a connection from a debugger client (VSCODE).')
parser.add_argument('--remote_debug_client_ip', type=str,
                    help=f'Defines IP Address of VS Code client')
parser.add_argument('--remote_debug_port', type=int,
                    default=5678,
                    help=f'Defines Port of VS Code client')

# Get run object, so we can find and log the IP of the host instance
global run
run = Run.get_context()

args = parser.parse_args()

# Start debugger if remote_debug is enabled
if args.remote_debug:
    print(f'Timeout for debug connection: {args.remote_debug_connection_timeout}')
    # Log the IP and port
    ip = socket.gethostbyname(socket.gethostname())
    # try:
    #     ip = args.remote_debug_client_ip
    # except:
    #     print("Need to supply IP address for VS Code client")
    print(f'ip_address: {ip}')
    debugpy.listen(address=(ip, args.remote_debug_port))
    # Wait for the timeout for debugger to attach
    debugpy.wait_for_client()
    print(f'Debugger attached = {debugpy.is_client_connected()}')

print("Argument 1: %s" % args.input_data)
print("Argument 2: %s" % args.output_train)

if not (args.output_train is None):
    os.makedirs(args.output_train, exist_ok=True)
    print("%s created" % args.output_train)

تكوين مسارات التعلم الآلي

لتوفير حزم Python اللازمة لبدء تتبع الأخطاء والحصول على سياق التشغيل، قم بإنشاء بيئة وتعيين pip_packages=['debugpy', 'azureml-sdk==<SDK-VERSION>']. قم بتغيير إصدار SDK ليتناسب مع الإصدار الذي تستخدمه. توضح القصاصة البرمجية التالية كيفية إنشاء بيئة:

# Use a RunConfiguration to specify some additional requirements for this step.
from azureml.core.runconfig import RunConfiguration
from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.runconfig import DEFAULT_CPU_IMAGE

# create a new runconfig object
run_config = RunConfiguration()

# enable Docker 
run_config.environment.docker.enabled = True

# set Docker base image to the default CPU-based image
run_config.environment.docker.base_image = DEFAULT_CPU_IMAGE

# use conda_dependencies.yml to create a conda environment in the Docker image for execution
run_config.environment.python.user_managed_dependencies = False

# specify CondaDependencies obj
run_config.environment.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'],
                                                                           pip_packages=['debugpy', 'azureml-sdk==<SDK-VERSION>'])

في قسم تكوين برامج Python النصية، تمت إضافة وسيطات جديدة إلى البرامج النصية المستخدمة من قبل خطوات مسارات التعلم الآلي. توضح القصاصة البرمجية التالية كيفية استخدام هذه الوسيطات لتمكين تصحيح الأخطاء للمكون وتعيين مهلة. كما يوضح كيفية استخدام البيئة التي تم إنشاؤها مسبقاً عن طريق تعيين runconfig=run_config:

# Use RunConfig from a pipeline step
step1 = PythonScriptStep(name="train_step",
                         script_name="train.py",
                         arguments=['--remote_debug', '--remote_debug_connection_timeout', 300,'--remote_debug_client_ip','<VS-CODE-CLIENT-IP>','--remote_debug_port',5678],
                         compute_target=aml_compute,
                         source_directory=source_directory,
                         runconfig=run_config,
                         allow_reuse=False)

عند تشغيل المسار، تنشئ كل خطوة تشغيلاً فرعياً. إذا تم تمكين تصحيح الأخطاء، يسجل البرنامج النصي المعدل معلومات مشابهة للنص التالي في 70_driver_log.txt للتشغيل التابع:

Timeout for debug connection: 300
ip_address: 10.3.0.5

احفظ القيمة ip_address. تُستخدَم في القسم التالي.

تلميح

يمكنك أيضاً العثور على عنوان IP من سجلات التشغيل للتشغيل الفرعي لخطوة المسار هذه. لمزيد من المعلومات حول عرض هذه المعلومات، راجع مراقبة تشغيل تجربة Azure التعلم الآلي والمقاييس.

تكوين بيئة التطوير

  1. لتثبيت debugpy على بيئة تطوير VS Code، استخدم الأمر التالي:

    python -m pip install --upgrade debugpy
    

    لمزيد من المعلومات حول استخدام debugpy مع VS Code، راجع تصحيح الأخطاء عن بعد.

  2. لتكوين VS Code للاتصال بحساب التعلم الآلي من Azure الذي يقوم بتشغيل مصحح الأخطاء، قم بإنشاء تكوين تتبع أخطاء جديد:

    1. من VS Code، حدد قائمة تتبع الأخطاء، ثم حدد فتح التكوينات. يتم فتح ملف يسمى launch.json.

    2. في ملف launch.json، ابحث عن السطر الذي يحتوي على "configurations": [، وأدرج النص التالي بعده. قم بتغيير الإدخال "host": "<IP-ADDRESS>" إلى عنوان IP الذي تم إرجاعه في سجلاتك من القسم السابق. قم بتغيير الإدخال "localRoot": "${workspaceFolder}/code/step" إلى دليل محلي يحتوي على نسخة من البرنامج النصي الذي يتم تتبع أخطائه:

      {
          "name": "Azure Machine Learning Compute: remote debug",
          "type": "python",
          "request": "attach",
          "port": 5678,
          "host": "<IP-ADDRESS>",
          "redirectOutput": true,
          "pathMappings": [
              {
                  "localRoot": "${workspaceFolder}/code/step1",
                  "remoteRoot": "."
              }
          ]
      }
      

      هام

      إذا كانت هناك بالفعل إدخالات أخرى في قسم «التكوينات»، أضف فاصلة (،) بعد التعليمات البرمجية التي قمت بإدراجها.

      تلميح

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

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

    3. احفظ ملف launch.json.

الاتصال بمصحح الأخطاء

  1. افتح VS Code، وافتح نسخة محلية من البرنامج النصي.

  2. قم بتعيين نقاط التوقف حيثما تريد أن يتوقف البرنامج النصي بمجرد إرفاقه.

  3. أثناء تشغيل العملية التابعة للبرنامج النصي، ويتم عرض Timeout for debug connection في السجلات، استخدم المفتاح F5 أو حدد تتبع الأخطاء. عند المطالبة، حدد تكوين حساب التعلم الآلي من Azure: تتبع الأخطاء عن بعد. يمكنك أيضاَ تحديد أيقونة تتبع الأخطاء من الشريط الجانبي، إدخال التعلم الآلي من Azure: تتبع الأخطاء عن بعد من القائمة المنسدلة «تتبع الأخطاء»، ثم استخدام السهم الأخضر لإرفاق مصحح الأخطاء.

    عند هذه النقطة، يتصل VS Code بـ debugpy على عقدة الحساب، ويتوقف عند نقطة التوقف التي قمت بتعيينها مسبقاً. يمكنك الآن التنقل عبر التعليمات البرمجية أثناء تشغيلها، وعرض المتغيرات، وما إلى ذلك.

    إشعار

    إذا كان السجل يعرض إدخالاً يفيد Debugger attached = False، فقد انتهت مهلة البرنامج النصي، واستمر البرنامج النصي دون مصحح الأخطاء. أرسل المسار مرة أخرى وقم بتوصيل مصحح الأخطاء بعد الرسالة Timeout for debug connection، وقبل انتهاء المهلة.

تتبع أخطاء عمليات التوزيع واستكشاف أخطائها وإصلاحها

في بعض الحالات، قد تحتاج إلى تصحيح تعليمات Python البرمجية المضمنة في توزيع النموذج بشكل تفاعلي. على سبيل المثال، إذا فشل البرنامج النصي للإدخال، ولا يمكن تحديد السبب عن طريق تسجيل إضافي. باستخدام VS Code وتصحيح الأخطاء، يمكنك إرفاق التعليمات البرمجية التي تعمل داخل حاوية Docker.

تلميح

إذا كنت تستخدم نقاط النهاية والنشر المدارة عبر الإنترنت محليا، فشاهد تصحيح نقاط النهاية المدارة عبر الإنترنت محليا في Visual Studio Code (معاينة).

هام

لا يعمل أسلوب تصحيح الأخطاء هذا عند استخدام Model.deploy() وLocalWebservice.deploy_configuration لتوزيع نموذج محلياً. بدلاً من ذلك، يجب إنشاء صورة باستخدام أسلوب Model.package().

تتطلب عمليات توزيع خدمة الويب المحلية تثبيت Docker قيد العمل على النظام المحلي لديك. لمزيد من المعلومات حول استخدام Docker، راجع وثائق Docker. لاحظ أنه عند العمل مع مثيلات الحساب، يكون Docker مثبتاً بالفعل.

تكوين بيئة التطوير

  1. لتثبيت تتبع الأخطاء على بيئة تطوير VS Code المحلية، استخدم الأمر التالي:

    python -m pip install --upgrade debugpy
    

    لمزيد من المعلومات حول استخدام debugpy مع VS Code، راجع تصحيح الأخطاء عن بعد.

  2. لتكوين VS Code للتواصل مع صورة Docker، قم بإنشاء تكوين تتبع أخطاء جديد:

    1. من VS Code، حدد قائمة تتبع الأخطاء في الملحق تشغيل، ثم حدد فتح التكوينات. يتم فتح ملف يسمى launch.json.

    2. في ملف launch.json، ابحث عن عنصر التكوينات (السطر الذي يحتوي على "configurations": [)، وأدرج النص التالي بعده.

      {
          "name": "Azure Machine Learning Deployment: Docker Debug",
          "type": "python",
          "request": "attach",
          "connect": {
              "port": 5678,
              "host": "0.0.0.0",
          },
          "pathMappings": [
              {
                  "localRoot": "${workspaceFolder}",
                  "remoteRoot": "/var/azureml-app"
              }
          ]
      }
      

      بعد الإدراج، يجب أن يكون ملف launch.json مشابهاً للآتي:

      {
      // Use IntelliSense to learn about possible attributes.
      // Hover to view descriptions of existing attributes.
      // For more information, visit: https://go.microsoft.com/fwlink/linkid=830387
      "version": "0.2.0",
      "configurations": [
          {
              "name": "Python: Current File",
              "type": "python",
              "request": "launch",
              "program": "${file}",
              "console": "integratedTerminal"
          },
          {
              "name": "Azure Machine Learning Deployment: Docker Debug",
              "type": "python",
              "request": "attach",
              "connect": {
                  "port": 5678,
                  "host": "0.0.0.0"
                  },
              "pathMappings": [
                  {
                      "localRoot": "${workspaceFolder}",
                      "remoteRoot": "/var/azureml-app"
                  }
              ]
          }
          ]
      }
      

      هام

      إذا كانت هناك بالفعل إدخالات أخرى في قسم التكوينات، أضف فاصلة (،) بعد التعليمات البرمجية التي قمت بإدراجها.

      يرفق هذا القسم بحاوية Docker باستخدام المنفذ 5678.

    3. احفظ ملف launch.json.

إنشاء صورة تتضمن debugpy

  1. تعديل بيئة conda للتوزيع بحيث تتضمن debugpy. يوضح المثال التالي إضافته باستخدام المعلمة pip_packages:

    from azureml.core.conda_dependencies import CondaDependencies 
    
    
    # Usually a good idea to choose specific version numbers
    # so training is made on same packages as scoring
    myenv = CondaDependencies.create(conda_packages=['numpy==1.15.4',
                                'scikit-learn==0.19.1', 'pandas==0.23.4'],
                                 pip_packages = ['azureml-defaults==1.0.83', 'debugpy'])
    
    with open("myenv.yml","w") as f:
        f.write(myenv.serialize_to_string())
    
  2. لبدء تتبع الأخطاء وانتظار اتصال عند بدء تشغيل الخدمة، أضف ما يلي إلى أعلى الملف score.py:

    import debugpy
    # Allows other computers to attach to debugpy on this IP address and port.
    debugpy.listen(('0.0.0.0', 5678))
    # Wait 30 seconds for a debugger to attach. If none attaches, the script continues as normal.
    debugpy.wait_for_client()
    print("Debugger attached...")
    
  3. إنشاء صورة استناداً إلى تعريف البيئة وسحب الصورة إلى السجل المحلي.

    إشعار

    يفترض هذا المثال أن ws يشير إلى مساحة عمل Azure للتعلم الآلي، وأن model هذا يشير إلى النموذج الذي يتم توزيعه. يحتوي الملف myenv.yml على تبعيات conda التي تم إنشاؤها في الخطوة 1.

    from azureml.core.conda_dependencies import CondaDependencies
    from azureml.core.model import InferenceConfig
    from azureml.core.environment import Environment
    
    
    myenv = Environment.from_conda_specification(name="env", file_path="myenv.yml")
    myenv.docker.base_image = None
    myenv.docker.base_dockerfile = "FROM mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04:latest"
    inference_config = InferenceConfig(entry_script="score.py", environment=myenv)
    package = Model.package(ws, [model], inference_config)
    package.wait_for_creation(show_output=True)  # Or show_output=False to hide the Docker build logs.
    package.pull()
    

    بمجرد إنشاء الصورة وتنزيلها (قد تستغرق هذه العملية أكثر من 10 دقائق)، يتم عرض مسار الصورة (بما في ذلك المستودع والاسم والعلامة، والذي يعد في هذه الحالة أيضًا ملخصها) في رسالة مشابهة لما يلي:

    Status: Downloaded newer image for myregistry.azurecr.io/package@sha256:<image-digest>
    
  4. لتسهيل العمل مع الصورة محلياً، يمكنك استخدام الأمر التالي لإضافة علامة لهذه الصورة. استبدل myimagepath في الأمر التالي مع قيمة الموقع من الخطوة السابقة.

    docker tag myimagepath debug:1
    

    بالنسبة لبقية الخطوات، يمكنك الرجوع إلى الصورة المحلية مثل debug:1 بدلاً من قيمة مسار الصورة الكاملة.

تتبع أخطاء الخدمة

تلميح

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

لمزيد من المعلومات حول تصحيح الأخطاء وتعيين نقاط التوقف، راجع تصحيح الأخطاء.

  1. لبدء حاوية Docker باستخدام الصورة، استخدم الأمر التالي:

    docker run -it --name debug -p 8000:5001 -p 5678:5678 -v <my_local_path_to_score.py>:/var/azureml-app/score.py debug:1 /bin/bash
    

    يقوم هذا الأمر بإرفاق score.py محليًا بالأمر الموجود في الحاوية. لذلك، تنعكس أي تغييرات يتم إجراؤها في المحرر تلقائياً في الحاوية

  2. للحصول على تجربة أفضل، يمكنك الانتقال إلى الحاوية باستخدام واجهة VS Code جديدة. حدد المدى Docker من الشريط الجانبي VS Code، وابحث عن الحاوية المحلية التي تم إنشاؤها، في هذه الوثائقdebug:1. انقر بزر الماوس الأيمن فوق هذه الحاوية، وحدد "Attach Visual Studio Code"، ثم سيتم فتح واجهة VS Code جديدة تلقائياً، وتظهر هذه الواجهة داخل الحاوية التي تم إنشاؤها.

    واجهة الحاوية VS Code

  3. داخل الحاوية، قم بتشغيل الأمر التالي في shell

    runsvdir /var/runit
    

    ثم، يمكنك مشاهدة الإخراج التالي في shell داخل حاويتك:

    إخراج وحدة التحكم بتشغيل الحاوية

  4. لإرفاق VS Code بـ debugpy داخل الحاوية، افتح VS Code واستخدم المفتاح F5 أو حدد تتبع الأخطاء. عند المطالبة، حدد تكوين توزيع التعلم الآلي من Azure: تتبع أخطاء Docker. يمكنك أيضاً تحديد أيقونة الملحق تشغيل من الشريط الجانبي، وإدخال توزيع التعلم الآلي من Azure: تتبع أخطاء Docker من القائمة المنسدلة «تتبع الأخطاء»، ثم استخدم السهم الأخضر لإرفاق مصحح الأخطاء.

    رمز التصحيح، وابدأ تصحيح الأخطاء، ومحدد التكوين

    بعد تحديد السهم الأخضر وإرفاق مصحح الأخطاء، يمكنك رؤية بعض المعلومات الجديدة في واجهة VS Code للحاوية:

    مصحح أخطاء الحاوية المرفقة معلومات

    أيضاً، في واجهة VS Code الرئيسية، ما يمكنك رؤيته هو التالي:

    نقطة توقف VS Code في score.py

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

لمزيد من المعلومات حول استخدام VS Code لتصحيح أخطاء Python، راجع تتبع أخطاء تعليمة Python البرمجية لديك.

إيقاف الحاوية

لإيقاف الحاوية، استخدم الأمر التالي:

docker stop debug

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

الآن بعد أن قمت بإعداد VS Code Remote، يمكنك استخدام مثيل حساب كحوسبة بعيدة من VS Code لتتبع أخطاء التعليمات البرمجية بشكل تفاعلي.

تعرف على المزيد عن استكشاف الأخطاء وإصلاحها: