إرشادات نشر نماذج MLflow

ينطبق على:ملحق CLI للتعلم الآلي من Microsoft Azure v2 (الحالي)

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

توزيع نماذج MLflow مقابل النماذج المخصصة

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

لنشر بدون تعليمات برمجية، التعلم الآلي Azure:

  • يضمن استيفاء جميع تبعيات الحزمة المشار إليها في نموذج MLflow.
  • يوفر صورة أساسية MLflow أو بيئة منسقة تحتوي على العناصر التالية:
    • الحزم المطلوبة التعلم الآلي Azure لإجراء الاستدلال، بما في ذلك mlflow-skinny.
    • برنامج نصي لتسجيل النقاط لإجراء الاستدلال.

تلميح

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

حزم وتبعيات Python

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

يعرض ملف conda.yaml التالي مثالا على تبعيات conda المحددة في نموذج MLflow.

conda.yaml

channels:
- conda-forge
dependencies:
- python=3.10.11
- pip<=23.1.2
- pip:
  - mlflow==2.7.1
  - cloudpickle==1.6.0
  - dataclasses==0.6
  - lz4==4.0.0
  - numpy==1.23.5
  - packaging==23.0
  - psutil==5.9.0
  - pyyaml==6.0
  - scikit-learn==1.1.2
  - scipy==1.10.1
  - uuid==1.30
name: mlflow-env

تحذير

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

الآثار المترتبة على استخدام النماذج مع التواقيع

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

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

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

MLmodel

artifact_path: model
flavors:
  python_function:
    env:
      conda: conda.yaml
      virtualenv: python_env.yaml
    loader_module: mlflow.sklearn
    model_path: model.pkl
    predict_fn: predict
    python_version: 3.10.11
  sklearn:
    code: null
    pickled_model: model.pkl
    serialization_format: cloudpickle
    sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
  inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
    {"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
    "s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
    "double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
    {"name": "s6", "type": "double"}]'
  outputs: '[{"type": "double"}]'

تلميح

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

النماذج المنشورة في Azure التعلم الآلي مقابل النماذج المنشورة في خادم MLflow المضمن

يتضمن MLflow أدوات النشر المضمنة التي يمكن لمطوري النماذج استخدامها لاختبار النماذج محليا. على سبيل المثال، يمكنك تشغيل مثيل محلي لنموذج مسجل في سجل خادم MLflow، باستخدام mlflow models serve -m my_model أو استخدام MLflow CLI mlflow models predict.

الاستدلال باستخدام نقاط النهاية الدفعية مقابل نقاط النهاية عبر الإنترنت

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

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

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

تركز الأقسام التي تتبع المزيد على نماذج MLflow الموزعة على Azure التعلم الآلي نقاط النهاية عبر الإنترنت.

تنسيقات الإدخال

نوع الإدخال خادم MLflow المضمن نقاط نهاية Azure التعلم الآلي Online
إطارات بيانات panda ذات التسلسل JSON في الاتجاه المقسم
إطارات بيانات panda ذات التسلسل JSON في اتجاه السجلات مهملة
إطارات بيانات panda ذات التسلسل CSV استخدام الدفعة1
تنسيق إدخال Tensor كقوائم متسلسلة JSON (موترات) وقاموس القوائم (موترات مسماة)
تم تنسيق إدخال Tensor كما هو الحال في واجهة برمجة تطبيقات TF Serving

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

بنية الإدخال

بغض النظر عن نوع الإدخال المستخدم، يتطلب منك Azure التعلم الآلي توفير مدخلات في حمولة JSON، داخل مفتاح input_dataالقاموس . نظرا لأن هذا المفتاح غير مطلوب عند استخدام الأمر mlflow models serve لخدمة النماذج، لا يمكن استخدام الحمولات بالتبادل ل Azure التعلم الآلي نقاط النهاية عبر الإنترنت والخادم المضمن MLflow.

هام

نصيحة MLflow 2.0: لاحظ أن بنية الحمولة تغيرت في MLflow 2.0.

يعرض هذا القسم أمثلة حمولة مختلفة والاختلافات لنموذج يتم نشره في خادم MLflow المضمن مقابل خادم الاستدلال التعلم الآلي Azure.

مثال على البيانات الأساسية ل Pandas DataFrame متسلسل JSON في اتجاه الانقسام

{
    "input_data": {
        "columns": [
            "age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
        ],
        "index": [1],
        "data": [
            [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
        ]
    }
}

مثال الحمولة لإدخال موتر

{
    "input_data": [
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
    ]
}

مثال الحمولة لمدخل موتر مسمى

{
    "input_data": {
        "tokens": [
          [0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
        ],
        "mask": [
          [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
        ]
    }
}

لمزيد من المعلومات حول أدوات النشر المضمنة في MLflow، راجع أدوات النشر المضمنة في وثائق MLflow.

تخصيص الاستدلال عند نشر نماذج MLflow

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

في أي وقت، إذا كنت بحاجة إلى تغيير كيفية تنفيذ استنتاج نموذج MLflow، يمكنك القيام بأحد أمرين:

  • تغيير كيفية تسجيل النموذج الخاص بك في روتين التدريب.
  • تخصيص الاستدلال باستخدام برنامج نصي لتسجيل النقاط في وقت النشر.

تغيير كيفية تسجيل النموذج أثناء التدريب

عند تسجيل نموذج، باستخدام إما mlflow.autolog أو mlflow.<flavor>.log_model، تقرر النكهة المستخدمة للنموذج كيفية تنفيذ الاستدلال والنتائج التي يرجعها النموذج. لا يفرض MLflow أي سلوك محدد لكيفية إنشاء الدالة predict() للنتائج.

ومع ذلك، في بعض الحالات، قد ترغب في إجراء بعض المعالجة المسبقة أو المعالجة اللاحقة قبل تنفيذ النموذج وبعده. في أوقات أخرى، قد تحتاج إلى تغيير ما يتم إرجاعه (على سبيل المثال، الاحتمالات مقابل الفئات). أحد الحلول هو تنفيذ مسارات التعلم الآلي التي تنتقل من المدخلات إلى المخرجات مباشرة. على سبيل المثال، sklearn.pipeline.Pipeline أو pyspark.ml.Pipeline هي طرق شائعة لتنفيذ المسارات، ويوصى بها أحيانا لاعتبارات الأداء. بديل آخر هو تخصيص كيفية استنتاج النموذج الخاص بك، باستخدام نكهة نموذج مخصص.

تخصيص الاستدلال باستخدام برنامج نصي لتسجيل النقاط

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

هام

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

أدوات التوزيع

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

  • MLflow SDK
  • واجهة سطر أوامر التعلم الآلي من Azure
  • عملية التعلم الآلي من Microsoft Azure SDK لـ Python
  • Azure Machine Learning Studio

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

السيناريو MLflow SDK Azure التعلم الآلي CLI/SDK Azure Machine Learning Studio
التوزيع إلى نقاط النهاية المدارة عبر الإنترنت راجع المثال1 راجع المثال1 راجع المثال1
التوزيع إلى نقاط النهاية المدارة عبر الإنترنت (باستخدام برنامج نصي لتسجيل النقاط) غير معتمد3 انظر المثال انظر المثال
النشر إلى نقاط النهاية الدفعية غير معتمد3 انظر المثال انظر المثال
النشر إلى نقاط النهاية الدفعية (باستخدام برنامج نصي لتسجيل النقاط) غير معتمد3 انظر المثال انظر المثال
النشر إلى خدمات الويب (ACI/AKS) الدعمالقديم 2 غير معتمد2 غير معتمد2
النشر إلى خدمات الويب (ACI/AKS - مع برنامج نصي لتسجيل النقاط) غير معتمد3 الدعمالقديم 2 الدعمالقديم 2

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

2 نوصي بالتبديل إلى نقاط النهاية المدارة عبر الإنترنت بدلا من ذلك.

3 لا يحتوي MLflow (OSS) على مفهوم برنامج نصي لتسجيل النقاط ولا يدعم تنفيذ الدفعة حاليا.

ما هي أداة النشر التي يجب استخدامها؟

  • استخدم MLflow SDK إذا كان كلا الشرطين ينطبقان:

    • أنت على دراية ب MLflow، أو أنك تستخدم نظاما أساسيا يدعم MLflow في الأصل (مثل Azure Databricks).
    • ترغب في الاستمرار في استخدام نفس مجموعة الأساليب من MLflow.
  • استخدم Azure التعلم الآلي CLI v2 إذا تم تطبيق أي من هذه الشروط:

    • أنت أكثر دراية ب Azure التعلم الآلي CLI v2.
    • تريد أتمتة عمليات التوزيع، باستخدام البنية الأساسية لبرنامج ربط العمليات التجارية التلقائية.
    • تريد الاحتفاظ بضبط إعدادات النشر في مستودع git.
  • استخدم توزيع واجهة مستخدم Azure التعلم الآلي studio إذا كنت تريد نشر النماذج المدربة على MLflow واختبارها بسرعة.