توزيع نماذج MLflow في عمليات توزيع الدفعات

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

في هذه المقالة، تعرف على كيفية نشر نماذج MLflow إلى Azure التعلم الآلي لكلا الاستدلال الدفعي باستخدام نقاط النهاية الدفعية. عند نشر نماذج MLflow إلى نقاط نهاية الدفعة، التعلم الآلي Azure:

  • يوفر صورة أساسية MLflow/ بيئة منسقة تحتوي على التبعيات المطلوبة لتشغيل وظيفة Azure التعلم الآلي Batch.
  • إنشاء مسار مهمة دفعية مع برنامج نصي لتسجيل النقاط لك يمكن استخدامه لمعالجة البيانات باستخدام التوازي.

إشعار

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

حول هذا المثال

يوضح هذا المثال كيف يمكنك نشر نموذج MLflow إلى نقطة نهاية دفعية لتنفيذ تنبؤات الدفعة. يستخدم هذا المثال نموذج MLflow استنادا إلى مجموعة بيانات أمراض القلب UCI. تحتوي قاعدة البيانات على 76 سمة، لكننا نستخدم مجموعة فرعية من 14 منها. يحاول النموذج التنبؤ بوجود مرض القلب في المريض. وهو عدد صحيح يقدر من 0 (بدون حضور) إلى 1 (حالة حضور).

تم تدريب النموذج باستخدام XGBBoost مصنف وتم حزم جميع المعالجة المسبقة المطلوبة كبنية scikit-learn أساسية لبرنامج ربط العمليات التجارية، ما يجعل هذا النموذج مسارا من طرف إلى طرف ينتقل من البيانات الأولية إلى التنبؤات.

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

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli

ملفات هذا المثال موجودة في:

cd endpoints/batch/deploy-models/heart-classifier-mlflow

المتابعة في Jupyter Notebooks

يمكنك متابعة هذا النموذج في دفاتر الملاحظات التالية. في المستودع المستنسخ، افتح دفتر الملاحظات: mlflow-for-batch-tabular.ipynb.

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

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

  • اشتراك Azure. في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء. جرّب الإصدار المجاني أو المدفوع من «التعلم الآلي» من Azure.

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

  • تأكد من أن لديك الأذونات التالية في مساحة العمل:

    • إنشاء نقاط النهاية والنشرات الدفعية أو إدارتها: استخدم دور المالك أو المساهم أو الدور المخصص الذي يسمح .Microsoft.MachineLearningServices/workspaces/batchEndpoints/*

    • إنشاء عمليات نشر ARM في مجموعة موارد مساحة العمل: استخدم دور المالك أو المساهم أو الدور المخصص الذي يسمح Microsoft.Resources/deployments/write به في مجموعة الموارد حيث يتم نشر مساحة العمل.

  • تحتاج إلى تثبيت البرنامج التالي للعمل مع Azure التعلم الآلي:

    Azure CLI وملحق mlAzure التعلم الآلي.

    az extension add -n ml
    

    إشعار

    تم تقديم عمليات نشر مكونات البنية الأساسية لبرنامج ربط العمليات التجارية لنقاط النهاية الدفعية في الإصدار 2.7 من ml الملحق ل Azure CLI. استخدم az extension update --name ml للحصول على الإصدار الأخير منه.

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

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

قم بتمرير قيم معرف الاشتراك ومساحة العمل والموقع ومجموعة الموارد في التعليمات البرمجية التالية:

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

‏‏الخطوات

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

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

    MODEL_NAME='heart-classifier-mlflow'
    az ml model create --name $MODEL_NAME --type "mlflow_model" --path "model"
    
  2. قبل المضي قدما، نحتاج إلى التأكد من أن عمليات توزيع الدفعات التي نحن على وشك إنشائها يمكن تشغيلها على بعض البنية الأساسية (الحساب). يمكن تشغيل عمليات توزيع الدفعات على أي حساب Azure التعلم الآلي موجود بالفعل في مساحة العمل. وهذا يعني أن عمليات نشر دفعات متعددة يمكن أن تشترك في نفس البنية الأساسية للحساب. في هذا المثال، سنعمل على مجموعة حساب Azure التعلم الآلي تسمى cpu-cluster. لنتحقق من وجود الحساب على مساحة العمل أو إنشائها بخلاف ذلك.

    إنشاء نظام مجموعة حساب كما يلي:

    az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5
    
  3. الآن حان الوقت لإنشاء نقطة نهاية الدفعة والنشر. لنبدأ بنقطة النهاية أولا. تتطلب نقاط النهاية اسما ووصفا فقط ليتم إنشاؤها. سينتهي اسم نقطة النهاية في URI المقترن بنقطة النهاية الخاصة بك. ولهذا السبب، يجب أن تكون أسماء نقاط النهاية الدفعية فريدة داخل منطقة Azure. على سبيل المثال، يمكن أن تكون هناك نقطة نهاية دفعة واحدة فقط بالاسم mybatchendpoint في westus2.

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

    ENDPOINT_NAME="heart-classifier"
    
  4. أنشئ نقطة النهاية:

    لإنشاء نقطة نهاية جديدة، قم بإنشاء YAML تكوين كما يلي:

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: heart-classifier-batch
    description: A heart condition classifier for batch inference
    auth_mode: aad_token
    

    ثم قم بإنشاء نقطة النهاية باستخدام الأمر التالي:

    az ml batch-endpoint create -n $ENDPOINT_NAME -f endpoint.yml
    
  5. الآن، اسمح بإنشاء النشر. لا تتطلب منك نماذج MLflow الإشارة إلى بيئة أو برنامج نصي لتسجيل النقاط عند إنشاء عمليات التوزيع أثناء إنشائها لك. ومع ذلك، يمكنك تحديدها إذا كنت تريد تخصيص كيفية استنتاج التوزيع.

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

    deployment-simple/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    endpoint_name: heart-classifier-batch
    name: classifier-xgboost-mlflow
    description: A heart condition classifier based on XGBoost
    type: model
    model: azureml:heart-classifier-mlflow@latest
    compute: azureml:batch-cluster
    resources:
      instance_count: 2
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 2
      output_action: append_row
      output_file_name: predictions.csv
      retry_settings:
        max_retries: 3
        timeout: 300
      error_threshold: -1
      logging_level: info
    

    ثم قم بإنشاء النشر باستخدام الأمر التالي:

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

    هام

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

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

    DEPLOYMENT_NAME="classifier-xgboost-mlflow"
    az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME
    
  7. عند هذه النقطة، تكون نقطة النهاية الدفعية جاهزة للاستخدام.

اختبار التوزيع

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

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

    أ. إنشاء تعريف أصل بيانات في YAML:

    heart-dataset-unlabeled.yml

    $schema: https://azuremlschemas.azureedge.net/latest/data.schema.json
    name: heart-dataset-unlabeled
    description: An unlabeled dataset for heart classification.
    type: uri_folder
    path: data
    

    ب. إنشاء أصل البيانات:

    az ml data create -f heart-dataset-unlabeled.yml
    
  2. الآن بعد تحميل البيانات وجاهزة للاستخدام، دعنا نستدعي نقطة النهاية:

    JOB_NAME = $(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input azureml:heart-dataset-unlabeled@latest --query name -o tsv)
    

    إشعار

    قد لا يتم تثبيت الأداة المساعدة jq على كل تثبيت. يمكنك الحصول على إرشادات التثبيت في هذا الارتباط.

    تلميح

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

  3. يتم بدء مهمة دفعية بمجرد إرجاع الأمر. يمكنك مراقبة حالة المهمة حتى تنتهي:

    az ml job show -n $JOB_NAME --web
    

تحليل المخرجات

يتم إنشاء تنبؤات الإخراج في predictions.csv الملف كما هو موضح في تكوين النشر. تنشئ الوظيفة إخراجا مسمى يسمى score حيث يتم وضع هذا الملف. يتم إنشاء ملف واحد فقط لكل مهمة دفعية.

يتم تنظيم الملف كما يلي:

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

  • الأعمدة التالية في الملف (بالترتيب):

    • row (اختياري)، فهرس الصف المقابل في ملف بيانات الإدخال. ينطبق هذا فقط إذا كانت بيانات الإدخال جدولية. يتم إرجاع التنبؤات بنفس الترتيب الذي تظهر به في ملف الإدخال حتى تتمكن من الاعتماد على رقم الصف لمطابقة التنبؤ المقابل.
    • prediction، التنبؤ المقترن ببيانات الإدخال. يتم إرجاع هذه القيمة "كما هي" التي تم توفيرها بواسطة دالة النموذج predict(). .
    • file_name، اسم الملف الذي تمت قراءة البيانات منه. في البيانات الجدولية، استخدم هذا الحقل لمعرفة التنبؤ الذي ينتمي إلى بيانات الإدخال.

يمكنك تنزيل نتائج الوظيفة باستخدام اسم الوظيفة:

لتنزيل التنبؤات، استخدم الأمر التالي:

az ml job download --name $JOB_NAME --output-name score --download-path ./

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

import pandas as pd

score = pd.read_csv(
    "named-outputs/score/predictions.csv", names=["row", "prediction", "file"]
)

يبدو الإخراج كما يلي:

الصف التنبؤ ملف
1 1 heart-unlabeled-0.csv
1 1 heart-unlabeled-0.csv
2 0 heart-unlabeled-0.csv
... ... ...
307 0 heart-unlabeled-3.csv

تلميح

لاحظ أن بيانات الإدخال في هذا المثال كانت بيانات جدولية بتنسيق CSV وكان هناك 4 ملفات إدخال مختلفة (heart-unlabeled-0.csv heart-unlabeled-1.csv heart-unlabeled-2.csv heart-unlabeled-3.csv).

اعتبارات عند التوزيع للاستدلال الدفعي

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

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

توزع نقاط النهاية الدفعية العمل على مستوى الملف، لكل من البيانات المنظمة وغير المنظمة. ونتيجة لذلك، يتم دعم ملف URI ومجلدات URI فقط لهذه الميزة. يعالج كل عامل دفعات من Mini batch size الملفات في المرة الواحدة. بالنسبة للبيانات الجدولية، لا تأخذ نقاط النهاية الدفعية في الاعتبار عدد الصفوف داخل كل ملف عند توزيع العمل.

تحذير

لا يتم استكشاف هياكل المجلدات المتداخلة أثناء الاستدلال. إذا كنت تقوم بتقسيم بياناتك باستخدام المجلدات، فتأكد من تبسيط البنية مسبقا.

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

يدعم أنواع الملفات

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

امتداد الملف تم إرجاع النوع كمدخلات للنموذج متطلبات التوقيع
.csv، ، .parquet.pqt pd.DataFrame ColSpec. إذا لم يتم توفيرها، فلن يتم فرض كتابة الأعمدة.
.png، .jpg، .jpeg، .tiff، ، .bmp.gif np.ndarray TensorSpec. تتم إعادة تشكيل المدخلات لتتناسب مع شكل الموترات إذا كان ذلك متاحاً. في حالة عدم توفر أي توقيع، يتم استنتاج الموترات من النوع np.uint8. للحصول على إرشادات إضافية، اقرأ اعتبارات نماذج MLflow التي تعالج الصور.

تحذير

لاحظ أن أي ملف غير مدعوم قد يكون موجودا في بيانات الإدخال سيجعل المهمة تفشل. سترى إدخال خطأ كما يلي: "ERROR:azureml:Error processing input file: '/mnt/batch/tasks/.../a-given-file.avro'. نوع الملف 'avro' غير معتمد.".

فرض التوقيع لنماذج MLflow

يتم فرض أنواع بيانات الإدخال بواسطة مهام توزيع الدفعات أثناء قراءة البيانات باستخدام توقيع نموذج MLflow المتوفر. وهذا يعني أن إدخال البيانات يجب أن يتوافق مع الأنواع المشار إليها في توقيع النموذج. إذا تعذر تحليل البيانات كما هو متوقع، فستفشل المهمة مع ظهور رسالة خطأ مشابهة للرسالة التالية: "ERROR:azureml:Error processing input file: '/mnt/batch/tasks/.../a-given-file.csv'. الاستثناء: قيمة حرفية غير صحيحة ل int() مع الأساس 10: 'value'".

تلميح

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

يمكنك فحص توقيع نموذج النموذج الخاص بك عن طريق فتح MLmodel الملف المقترن بنموذج MLflow الخاص بك. لمزيد من التفاصيل حول كيفية عمل التواقيع في MLflow، راجع التواقيع في MLflow.

دعم النكهة

تدعم عمليات نشر الدفعات فقط نشر نماذج MLflow باستخدام نكهة pyfunc . إذا كنت بحاجة إلى نشر نكهة مختلفة، فشاهد استخدام نماذج MLflow مع برنامج نصي لتسجيل النقاط.

تخصيص عمليات توزيع نماذج MLflow باستخدام برنامج نصي لتسجيل النقاط

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

عادة ما تحدد سير العمل هذا عندما:

  • تحتاج إلى معالجة نوع ملف غير مدعوم من قبل عمليات نشر MLflow في الدفعات.
  • تحتاج إلى تخصيص طريقة تشغيل النموذج، على سبيل المثال، استخدام نكهة معينة لتحميله مع mlflow.<flavor>.load().
  • تحتاج إلى القيام بمعالجة ما قبل/ نقاط البيع في روتين تسجيل النقاط الخاص بك عندما لا يتم ذلك من قبل النموذج نفسه.
  • لا يمكن تمثيل إخراج النموذج بشكل جيد في البيانات الجدولية. على سبيل المثال، إنه موتر يمثل صورة.
  • لا يمكنك معالجة كل ملف مرة واحدة بسبب قيود الذاكرة ويحتاج إلى قراءته في مجموعات.

هام

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

‏‏الخطوات

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

  1. حدد المجلد حيث يتم وضع نموذج MLflow الخاص بك.

    أ. انتقل إلى مدخل Azure التعلم الآلي.

    ب. انتقل إلى قسم Models.

    جـ. حدد النموذج الذي تحاول نشره وانقر فوق علامة التبويب Artifacts.

    د. دون المجلد الذي يتم عرضه. تمت الإشارة إلى هذا المجلد عند تسجيل النموذج.

    لقطة شاشة تعرض المجلد حيث يتم وضع البيانات الاصطناعية للنموذج.

  2. إنشاء برنامج نصي لتسجيل النقاط. لاحظ كيف تم تضمين اسم model المجلد الذي حددته من قبل في الدالة init() .

    deployment-custom/code/batch_driver.py

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license.
    
    import os
    import glob
    import mlflow
    import pandas as pd
    import logging
    
    
    def init():
        global model
        global model_input_types
        global model_output_names
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        # It is the path to the model folder
        # Please provide your model's folder name if there's one
        model_path = glob.glob(os.environ["AZUREML_MODEL_DIR"] + "/*/")[0]
    
        # Load the model, it's input types and output names
        model = mlflow.pyfunc.load(model_path)
        if model.metadata and model.metadata.signature:
            if model.metadata.signature.inputs:
                model_input_types = dict(
                    zip(
                        model.metadata.signature.inputs.input_names(),
                        model.metadata.signature.inputs.pandas_types(),
                    )
                )
            if model.metadata.signature.outputs:
                if model.metadata.signature.outputs.has_input_names():
                    model_output_names = model.metadata.signature.outputs.input_names()
                elif len(model.metadata.signature.outputs.input_names()) == 1:
                    model_output_names = ["prediction"]
        else:
            logging.warning(
                "Model doesn't contain a signature. Input data types won't be enforced."
            )
    
    
    def run(mini_batch):
        print(f"run method start: {__file__}, run({len(mini_batch)} files)")
    
        data = pd.concat(
            map(
                lambda fp: pd.read_csv(fp).assign(filename=os.path.basename(fp)), mini_batch
            )
        )
    
        if model_input_types:
            data = data.astype(model_input_types)
    
        # Predict over the input data, minus the column filename which is not part of the model.
        pred = model.predict(data.drop("filename", axis=1))
    
        if pred is not pd.DataFrame:
            if not model_output_names:
                model_output_names = ["pred_col" + str(i) for i in range(pred.shape[1])]
            pred = pd.DataFrame(pred, columns=model_output_names)
    
        return pd.concat([data, pred], axis=1)
    
  3. دعونا ننشئ بيئة حيث يمكن تنفيذ البرنامج النصي لتسجيل النقاط. نظرا لأن نموذجنا هو MLflow، يتم تحديد متطلبات conda أيضا في حزمة النموذج (لمزيد من التفاصيل حول نماذج MLflow والملفات المضمنة فيه راجع تنسيق MLmodel). سنقوم بعد ذلك ببناء البيئة باستخدام تبعيات conda من الملف. ومع ذلك، نحتاج أيضا إلى تضمين الحزمة azureml-core المطلوبة لنشر الدفعات.

    تلميح

    إذا كان النموذج الخاص بك مسجلا بالفعل في سجل النموذج، يمكنك تنزيل/نسخ conda.yml الملف المقترن بالنموذج الخاص بك عن طريق الانتقال إلى Azure التعلم الآلي studio> Models > حدد النموذج الخاص بك من القائمة > Artifacts. افتح المجلد الجذر في التنقل وحدد conda.yml الملف المدرج. انقر فوق تنزيل محتواه أو نسخه.

    هام

    يستخدم هذا المثال بيئة conda المحددة في /heart-classifier-mlflow/environment/conda.yaml. تم إنشاء هذا الملف عن طريق الجمع بين ملف تبعيات MLflow conda الأصلي وإضافة الحزمة azureml-core. لا يمكنك استخدام conda.yml الملف من النموذج مباشرة.

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

    environment:
      name: batch-mlflow-xgboost
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    
  4. تكوين التوزيع:

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

    توزيع مخصص/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    endpoint_name: heart-classifier-batch
    name: classifier-xgboost-custom
    description: A heart condition classifier based on XGBoost
    type: model
    model: azureml:heart-classifier-mlflow@latest
    environment:
      name: batch-mlflow-xgboost
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    compute: azureml:batch-cluster
    resources:
      instance_count: 2
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 2
      output_action: append_row
      output_file_name: predictions.csv
      retry_settings:
        max_retries: 3
        timeout: 300
      error_threshold: -1
      logging_level: info
    
  5. دعونا ننشئ النشر الآن:

    az ml batch-deployment create --file deployment-custom/deployment.yml --endpoint-name $ENDPOINT_NAME
    
  6. عند هذه النقطة، تكون نقطة النهاية الدفعية جاهزة للاستخدام.

تنظيف الموارد

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

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

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