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

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

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

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

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

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

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

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

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

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

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

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

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

أولا، اتصل بمساحة عمل التعلم الآلي من Microsoft 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-ubuntu22.04:latest
      conda_file: environment/conda.yaml
    
  4. انتقل إلى علامة التبويب البيئات في القائمة الجانبية.

  5. حددإنشاء> مخصصة.

    1. أدخل اسم البيئة، في هذه الحالة torch-batch-env.

    2. بالنسبة إلى Select environment source، حدد Use existing docker image with optional conda file.

    3. بالنسبة لمسار صورة سجل الحاوية، أدخل mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04.

    4. حدد التالي للانتقال إلى قسم "تخصيص".

    5. انسخ محتوى ملف deployment-torch/environment/conda.yaml من مستودع GitHub إلى المدخل.

  6. اختر التالي حتى تصل إلى "صفحة المراجعة".

  7. حدد إنشاء وانتظر حتى تصبح البيئة جاهزة.


    تحذير

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

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

    نشر الشعلة/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-ubuntu22.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 قاموس أزواج اسم-قيمة متغير البيئة لتعيينها لكل مهمة تسجيل دفعة.
  9. انتقل إلى علامة التبويب نقاط النهاية في القائمة الجانبية.

    1. حدد علامة التبويب نقاط النهاية الدفعية>إنشاء.

    2. امنح نقطة النهاية اسما، في هذه الحالة mnist-batch. يمكنك تكوين بقية الحقول أو تركها فارغة.

    3. حدد التالي للانتقال إلى قسم "Model".

    4. حدد نموذج mnist-classifier-torch.

    5. حدد التالي للانتقال إلى صفحة "النشر".

    6. امنح النشر اسما.

  10. بالنسبة لإجراء الإخراج، تأكد من تحديد صف الإلحاق .

    1. بالنسبة إلى اسم ملف الإخراج، تأكد من أن ملف إخراج تسجيل الدفعات هو الملف الذي تحتاجه. الافتراضي هو predictions.csv.

    2. بالنسبة لحجم الدفعة المصغر، اضبط حجم الملفات التي سيتم تضمينها في كل دفعة صغيرة. يتحكم هذا الحجم في كمية البيانات التي يتلقاها البرنامج النصي للتسجيل لكل دفعة.

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

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

    5. بمجرد الانتهاء، حدد التالي للانتقال إلى صفحة "Code + environment".

    6. بالنسبة إلى "تحديد برنامج نصي لتسجيل النقاط للاستدلال"، استعرض للعثور على ملف البرنامج النصي لتسجيل النقاط وتحديده deployment-torch/code/batch_driver.py.

    7. في قسم "Select environment"، حدد البيئة التي أنشأتها مسبقا torch-batch-env.

    8. حدد التالي للانتقال إلى صفحة "الحساب".

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

      تحذير

      يتم دعم مجموعات Azure Kubernetes في عمليات التوزيع المجمعة، ولكن فقط عند إنشائها باستخدام واجهة سطر الأوامر (CLI) للتعلم الآلي من Microsoft Azure أو Python SDK.

    10. بالنسبة إلى عدد المثيلات، أدخل عدد مثيلات الحوسبة التي تريدها للنشر. في هذه الحالة، استخدم 2.

    11. حدد التالي.

  11. إنشاء النشر:

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

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

    تلميح

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

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

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

    DEPLOYMENT_NAME="mnist-torch-dpl"
    az ml batch-deployment show --name $DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME
    
  13. حدد علامة التبويب نقاط النهاية الدفعية .

    1. حدد نقطة نهاية الدفعة التي تريد عرضها.

    2. تعرض صفحة تفاصيل نقطة النهاية تفاصيل نقطة النهاية جنبا إلى جنب مع جميع عمليات النشر المتوفرة في نقطة النهاية.

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

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

فهم تدفق البيانات

قبل تشغيل نقطة نهاية الدفعة، افهم كيفية تدفق البيانات عبر النظام:

المدخلات: البيانات المراد معالجتها (النتيجة). ويشمل ذلك ما يلي:

  • الملفات المخزنة في Azure Storage (تخزين كائن ثنائي كبير الحجم، مستودع البيانات)
  • المجلدات التي تحتوي على ملفات متعددة
  • مجموعات البيانات المسجلة في التعلم الآلي من Microsoft Azure

المعالجة: يعالج النموذج المنشور بيانات الإدخال على دفعات (دفعات صغيرة) ويولد تنبؤات.

المخرجات: نتائج من النموذج، مخزنة كملفات في Azure Storage. بشكل افتراضي، يتم حفظ المخرجات في تخزين الكائن الثنائي كبير الحجم الافتراضي لمساحة العمل، ولكن يمكنك تحديد موقع مختلف.

استدعاء نقطة نهاية دفعية

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

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

ملاحظة

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

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

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input $SAMPLE_INPUT_URI --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 $SAMPLE_INPUT_URI --output-path $OUTPUT_PATH --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)

تحذير

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

هام

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

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

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

ما هي الإعدادات التي يمكن تجاوزها؟

يمكنك تكوين الإعدادات التالية على أساس كل وظيفة:

الإعداد متى تستخدم سيناريو مثال
عدد المثيلات عندما يكون لديك أحجام بيانات متفاوتة استخدم المزيد من المثيلات لمجموعات البيانات الأكبر (10 مثيلات ل 1 مليون ملف مقابل مثيلتين ل 100,000 ملف).
حجم الدفعة المصغرة عندما تحتاج إلى تحقيق التوازن بين الإنتاجية واستخدام الذاكرة استخدم دفعات أصغر (10-50 ملفا) للصور الكبيرة والدفعات الأكبر (100-500 ملف) للملفات النصية الصغيرة.
الحد الأقصى لإعادة المحاولة عندما تختلف جودة البيانات إعادة محاولة أعلى (5-10) للبيانات الصاخبة ؛ عمليات إعادة المحاولة الأقل (1-3) للبيانات النظيفة
مهله متى يختلف وقت المعالجة حسب نوع البيانات مهلة أطول (300 ثانية) للنماذج المعقدة ؛ مهلة أقصر (30 ثانية) للموديلات البسيطة
عتبة الخطأ عندما تحتاج إلى مستويات مختلفة من التسامح مع الفشل عتبة صارمة (-1) للوظائف الحرجة؛ عتبة متساهلة (10%) للوظائف التجريبية

كيفية تجاوز الإعدادات

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-ubuntu22.04:latest
      conda_file: environment/conda.yaml
    
  2. انسخ محتوى الملف deployment-keras/environment/conda.yaml من مستودع GitHub إلى المدخل.

    1. حدد التالي حتى تصل إلى "صفحة المراجعة".

    2. حدد Create وانتظر حتى تصبح البيئة جاهزة للاستخدام.


    يبدو ملف 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]
    
  3. إنشاء برنامج نصي لتسجيل النقاط للنموذج:

    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)
    
  4. إنشاء تعريف نشر

    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-ubuntu22.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
    
  5. حدد التالي للمتابعة إلى صفحة "التعليمات البرمجية + البيئة".

    1. لتحديد برنامج نصي لتسجيل النقاط للاستدلال، استعرض لتحديد ملف تسجيل البرنامج النصي deployment-keras/code/batch_driver.py.

    2. بالنسبة إلى تحديد البيئة، حدد البيئة التي أنشأتها في خطوة سابقة.

    3. حدد التالي.

    4. في صفحة Compute ، حدد مجموعة الحوسبة التي أنشأتها في خطوة سابقة.

    5. بالنسبة إلى عدد المثيلات، أدخل عدد مثيلات الحوسبة التي تريدها للنشر. في هذه الحالة، استخدم 2.

    6. حدد التالي.

  6. إنشاء النشر:

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

    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 $SAMPLE_INPUT_URI --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