Mengonversi model ML kustom ke model berformat MLflow

Dalam artikel ini, pelajari cara mengonversi model ML kustom Anda menjadi format MLflow. MLflow adalah pustaka sumber terbuka untuk mengelola siklus hidup eksperimen pembelajaran mesin. Dalam beberapa kasus, Anda mungkin menggunakan kerangka kerja pembelajaran mesin tanpa dukungan ragam model MLflow bawaannya. Karena kurangnya ragam model MLflow bawaan ini, Anda tidak dapat mencatat atau mendaftarkan model dengan API fasih model MLflow. Untuk mengatasinya, Anda dapat mengonversi model ke format MLflow tempat Anda dapat memanfaatkan manfaat model Azure Machine Learning dan MLflow berikut.

Dengan Azure Machine Learning, model MLflow mendapatkan manfaat tambahan dari,

  • Tidak ada penyebaran kode
  • Portabilitas sebagai format standar sumber terbuka
  • Kemampuan untuk menyebarkan baik secara lokal maupun di cloud

MLflow menyediakan dukungan untuk berbagai kerangka kerja pembelajaran mesin (scikit-learn, Keras, Pytorch, dan banyak lagi); namun, mungkin tidak mencakup setiap kasus penggunaan. Misalnya, Anda mungkin ingin membuat model MLflow dengan kerangka kerja yang tidak didukung MLflow secara asli atau Anda mungkin ingin mengubah cara model Anda melakukan pra-pemrosesan atau pasca-pemrosesan saat menjalankan pekerjaan. Untuk mengetahui lebih lanjut tentang model MLflow baca Dari artefak ke model di MLflow.

Jika Anda tidak melatih model Anda dengan MLFlow dan ingin menggunakan penawaran penyebaran tanpa kode MLflow Azure Machine Learning, Anda perlu mengonversi model kustom Anda ke MLFLow. Pelajari selengkapnya tentang model Python kustom dan MLflow.

Prasyarat

Hanya paket mlflow yang diinstal yang diperlukan untuk mengonversi model kustom Anda ke format MLflow.

Membuat pembungkus Python untuk model Anda

Sebelum dapat mengonversi model ke format yang didukung MLflow, Anda harus terlebih dahulu membuat pembungkus Python untuk model Anda. Kode berikut menunjukkan cara membuat pembungkus Python untuk sklearn model.


# 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)

Membuat lingkungan Conda

Selanjutnya, Anda perlu membuat lingkungan Conda untuk Model MLflow baru yang berisi semua dependensi yang diperlukan. Jika tidak ditunjukkan, lingkungan disimpulkan dari penginstalan saat ini. Jika tidak, ia dapat ditentukan.


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'
}

Memuat model berformat MLFlow dan prediksi pengujian

Setelah lingkungan Anda siap, Anda dapat meneruskan SKlearnWrapper, lingkungan Conda, dan kamus artefak yang baru dibuat ke metode mlflow.pyfunc.save_model(). Melakukannya akan menyimpan model ke disk Anda.

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)

Untuk memastikan model berformat MLflow yang baru disimpan tidak berubah selama penyimpanan, Anda dapat memuat model dan mencetak prediksi pengujian untuk membandingkan model asli Anda.

Kode berikut mencetak prediksi pengujian dari model berformat mlflow dan prediksi pengujian dari model sklearn yang disimpan ke disk Anda untuk perbandingan.

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)

Mendaftarkan model berformat MLflow

Setelah mengonfirmasi bahwa model disimpan dengan benar, Anda dapat membuat uji coba, sehingga Anda dapat mendaftar dan menyimpan model berformat MLflow ke registri model Anda.


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()

Penting

Dalam beberapa kasus, Anda mungkin menggunakan kerangka kerja pembelajaran mesin tanpa dukungan ragam model MLflow bawaannya. Misalnya, vaderSentiment pustaka adalah pustaka pemrosesan bahasa alami standar (NLP) yang digunakan untuk analisis sentimen. Karena tidak memiliki ragam model MLflow bawaan, Anda tidak dapat mencatat atau mendaftarkan model dengan API fasih model MLflow. Lihat contoh pada cara menyimpan, mencatat, dan mendaftarkan model yang tidak memiliki ragam model MLflow bawaan yang didukung.

Langkah berikutnya