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 SKlearnWrapper
Conda-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.