توزيع نماذج لتسجيل النقاط في نقاط نهاية الدفعة

ينطبق على:ملحق ML Azure CLI v2 (الحالي)Python SDK azure-ai-ml v2 (الحالي)

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

استخدم نقاط النهاية الدفعية لنشر النموذج عندما:

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

في هذه المقالة، يمكنك استخدام نقطة نهاية دفعية لنشر نموذج التعلم الآلي الذي يحل مشكلة التعرف على أرقام MNIST الكلاسيكية (المعهد الوطني المعدل للمعايير والتكنولوجيا). ثم يقوم النموذج المنشور بإجراء استدلال دفعي على كميات كبيرة من البيانات - في هذه الحالة، ملفات الصور. تبدأ بإنشاء نشر دفعي لنموذج تم إنشاؤه باستخدام Torch. يصبح هذا النشر هو التوزيع الافتراضي في نقطة النهاية. لاحقا، يمكنك إنشاء نشر ثان لوضع تم إنشاؤه باستخدام TensorFlow (Keras)، واختبار التوزيع الثاني، ثم تعيينه كنشر افتراضي لنقطة النهاية.

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

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

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

استنساخ مستودع الأمثلة

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

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli/endpoints/batch/deploy-models/mnist-classifier

إعداد النظام الخاص بك

الاتصال بمساحة العمل

أولا، اتصل بمساحة عمل Azure التعلم الآلي حيث ستعمل.

إذا لم تكن قد قمت بالفعل بتعيين الإعدادات الافتراضية لـAzure CLI، فاحفظ الإعدادات الافتراضية. لتجنب تمرير قيم الاشتراك ومساحة العمل ومجموعة الموارد والموقع عدة مرات، قم بتشغيل هذه التعليمة البرمجية:

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

إنشاء حساب

تعمل نقاط النهاية الدفعية على مجموعات الحوسبة وتدعم كل من مجموعات حساب Azure التعلم الآلي (AmlCompute) ومجموعات Kubernetes. المجموعات هي مورد مشترك، لذلك، يمكن لنظام مجموعة واحدة استضافة عملية نشر دفعة واحدة أو العديد من عمليات التوزيع (جنبا إلى جنب مع أحمال العمل الأخرى، إذا رغبت في ذلك).

إنشاء حساب باسم batch-cluster، كما هو موضح في التعليمات البرمجية التالية. يمكنك ضبط حسب الحاجة والإشارة إلى الحساب الخاص بك باستخدام azureml:<your-compute-name>.

az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5

إشعار

لا يتم تحصيل رسوم منك مقابل الحساب في هذه المرحلة، حيث يبقى نظام المجموعة عند 0 عقد حتى يتم استدعاء نقطة نهاية دفعة وإرسال مهمة تسجيل الدفعات. لمزيد من المعلومات حول تكاليف الحوسبة، راجع إدارة التكلفة وتحسينها ل AmlCompute.

إنشاء نقطة نهاية دفعية

نقطة نهاية الدفعة هي نقطة نهاية HTTPS يمكن للعملاء الاتصال بها لتشغيل مهمة تسجيل الدفعات. وظيفة تسجيل الدفعات هي وظيفة تسجل مدخلات متعددة. توزيع الدفعة هو مجموعة من موارد الحوسبة التي تستضيف النموذج الذي يقوم بتسجيل الدفعات الفعلية (أو استنتاج الدفعة). يمكن أن تحتوي نقطة نهاية دفعية واحدة على عدة عمليات توزيع للدفعة. لمزيد من المعلومات حول نقاط النهاية الدفعية، راجع ما هي نقاط نهاية الدفعة؟.

تلميح

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

  1. قم بتسمية نقطة النهاية. يجب أن يكون اسم نقطة النهاية فريدا داخل منطقة Azure، حيث يتم تضمين الاسم في URI لنقطة النهاية. على سبيل المثال، يمكن أن تكون هناك نقطة نهاية دفعة واحدة فقط بالاسم mybatchendpoint في westus2.

    ضع اسم نقطة النهاية في متغير حتى تتمكن من الرجوع إليه بسهولة لاحقا.

    ENDPOINT_NAME="mnist-batch"
    
  2. تكوين نقطة نهاية الدفعة

    يعرف ملف YAML التالي نقطة نهاية دفعية. يمكنك استخدام هذا الملف مع الأمر CLI لإنشاء نقطة نهاية الدفعة.

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: mnist-batch
    description: A batch endpoint for scoring images from the MNIST dataset.
    tags:
      type: deep-learning
    

    يصف الجدول التالي الخصائص الرئيسية لنقطة النهاية. للحصول على مخطط YAML لنقطة النهاية الدفعية الكاملة، راجع مخطط YAML لنقطة نهاية دفعية CLI (v2).

    المفتاح ‏‏الوصف
    name اسم نقطة نهاية دفعية. يجب أن يكون فريدًا على مستوى منطقة Azure.
    description وصف نقطة نهاية الدفعة. هذه الخاصية اختيارية.
    tags العلامات المراد تضمينها في نقطة النهاية. هذه الخاصية اختيارية.
  3. أنشئ نقطة النهاية:

    قم بتشغيل التعليمات البرمجية التالية لإنشاء نقطة نهاية دفعية.

    az ml batch-endpoint create --file endpoint.yml  --name $ENDPOINT_NAME
    

إنشاء توزيع دفعة

توزيع النموذج هو مجموعة من الموارد المطلوبة لاستضافة النموذج الذي يقوم بالاستدلال الفعلي. لإنشاء توزيع نموذج دفعي، تحتاج إلى العناصر التالية:

  • نموذج مسجل في مساحة العمل
  • التعليمات البرمجية لتسجيل النموذج
  • بيئة مع تثبيت تبعيات النموذج
  • إعدادات الحوسبة والموارد التي تم إنشاؤها مسبقا
  1. ابدأ بتسجيل النموذج الذي سيتم نشره - نموذج Torch لمشكلة التعرف على الأرقام الشائعة (MNIST). يمكن لنشر الدفعات نشر النماذج المسجلة في مساحة العمل فقط. يمكنك تخطي هذه الخطوة إذا كان النموذج الذي تريد نشره مسجلا بالفعل.

    تلميح

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

    MODEL_NAME='mnist-classifier-torch'
    az ml model create --name $MODEL_NAME --type "custom_model" --path "deployment-torch/model"
    
  2. الآن حان الوقت لإنشاء برنامج نصي لتسجيل النقاط. تتطلب عمليات نشر الدفعات برنامجا نصيا لتسجيل النقاط يشير إلى كيفية تنفيذ نموذج معين وكيفية معالجة بيانات الإدخال. تدعم نقاط النهاية الدفعية البرامج النصية التي تم إنشاؤها في Python. في هذه الحالة، يمكنك نشر نموذج يقرأ ملفات الصور التي تمثل الأرقام ويخرج الرقم المقابل. البرنامج النصي لتسجيل النقاط كما يلي:

    إشعار

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

    تحذير

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

    توزيع الشعلة/التعليمات البرمجية/batch_driver.py

    import os
    import pandas as pd
    import torch
    import torchvision
    import glob
    from os.path import basename
    from mnist_classifier import MnistClassifier
    from typing import List
    
    
    def init():
        global model
        global device
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        # It is the path to the model folder
        model_path = os.environ["AZUREML_MODEL_DIR"]
        model_file = glob.glob(f"{model_path}/*/*.pt")[-1]
    
        model = MnistClassifier()
        model.load_state_dict(torch.load(model_file))
        model.eval()
    
        device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    
    
    def run(mini_batch: List[str]) -> pd.DataFrame:
        print(f"Executing run method over batch of {len(mini_batch)} files.")
    
        results = []
        with torch.no_grad():
            for image_path in mini_batch:
                image_data = torchvision.io.read_image(image_path).float()
                batch_data = image_data.expand(1, -1, -1, -1)
                input = batch_data.to(device)
    
                # perform inference
                predict_logits = model(input)
    
                # Compute probabilities, classes and labels
                predictions = torch.nn.Softmax(dim=-1)(predict_logits)
                predicted_prob, predicted_class = torch.max(predictions, axis=-1)
    
                results.append(
                    {
                        "file": basename(image_path),
                        "class": predicted_class.numpy()[0],
                        "probability": predicted_prob.numpy()[0],
                    }
                )
    
        return pd.DataFrame(results)
    
  3. إنشاء بيئة حيث سيتم تشغيل نشر الدفعة. يجب أن تتضمن البيئة الحزم azureml-core و azureml-dataset-runtime[fuse]، والتي تتطلبها نقاط النهاية الدفعية، بالإضافة إلى أي تبعية تتطلبها التعليمات البرمجية الخاصة بك للتشغيل. في هذه الحالة، تم التقاط التبعيات في conda.yaml ملف:

    deployment-torch/environment/conda.yaml

    name: mnist-env
    channels:
      - conda-forge
    dependencies:
      - python=3.8.5
      - pip<22.0
      - pip:
        - torch==1.13.0
        - torchvision==0.14.0
        - pytorch-lightning
        - pandas
        - azureml-core
        - azureml-dataset-runtime[fuse]
    

    هام

    الحزم azureml-core و azureml-dataset-runtime[fuse] مطلوبة من قبل عمليات توزيع الدفعات ويجب تضمينها في تبعيات البيئة.

    حدد البيئة كما يلي:

    سيتم تضمين تعريف البيئة في تعريف النشر نفسه كبيئة مجهولة. سترى في الأسطر التالية في النشر:

    environment:
      name: batch-torch-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    

    تحذير

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

  4. إنشاء تعريف نشر

    نشر الشعلة/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    name: mnist-torch-dpl
    description: A deployment using Torch to solve the MNIST classification dataset.
    endpoint_name: mnist-batch
    type: model
    model:
      name: mnist-classifier-torch
      path: model
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    environment:
      name: batch-torch-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    compute: azureml:batch-cluster
    resources:
      instance_count: 1
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 10
      output_action: append_row
      output_file_name: predictions.csv
      retry_settings:
        max_retries: 3
        timeout: 30
      error_threshold: -1
      logging_level: info
    

    يصف الجدول التالي الخصائص الرئيسية لتوزيع الدفعة. للحصول على مخطط YAML لتوزيع الدفعة الكاملة، راجع مخطط توزيع الدفعة CLI (v2) YAML.

    المفتاح ‏‏الوصف
    name اسم التوزيع.
    endpoint_name اسم نقطة النهاية لإنشاء التوزيع ضمن.
    model النموذج الذي ينبغي استخدامه لتسجيل الدفعات. يعرف المثال نموذجا مضمنا باستخدام path. يسمح هذا التعريف بتحميل ملفات النموذج وتسجيلها تلقائيا باسم وإصدار تم إنشاؤها تلقائيا. راجع مخطط النموذج لمزيد من الخيارات. يجب عليك إنشاء النموذج بشكل منفصل والإشارة إليه هنا، كأفضل ممارسة لسيناريوهات الإنتاج. للإشارة إلى نموذج موجود، استخدم البناء azureml:<model-name>:<model-version>.
    code_configuration.code الدليل المحلي الذي يحتوي على جميع التعليمات البرمجية المصدر Python لتسجيل النموذج.
    code_configuration.scoring_script ملف Python في code_configuration.code الدليل. يجب أن يحتوي هذا الملف على دالة init() ودالة run(). استخدم الدالة init() لأي إعداد مكلف أو شائع (على سبيل المثال، لتحميل النموذج في الذاكرة). init() سيتم استدعاؤه مرة واحدة فقط في بداية العملية. استخدم run(mini_batch) لتسجيل نقاط كل إدخال؛ قيمة mini_batch هي قائمة بمسارات الملفات. يجب أن ترجع الدالة run() pandas DataFrame أو صفيف. يشير كل عنصر تم إرجاعه إلى تشغيل واحد ناجح لعنصر الإدخال في mini_batch. لمزيد من المعلومات حول كيفية تأليف برنامج نصي لتسجيل النقاط، راجع فهم البرنامج النصي لتسجيل النقاط.
    environment البيئة لتسجيل النموذج. يحدد المثال بيئة مضمنة باستخدام conda_file و image. سيتم تثبيت التبعيات conda_file أعلى image. سيتم تسجيل البيئة تلقائيا باسم وإصدار تم إنشاؤهما تلقائيا. راجع مخطط البيئة لمزيد من الخيارات. ينبغي، كأفضل ممارسة لسيناريوهات الإنتاج، إنشاء البيئة بشكل منفصل والإشارة إليها هنا. للإشارة إلى بيئة موجودة، استخدم بناء الجملة azureml:<environment-name>:<environment-version>.
    compute الحساب لتشغيل تسجيل نقاط الدفعة. يستخدم المثال الذي batch-cluster تم إنشاؤه في البداية ويشير إليه باستخدام بناء الجملة azureml:<compute-name> .
    resources.instance_count عدد المثيلات التي ينبغي استخدامها لكل مهمة تسجيل دفعة.
    settings.max_concurrency_per_instance [اختياري] الحد الأقصى لعدد عمليات التشغيل المتوازية scoring_script لكل مثيل.
    settings.mini_batch_size [اختياري] عدد الملفات التي يمكن لـ scoring_script معالجتها في استدعاء run() واحد.
    settings.output_action [اختياري] كيفية تنظيم الإخراج في ملف الإخراج. سيدمج append_row جميع run() نتائج الإخراج التي تم إرجاعها في ملف واحد يسمى output_file_name. summary_only لن يدمج نتائج الإخراج وسيحسب error_thresholdفقط .
    settings.output_file_name [اختياري] اسم ملف إخراج تسجيل نقاط الدفعات ل append_rowoutput_action.
    settings.retry_settings.max_retries [اختياري] العدد الأقصى من المحاولات لفشل scoring_scriptrun().
    settings.retry_settings.timeout [اختياري] المهلة بالثواني لـscoring_scriptrun() لتسجيل نقاط دفعة صغيرة.
    settings.error_threshold [اختياري] عدد حالات فشل تسجيل ملف الإدخال التي يجب تجاهلها. إذا تجاوز عدد الأخطاء للإدخال بالكامل هذه القيمة، فسيتم إنهاء وظيفة تسجيل الدُفعة. يستخدم المثال -1، الذي يشير إلى السماح بأي عدد من حالات الفشل دون إنهاء مهمة تسجيل الدفعات.
    settings.logging_level [اختياري] إسهاب السجل. القيم في تزايد الإسهاب هي: WARNING و INFO و DEBUG.
    settings.environment_variables [اختياري] قاموس أزواج اسم-قيمة متغير البيئة لتعيينها لكل مهمة تسجيل دفعة.
  5. إنشاء التوزيع:

    قم بتشغيل التعليمات البرمجية التالية لإنشاء نشر دفعة ضمن نقطة نهاية الدفعة، وتعيينها كنشر افتراضي.

    az ml batch-deployment create --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
    

    تلميح

    تعين المعلمة --set-default التوزيع الذي تم إنشاؤه حديثا كتوزيع افتراضي لنقطة النهاية. إنها طريقة ملائمة لإنشاء توزيع افتراضي جديد لنقطة النهاية، وإنشاء التوزيع الأول بشكل خاص. كأفضل ممارسة لسيناريوهات الإنتاج، قد تحتاج إلى إنشاء نشر جديد دون تعيينه كافتراضي. تحقق من أن النشر يعمل كما تتوقع، ثم قم بتحديث النشر الافتراضي لاحقا. لمزيد من المعلومات حول تنفيذ هذه العملية، راجع قسم نشر نموذج جديد.

  6. تحقق من نقطة نهاية الدفعة وتفاصيل النشر.

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

    DEPLOYMENT_NAME="mnist-torch-dpl"
    az ml batch-deployment show --name $DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME
    

تشغيل نقاط النهاية الدفعية ونتائج الوصول

استدعاء نقطة نهاية دُفعة لتشغيل مهمة تسجيل دُفعة يتم إرجاع المهمة name من استجابة الاستدعاء ويمكن استخدامها لتتبع تقدم تسجيل الدفعات. عند تشغيل نماذج لتسجيل النقاط في نقاط نهاية الدفعة، تحتاج إلى تحديد المسار إلى بيانات الإدخال بحيث يمكن لنقاط النهاية العثور على البيانات التي تريد تسجيلها. يوضح المثال التالي كيفية بدء مهمة جديدة عبر عينة من بيانات مجموعة بيانات MNIST المخزنة في حساب تخزين Azure.

يمكنك تشغيل نقطة نهاية دفعية واستدعاءها باستخدام Azure CLI أو Azure التعلم الآلي SDK أو نقاط نهاية REST. لمزيد من التفاصيل حول هذه الخيارات، راجع إنشاء وظائف وبيانات إدخال لنقاط نهاية الدفعة.

إشعار

كيف يعمل التوازي؟

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

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)

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

مراقبة تقدم تنفيذ مهمة الدفعة

تستغرق مهام تسجيل الدُفعات عادةً بعض الوقت لمعالجة مجموعة الإدخالات بأكملها.

تتحقق التعليمات البرمجية التالية من حالة الوظيفة وتخرج ارتباطا إلى Azure التعلم الآلي studio لمزيد من التفاصيل.

az ml job show -n $JOB_NAME --web

فحص نتائج تسجيل الدُفعات

يتم تخزين مخرجات المهمة في التخزين السحابي، إما في تخزين الكائن الثنائي كبير الحجم الافتراضي لمساحة العمل، أو التخزين الذي حددته. لمعرفة كيفية تغيير الإعدادات الافتراضية، راجع تكوين موقع الإخراج. تسمح لك الخطوات التالية بعرض نتائج التسجيل في Azure Storage Explorer عند اكتمال المهمة:

  1. قم بتشغيل التعليمات البرمجية التالية لفتح مهمة تسجيل الدفعات في Azure التعلم الآلي studio. يتم تضمين ارتباط استوديو المهمة أيضا في استجابة invoke، كقيمة لinteractionEndpoints.Studio.endpoint.

    az ml job show -n $JOB_NAME --web
    
  2. في الرسم البياني للوظيفة، حدد الخطوة batchscoring.

  3. حدد علامة التبويب «Outputs + logs»، ثم حدد عرض مخرجات البيانات.

  4. من مخرجات البيانات، حدد الأيقونة لفتح Storage Explorer.

    لقطة شاشة استوديو تعرض عرض موقع مخرجات البيانات.

    نتائج التسجيل في Storage Explorer مشابهة لصفحة العينة التالية:

    لقطة شاشة لإخراج تسجيل النقاط.

تكوين موقع الإخراج

بشكل افتراضي، يتم تخزين نتائج تسجيل الدفعات في مخزن الكائنات الثنائية كبيرة الحجم الافتراضي لمساحة العمل داخل مجلد يسمى باسم المهمة (GUID تم إنشاؤه بواسطة النظام). يمكنك تكوين مكان تخزين مخرجات تسجيل النقاط عند استدعاء نقطة النهاية الدفعية.

قم باستخدام output-path لتكوين أي مجلد في مخزن البيانات المسجل التعلم الآلي من Microsoft Azure. الصيغة الخاصة بـ --output-pathهو نفسه عند --input تحديد مجلداً أي azureml://datastores/<datastore-name>/paths/<path-on-datastore>/. استخدم --set output_file_name=<your-file-name> لتكوين اسم ملف إخراج جديد.

OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
OUTPUT_PATH="azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME"

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --output-path $OUTPUT_PATH --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)

تحذير

لابد من استخدام موقع إخراج فريد. إذا كان ملف الإخراج موجوداً، فستفشل مهمة تسجيل نقاط الدفعة.

هام

على عكس المدخلات، يمكن تخزين المخرجات فقط في Azure التعلم الآلي مخازن البيانات التي تعمل على حسابات تخزين الكائنات الثنائية كبيرة الحجم.

الكتابة فوق تكوين النشر لكل مهمة

عند استدعاء نقطة نهاية دفعية، يمكن الكتابة فوق بعض الإعدادات للاستفادة على أفضل نحو من موارد الحوسبة ولتحسين الأداء. يمكن تكوين الإعدادات التالية على أساس كل وظيفة:

  • عدد المثيلات: استخدم هذا الإعداد للكتابة فوق عدد المثيلات المطلوب طلبها من نظام مجموعة الحوسبة. قد تحتاج، على سبيل المثال وللحصول على حجم أكبر من مدخلات البيانات، إلى استخدام مزيد من المثيلات لتسريع تسجيل نقاط الدفعات من طرف إلى طرف.
  • حجم الدفعة المصغرة: استخدم هذا الإعداد للكتابة فوق عدد الملفات المراد تضمينها في كل دفعة صغيرة. يتم تحديد عدد الدفعات المصغرة حسب إجمالي عدد ملفات الإدخال وحجم الدفعة المصغرة. حجم دفعة صغيرة أصغر يولد المزيد من الدفعات المصغرة. يمكن تشغيل الدفعات المصغرة بالتوازي، ولكن قد يكون هناك جدولة إضافية ومصروفات زائدة للاستدعاء.
  • يمكن الكتابة فوق الإعدادات الأخرى، مثل الحد الأقصى لإعادة المحاولة والمهلة وحد الخطأ. قد تؤثر هذه الإعدادات على وقت تسجيل الدفعات من طرف إلى طرف لأحمال العمل المختلفة.
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --mini-batch-size 20 --instance-count 5 --query name -o tsv)

إضافة عمليات نشر إلى نقطة نهاية

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

في هذا المثال، يمكنك إضافة نشر ثان يستخدم نموذجا تم إنشاؤه باستخدام Keras وTensorFlow لحل نفس مشكلة MNIST.

إضافة نشر ثان

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

    يتم تضمين تعريف البيئة في تعريف النشر نفسه كبيئة مجهولة.

    environment:
      name: batch-tensorflow-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    

    يبدو ملف conda المستخدم كما يلي:

    deployment-keras/environment/conda.yaml

    name: tensorflow-env
    channels:
      - conda-forge
    dependencies:
      - python=3.8.5
      - pip
      - pip:
        - pandas
        - tensorflow
        - pillow
        - azureml-core
        - azureml-dataset-runtime[fuse]
    
  2. إنشاء برنامج نصي لتسجيل النقاط للنموذج:

    deployment-keras/code/batch_driver.py

    import os
    import numpy as np
    import pandas as pd
    import tensorflow as tf
    from typing import List
    from os.path import basename
    from PIL import Image
    from tensorflow.keras.models import load_model
    
    
    def init():
        global model
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
    
        # load the model
        model = load_model(model_path)
    
    
    def run(mini_batch: List[str]) -> pd.DataFrame:
        print(f"Executing run method over batch of {len(mini_batch)} files.")
    
        results = []
        for image_path in mini_batch:
            data = Image.open(image_path)
            data = np.array(data)
            data_batch = tf.expand_dims(data, axis=0)
    
            # perform inference
            pred = model.predict(data_batch)
    
            # Compute probabilities, classes and labels
            pred_prob = tf.math.reduce_max(tf.math.softmax(pred, axis=-1)).numpy()
            pred_class = tf.math.argmax(pred, axis=-1).numpy()
    
            results.append(
                {
                    "file": basename(image_path),
                    "class": pred_class[0],
                    "probability": pred_prob,
                }
            )
    
        return pd.DataFrame(results)
    
  3. إنشاء تعريف نشر

    deployment-keras/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    name: mnist-keras-dpl
    description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset.
    endpoint_name: mnist-batch
    type: model
    model: 
      name: mnist-classifier-keras
      path: model
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    environment:
      name: batch-tensorflow-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    compute: azureml:batch-cluster
    resources:
      instance_count: 1
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 10
      output_action: append_row
      output_file_name: predictions.csv
    
  4. إنشاء التوزيع:

    قم بتشغيل التعليمات البرمجية التالية لإنشاء نشر دفعة ضمن نقطة نهاية الدفعة وتعيينها كنشر افتراضي.

    az ml batch-deployment create --file deployment-keras/deployment.yml --endpoint-name $ENDPOINT_NAME
    

    تلميح

    المعلمة --set-default مفقودة في هذه الحالة. كأفضل ممارسة لسيناريوهات الإنتاج، قم بإنشاء نشر جديد دون تعيينه كافتراضي. ثم تحقق من ذلك، وقم بتحديث النشر الافتراضي لاحقا.

اختبر توزيع دفعة غير افتراضي

لاختبار التوزيع الجديد غير الافتراضي، تحتاج إلى معرفة اسم النشر الذي تريد تشغيله.

DEPLOYMENT_NAME="mnist-keras-dpl"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name $DEPLOYMENT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)

يتم استخدام الإشعار --deployment-name لتحديد النشر المراد تنفيذه. تسمح لك invoke هذه المعلمة بنشر غير افتراضي دون تحديث النشر الافتراضي لنقطة نهاية الدفعة.

تحديث توزيع الدفعة الافتراضي

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

az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME

حذف نقطة النهاية الدفعية والتوزيع

إذا لم تكن تستخدم نشر الدفعة القديم، فاحذفه عن طريق تشغيل التعليمات البرمجية التالية. يستخدم --yes لتأكيد الحذف.

az ml batch-deployment delete --name mnist-torch-dpl --endpoint-name $ENDPOINT_NAME --yes

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

az ml batch-endpoint delete --name $ENDPOINT_NAME --yes