تحويل نماذج التعلم الآلي المخصصة إلى نماذج بتنسيق MLflow

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

باستخدام التعلم الآلي من Microsoft Azure، تحصل نماذج MLflow على الفوائد المضافة من،

  • لا يوجد نشر للتعليمات البرمجية
  • قابلية النقل بتنسيق قياسي مفتوح المصدر
  • القدرة على التوزيع محلياً وعلى السحابة

يوفر MLflow الدعم لمجموعة متنوعة من إطارات عمل التعلم الآلي (scikit-learn وKeras وPytorch والمزيد)؛ ومع ذلك، قد لا يغطي كل حالة استخدام. على سبيل المثال، قد ترغب في إنشاء نموذج MLflow مع إطار عمل لا يدعمه MLflow في الأصل أو قد ترغب في تغيير الطريقة التي يجري بها نموذجك المعالجة المسبقة أو المعالجة اللاحقة عند تشغيل المهام. لمعرفة المزيد حول نماذج MLflow، اقرأ من البيانات الاصطناعية إلى النماذج في MLflow.

في حال عدم تدريب نموذجك باستخدام MLFlow وتريد استخدام عرض توزيع دون تعليمات برمجية لـ MLflow من التعلم الآلي من Microsoft Azure، فستحتاج إلى تحويل النموذج المخصص إلى MLFLow. تعرف على المزيد حول نماذج Python المخصصة وMLflow.

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

لا يلزم سوى حزمة mlflow المثبتة لتحويل نماذجك المخصصة إلى تنسيق MLflow.

إنشاء برنامج تضمين Python لنموذجك

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


# Load training and test datasets
from sys import version_info
import sklearn
import mlflow.pyfunc


PYTHON_VERSION = "{major}.{minor}.{micro}".format(major=version_info.major,
                                                  minor=version_info.minor,
                                                  micro=version_info.micro)

# Train and save an SKLearn model
sklearn_model_path = "model.pkl"

artifacts = {
    "sklearn_model": sklearn_model_path
}

# create wrapper
class SKLearnWrapper(mlflow.pyfunc.PythonModel):

    def load_context(self, context):
        import pickle
        self.sklearn_model = pickle.load(open(context.artifacts["sklearn_model"], 'rb'))
    
    def predict(self, model, data):
        return self.sklearn_model.predict(data)

إنشاء بيئة Conda

بعد ذلك، تحتاج إلى إنشاء بيئة Conda لنموذج MLflow الجديد الذي يحتوي على جميع التبعيات الضرورية. إذا لم تتم الإشارة إليها، يتم استنتاج البيئة من التثبيت الحالي. في حال عدم حدوث ذلك، يمكن تحديده.


import cloudpickle
conda_env = {
    'channels': ['defaults'],
    'dependencies': [
      'python={}'.format(PYTHON_VERSION),
      'pip',
      {
        'pip': [
          'mlflow',
          'scikit-learn=={}'.format(sklearn.__version__),
          'cloudpickle=={}'.format(cloudpickle.__version__),
        ],
      },
    ],
    'name': 'sklearn_env'
}

تحميل نموذج MLFlow المنسق وتوقعات الاختبار

بعد أن تصبح بيئتك جاهزة، يمكنك تمرير بيئة Conda وSKlearnWrapper وقاموس البيانات الاصطناعية التي تم إنشاؤها حديثاً إلى أسلوب mlflow.pyfunc.save_model(). يؤدي ذلك إلى حفظ النموذج على قرصك.

mlflow_pyfunc_model_path = "sklearn_mlflow_pyfunc_custom"
mlflow.pyfunc.save_model(path=mlflow_pyfunc_model_path, python_model=SKLearnWrapper(), conda_env=conda_env, artifacts=artifacts)

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

تطبع التعليمات البرمجية التالية توقع اختبار من نموذج mlflow المنسق وتوقع اختبار من نموذج sklearn المحفوظ على القرص للمقارنة.

loaded_model = mlflow.pyfunc.load_model(mlflow_pyfunc_model_path)

input_data = "<insert test data>"
# Evaluate the model
import pandas as pd
test_predictions = loaded_model.predict(input_data)
print(test_predictions)

# load the model from disk
import pickle
loaded_model = pickle.load(open(sklearn_model_path, 'rb'))
result = loaded_model.predict(input_data)
print(result)

تسجيل نموذج MLflow المنسق

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


mlflow.start_run()

mlflow.pyfunc.log_model(artifact_path=mlflow_pyfunc_model_path, 
                        loader_module=None, 
                        data_path=None, 
                        code_path=None,
                        python_model=SKLearnWrapper(),
                        registered_model_name="Custom_mlflow_model", 
                        conda_env=conda_env,
                        artifacts=artifacts)
mlflow.end_run()

هام

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

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