من الأدوات إلى النماذج في MLflow

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

ما الفرق بين الأداة والنموذج؟

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

الأدوات

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

ربما كنت تقوم بتسجيل البيانات الاصطناعية بالفعل:

filename = 'model.pkl'
with open(filename, 'wb') as f:
  pickle.dump(model, f)

mlflow.log_artifact(filename)

النموذج

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

في التعلم الآلي من Microsoft Azure، تتمتع نماذج التسجيل بالمزايا التالية:

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

يمكنك تسجيل النماذج باستخدام MLflow SDK:

import mlflow
mlflow.sklearn.log_model(sklearn_estimator, "classifier")

تنسيق MLModel

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

تظهر لقطة الشاشة التالية عينة مجلد نموذج MLflow في Azure التعلم الآلي studio. يتم وضع النموذج في مجلد يسمى credit_defaults_model. لا يوجد أي متطلبات محددة على تسمية هذا المجلد. يحتوي المجلد على MLmodel الملف من بين عناصر النموذج الأخرى.

A screenshot showing assets of a sample MLflow model, including the MLmodel file.

التعليمات البرمجية التالية هي مثال على ما MLmodel قد يبدو عليه ملف نموذج رؤية الكمبيوتر المدرب عليه fastai :

MLmodel

artifact_path: classifier
flavors:
  fastai:
    data: model.fastai
    fastai_version: 2.4.1
  python_function:
    data: model.fastai
    env: conda.yaml
    loader_module: mlflow.fastai
    python_version: 3.8.12
model_uuid: e694c68eba484299976b06ab9058f636
run_id: e13da8ac-b1e6-45d4-a9b2-6a0a5cfac537
signature:
  inputs: '[{"type": "tensor",
             "tensor-spec": 
                 {"dtype": "uint8", "shape": [-1, 300, 300, 3]}
           }]'
  outputs: '[{"type": "tensor", 
              "tensor-spec": 
                 {"dtype": "float32", "shape": [-1,2]}
            }]'

نكهات النموذج

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

التعليمات البرمجية التالية هي مثال على flavors قسم لنموذج fastai .

flavors:
  fastai:
    data: model.fastai
    fastai_version: 2.4.1
  python_function:
    data: model.fastai
    env: conda.yaml
    loader_module: mlflow.fastai
    python_version: 3.8.12

توقيع النموذج

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

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

هناك نوعان من التوقيعات:

  • التوقيع المستند إلى العمود: يعمل هذا التوقيع على بيانات جدولية. بالنسبة للنماذج التي تحمل هذا النوع من التوقيع، يوفر pandas.DataFrame MLflow العناصر كمدخلات.
  • التوقيع المستند إلى Tensor: يعمل هذا التوقيع مع صفائف n الأبعاد أو tensors. بالنسبة للنماذج التي تحمل هذا التوقيع، يوفر numpy.ndarray MLflow كمدخلات (أو قاموس numpy.ndarray في حالة الشدات المسماة).

يتوافق المثال التالي مع نموذج رؤية الكمبيوتر المدرب مع fastai. يتلقى هذا النموذج دفعة من الصور الممثلة كموترات للشكل (300, 300, 3) مع تمثيل RGB لها (أعداد صحيحة غير موقعة). يقوم النموذج بمخرجات دفعات من التنبؤات (الاحتمالات) لطبقتين.

MLmodel

signature:
  inputs: '[{"type": "tensor",
             "tensor-spec": 
                 {"dtype": "uint8", "shape": [-1, 300, 300, 3]}
           }]'
  outputs: '[{"type": "tensor", 
              "tensor-spec": 
                 {"dtype": "float32", "shape": [-1,2]}
            }]'

تلميح

ينشئ Azure التعلم الآلي ملف swagger لنشر نموذج MLflow مع توقيع متوفر. وهذا يسهل اختبار عمليات النشر باستخدام استوديو Azure التعلم الآلي.

بيئة النموذج

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

التعليمات البرمجية التالية هي مثال على بيئة تستخدم لنموذج تم إنشاؤه باستخدام fastai إطار العمل:

conda.yaml

channels:
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
  - mlflow
  - astunparse==1.6.3
  - cffi==1.15.0
  - configparser==3.7.4
  - defusedxml==0.7.1
  - fastai==2.4.1
  - google-api-core==2.7.1
  - ipython==8.2.0
  - psutil==5.9.0
name: mlflow-env

إشعار

ما الفرق بين بيئة MLflow وبيئة Azure التعلم الآلي؟

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

دالة التنبؤ

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

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

مهام سير العمل لتحميل نماذج MLflow

يمكنك تحميل النماذج التي تم إنشاؤها كنماذج MLflow من عدة مواقع، بما في ذلك:

  • مباشرة من التشغيل حيث تم تسجيل النماذج
  • من نظام الملفات حيث يتم حفظ النماذج
  • من سجل النموذج حيث يتم تسجيل النماذج.

يوفر MLflow طريقة متسقة لتحميل هذه النماذج بغض النظر عن الموقع.

هناك سير عملان متاحان لتحميل النماذج:

  • قم بتحميل نفس الكائن والأنواع التي تم تسجيلها مرة أخرى: يمكنك تحميل النماذج باستخدام MLflow SDK والحصول على مثيل للنموذج مع أنواع تنتمي إلى مكتبة التدريب. على سبيل المثال، يقوم نموذج ONNX بإرجاع ModelProto عنصر بينما يقوم نموذج شجرة القرار المدرب باستخدام scikit-learn بإرجاع كائن DecisionTreeClassifier . استخدم mlflow.<flavor>.load_model() لتحميل نفس كائن النموذج والأنواع التي تم تسجيلها.

  • تحميل نموذج لتشغيل الاستدلال: يمكنك تحميل النماذج باستخدام MLflow SDK والحصول على برنامج تضمين حيث يضمن MLflow وجود دالة predict . لا يهم النكهة التي تستخدمها، كل نموذج MLflow له predict وظيفة. علاوة على ذلك، يضمن MLflow أنه يمكن استدعاء هذه الدالة باستخدام وسيطات من النوع pandas.DataFrameأو numpy.ndarrayأو dict[string, numpyndarray] (اعتمادا على توقيع النموذج). يعالج MLflow تحويل النوع إلى نوع الإدخال الذي يتوقعه النموذج. استخدم mlflow.pyfunc.load_model() لتحميل نموذج لتشغيل الاستدلال.