توزيع نماذج لتسجيل النقاط في نقاط نهاية الدفعة
ينطبق على:ملحق ML Azure CLI v2 (الحالي)Python SDK azure-ai-ml v2 (الحالي)
توفر نقاط النهاية الدفعية طريقة ملائمة لنشر النماذج التي تعمل على الاستدلال على كميات كبيرة من البيانات. تعمل نقاط النهاية هذه على تبسيط عملية استضافة نماذجك لتسجيل الدفعات، بحيث يكون تركيزك على التعلم الآلي، بدلا من البنية الأساسية.
استخدم نقاط النهاية الدفعية لنشر النموذج عندما:
- لديك نماذج مكلفة تتطلب وقتا أطول لتشغيل الاستدلال.
- تحتاج إلى إجراء الاستدلال على كميات كبيرة من البيانات التي يتم توزيعها في ملفات متعددة.
- ليس لديك متطلبات زمن انتقال منخفضة.
- يمكنك الاستفادة من التوازي.
في هذه المقالة، يمكنك استخدام نقطة نهاية دفعية لنشر نموذج التعلم الآلي الذي يحل مشكلة التعرف على أرقام MNIST الكلاسيكية (المعهد الوطني المعدل للمعايير والتكنولوجيا). ثم يقوم النموذج المنشور بإجراء استدلال دفعي على كميات كبيرة من البيانات - في هذه الحالة، ملفات الصور. تبدأ بإنشاء نشر دفعي لنموذج تم إنشاؤه باستخدام Torch. يصبح هذا النشر هو التوزيع الافتراضي في نقطة النهاية. لاحقا، يمكنك إنشاء نشر ثان لوضع تم إنشاؤه باستخدام TensorFlow (Keras)، واختبار التوزيع الثاني، ثم تعيينه كنشر افتراضي لنقطة النهاية.
للمتابعة مع نماذج التعليمات البرمجية والملفات اللازمة لتشغيل الأوامر في هذه المقالة محليا، راجع قسم استنساخ مستودع الأمثلة . يتم تضمين نماذج التعليمات البرمجية والملفات في مستودع أمثلة azureml.
المتطلبات الأساسية
قبل اتباع الخطوات الواردة في هذه المقالة، تأكد من أن لديك المتطلبات الأساسية التالية:
اشتراك Azure. في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء. جرّب الإصدار المجاني أو المدفوع من «التعلم الآلي» من Azure.
مساحة عمل للتعلم الآلي من Microsoft Azure. إذا لم يكن لديك واحدة، فاستخدم الخطوات الواردة في مقالة كيفية إدارة مساحات العمل لإنشاء مساحة عمل.
لتنفيذ المهام التالية، تأكد من أن لديك هذه الأذونات في مساحة العمل:
لإنشاء/إدارة نقاط النهاية والنشرات الدفعية: استخدم دور المالك أو دور المساهم أو دور مخصص يسمح .
Microsoft.MachineLearningServices/workspaces/batchEndpoints/*
لإنشاء عمليات نشر ARM في مجموعة موارد مساحة العمل: استخدم دور المالك أو دور المساهم أو دور مخصص يسمح
Microsoft.Resources/deployments/write
في مجموعة الموارد حيث يتم نشر مساحة العمل.
تحتاج إلى تثبيت البرنامج التالي للعمل مع Azure التعلم الآلي:
ينطبق على:ملحق CLI للتعلم الآلي من Microsoft Azure v2 (الحالي)
Azure CLI وملحق
ml
Azure التعلم الآلي.az extension add -n ml
استنساخ مستودع الأمثلة
يستند المثال في هذه المقالة إلى نماذج التعليمات البرمجية الموجودة في مستودع أمثلة 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 يمكن للعملاء الاتصال بها لتشغيل مهمة تسجيل الدفعات. وظيفة تسجيل الدفعات هي وظيفة تسجل مدخلات متعددة. توزيع الدفعة هو مجموعة من موارد الحوسبة التي تستضيف النموذج الذي يقوم بتسجيل الدفعات الفعلية (أو استنتاج الدفعة). يمكن أن تحتوي نقطة نهاية دفعية واحدة على عدة عمليات توزيع للدفعة. لمزيد من المعلومات حول نقاط النهاية الدفعية، راجع ما هي نقاط نهاية الدفعة؟.
تلميح
تعمل إحدى عمليات توزيع الدفعات كنشر افتراضي لنقطة النهاية. عند استدعاء نقطة النهاية، يقوم النشر الافتراضي بتسجيل الدفعة الفعلية. لمزيد من المعلومات حول نقاط النهاية والنشرات الدفعية، راجع نقاط النهاية الدفعية ونشر الدفعات.
قم بتسمية نقطة النهاية. يجب أن يكون اسم نقطة النهاية فريدا داخل منطقة Azure، حيث يتم تضمين الاسم في URI لنقطة النهاية. على سبيل المثال، يمكن أن تكون هناك نقطة نهاية دفعة واحدة فقط بالاسم
mybatchendpoint
فيwestus2
.تكوين نقطة نهاية الدفعة
يعرف ملف 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
العلامات المراد تضمينها في نقطة النهاية. هذه الخاصية اختيارية. أنشئ نقطة النهاية:
إنشاء توزيع دفعة
توزيع النموذج هو مجموعة من الموارد المطلوبة لاستضافة النموذج الذي يقوم بالاستدلال الفعلي. لإنشاء توزيع نموذج دفعي، تحتاج إلى العناصر التالية:
- نموذج مسجل في مساحة العمل
- التعليمات البرمجية لتسجيل النموذج
- بيئة مع تثبيت تبعيات النموذج
- إعدادات الحوسبة والموارد التي تم إنشاؤها مسبقا
ابدأ بتسجيل النموذج الذي سيتم نشره - نموذج Torch لمشكلة التعرف على الأرقام الشائعة (MNIST). يمكن لنشر الدفعات نشر النماذج المسجلة في مساحة العمل فقط. يمكنك تخطي هذه الخطوة إذا كان النموذج الذي تريد نشره مسجلا بالفعل.
تلميح
ترتبط النماذج بالنشر، بدلا من نقطة النهاية. وهذا يعني أن نقطة نهاية واحدة يمكن أن تخدم نماذج مختلفة (أو إصدارات نموذج) تحت نفس نقطة النهاية، شريطة نشر النماذج المختلفة (أو إصدارات النموذج) في عمليات نشر مختلفة.
الآن حان الوقت لإنشاء برنامج نصي لتسجيل النقاط. تتطلب عمليات نشر الدفعات برنامجا نصيا لتسجيل النقاط يشير إلى كيفية تنفيذ نموذج معين وكيفية معالجة بيانات الإدخال. تدعم نقاط النهاية الدفعية البرامج النصية التي تم إنشاؤها في 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)
إنشاء بيئة حيث سيتم تشغيل نشر الدفعة. يجب أن تتضمن البيئة الحزم
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
تحذير
البيئات المنسقة غير مدعومة في عمليات توزيع الدفعات. تحتاج إلى تحديد البيئة الخاصة بك. يمكنك دائما استخدام الصورة الأساسية لبيئة منسقة كبيئة لك لتبسيط العملية.
إنشاء تعريف نشر
نشر الشعلة/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_row
output_action
.settings.retry_settings.max_retries
[اختياري] العدد الأقصى من المحاولات لفشل scoring_script
run()
.settings.retry_settings.timeout
[اختياري] المهلة بالثواني لـ scoring_script
run()
لتسجيل نقاط دفعة صغيرة.settings.error_threshold
[اختياري] عدد حالات فشل تسجيل ملف الإدخال التي يجب تجاهلها. إذا تجاوز عدد الأخطاء للإدخال بالكامل هذه القيمة، فسيتم إنهاء وظيفة تسجيل الدُفعة. يستخدم المثال -1
، الذي يشير إلى السماح بأي عدد من حالات الفشل دون إنهاء مهمة تسجيل الدفعات.settings.logging_level
[اختياري] إسهاب السجل. القيم في تزايد الإسهاب هي: WARNING و INFO و DEBUG. settings.environment_variables
[اختياري] قاموس أزواج اسم-قيمة متغير البيئة لتعيينها لكل مهمة تسجيل دفعة. إنشاء التوزيع:
قم بتشغيل التعليمات البرمجية التالية لإنشاء نشر دفعة ضمن نقطة نهاية الدفعة، وتعيينها كنشر افتراضي.
az ml batch-deployment create --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
تلميح
تعين المعلمة
--set-default
التوزيع الذي تم إنشاؤه حديثا كتوزيع افتراضي لنقطة النهاية. إنها طريقة ملائمة لإنشاء توزيع افتراضي جديد لنقطة النهاية، وإنشاء التوزيع الأول بشكل خاص. كأفضل ممارسة لسيناريوهات الإنتاج، قد تحتاج إلى إنشاء نشر جديد دون تعيينه كافتراضي. تحقق من أن النشر يعمل كما تتوقع، ثم قم بتحديث النشر الافتراضي لاحقا. لمزيد من المعلومات حول تنفيذ هذه العملية، راجع قسم نشر نموذج جديد.تحقق من نقطة نهاية الدفعة وتفاصيل النشر.
تشغيل نقاط النهاية الدفعية ونتائج الوصول
استدعاء نقطة نهاية دُفعة لتشغيل مهمة تسجيل دُفعة يتم إرجاع المهمة 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 عند اكتمال المهمة:
قم بتشغيل التعليمات البرمجية التالية لفتح مهمة تسجيل الدفعات في Azure التعلم الآلي studio. يتم تضمين ارتباط استوديو المهمة أيضا في استجابة
invoke
، كقيمة لinteractionEndpoints.Studio.endpoint
.az ml job show -n $JOB_NAME --web
في الرسم البياني للوظيفة، حدد الخطوة
batchscoring
.حدد علامة التبويب «Outputs + logs»، ثم حدد عرض مخرجات البيانات.
من مخرجات البيانات، حدد الأيقونة لفتح 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.
إضافة نشر ثان
إنشاء بيئة حيث سيتم تشغيل نشر الدفعة. قم بتضمين أي تبعية تتطلبها التعليمات البرمجية الخاصة بك للتشغيل في البيئة. تحتاج أيضا إلى إضافة المكتبة
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]
إنشاء برنامج نصي لتسجيل النقاط للنموذج:
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)
إنشاء تعريف نشر
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
إنشاء التوزيع:
قم بتشغيل التعليمات البرمجية التالية لإنشاء نشر دفعة ضمن نقطة نهاية الدفعة وتعيينها كنشر افتراضي.
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