Megosztás a következőn keresztül:


Egyéni ml-modellek átalakítása MLflow formátumú modellekké

Ebből a cikkből megtudhatja, hogyan konvertálhatja az egyéni ML-modellt MLflow formátumba. Az MLflow egy nyílt forráskódú kódtár a gépi tanulási kísérletek életciklusának kezeléséhez. Bizonyos esetekben gépi tanulási keretrendszert használhat a beépített MLflow-modell íztámogatása nélkül. A beépített MLflow-modell ízének hiánya miatt nem naplózhatja vagy regisztrálhatja a modellt az MLflow-modell fluent API-kkal. A probléma megoldásához átalakíthatja a modellt MLflow formátumra, ahol az Azure Machine Learning és az MLflow modellek alábbi előnyeit alkalmazhatja.

Az Azure Machine Learning segítségével az MLflow-modellek a következő előnyöket élvezhetik:

  • Nincs kódtelepítés
  • Hordozhatóság nyílt forráskód szabványos formátumként
  • Helyi és felhőbeli üzembe helyezés lehetősége

Az MLflow számos gépi tanulási keretrendszert támogat, például scikit-learn, Keras és Pytorch. Előfordulhat, hogy az MLflow nem minden használati esetet fed le. Létrehozhat például egy MLflow-modellt olyan keretrendszerrel, amelyet az MLflow natív módon nem támogat. A feladatok futtatásakor érdemes lehet módosítani a modell előfeldolgozási vagy utófeldolgozási módját. Az MLflow-modellekről további információt az Összetevőktől az MLflow-modellekig című témakörben talál.

Ha nem az MLFlow használatával képezte be a modellt, és az Azure Machine Learning MLflow no-code üzembe helyezési ajánlatát szeretné használni, az egyéni modellt MLFLow-ra kell konvertálnia. További információ: Egyéni Python-modellek.

Előfeltételek

  • Telepítse a(z) mlflow csomagot

Python-burkoló létrehozása a modellhez

Ahhoz, hogy a modellt MLflow által támogatott formátummá alakíthassa, létre kell hoznia egy Python-burkolót a modellhez. Az alábbi kód bemutatja, hogyan hozhat létre Python-burkolót egy sklearn modellhez.


# 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-környezet létrehozása

Ezután hozzon létre Conda-környezetet az új MLflow-modellhez, amely tartalmazza az összes szükséges függőséget. Ha nincs megadva, a környezet az aktuális telepítésből következtet. Ha nem, meg lehet adni.


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

Az MLflow formátumú modell betöltése és az előrejelzések tesztelése

Miután a környezet elkészült, adja át a SKlearnWrapperConda-környezetet és az újonnan létrehozott összetevők szótárát a mlflow.pyfunc.save_model() metódusnak. Ezzel menti a modellt a lemezre.

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)

Annak érdekében, hogy az újonnan mentett MLflow formátumú modell ne változzon a mentés során, töltse be a modellt, és nyomtasson ki egy teszt-előrejelzést az eredeti modell összehasonlítása érdekében.

Az alábbi kód egy teszt-előrejelzést nyomtat ki a mlflow formátumú modellből, és egy teszt-előrejelzést a sklearn modellből. A teszt-előrejelzéseket a lemezre menti összehasonlítás céljából.

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)

Az MLflow formátumú modell regisztrálása

Miután meggyőződett arról, hogy a modell helyesen van mentve, létrehozhat egy tesztfuttatást. Regisztrálja és mentse az MLflow formátumú modellt a modellregisztrációs adatbázisba.


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

Fontos

Bizonyos esetekben gépi tanulási keretrendszert használhat a beépített MLflow-modell íztámogatása nélkül. A kódtár például egy szabványos természetes nyelvi feldolgozási (NLP) kódtár, vaderSentiment amelyet hangulatelemzéshez használnak. Mivel nincs beépített MLflow-modell-íze, nem naplózhatja vagy regisztrálhatja a modellt az MLflow-modell fluent API-jaival. Ha egy olyan modellt szeretne menteni, naplózni és regisztrálni, amely nem rendelkezik támogatott beépített MLflow-modellel, tekintse meg a nem támogatott gépi tanulási modell regisztrálását ismertető témakört.