Modely protokolů s MLflow
Pokud chcete vytrénovat model strojového učení, můžete použít opensourcovou architekturu, která nejlépe vyhovuje vašim potřebám. Po trénování chcete model nasadit. MLflow je opensourcová platforma, která zjednodušuje nasazení strojového učení bez ohledu na typ modelu, který jste natrénovali, a rozhraní, které jste použili.
MLflow je integrovaný se službou Azure Machine Learning. Integrace se službou Azure Machine Learning umožňuje snadno nasazovat modely, které trénujete a sledujete pomocí Mlflow. Pokud máte například model MLflow, můžete zvolit nasazení bez kódu ve službě Azure Machine Learning.
Poznámka:
Azure Machine Learning a MLflow v současné době nepodporují některé typy modelů. V takovém případě můžete model zaregistrovat custom
. Přečtěte si další informace o tom, jak pracovat s (vlastními) modely ve službě Azure Machine Learning.
Proč používat MLflow?
Při trénování modelu strojového učení pomocí Azure Machine Learning můžete model zaregistrovat pomocí MLflow. MLflow standardizuje balení modelů, což znamená, že model MLflow lze snadno importovat nebo exportovat napříč různými pracovními postupy.
Představte si například trénování modelu v pracovním prostoru Azure Machine Learning používaném pro vývoj. Pokud chcete model exportovat do jiného pracovního prostoru používaného pro produkční prostředí, můžete k tomu použít model MLflow.
Při trénování a protokolování modelu uložíte všechny relevantní artefakty do adresáře. Při registraci modelu MLmodel
se v daném adresáři vytvoří soubor. Soubor MLmodel
obsahuje metadata modelu, která umožňují sledovatelnost modelu.
Modely můžete zaregistrovat v MLflow povolením automatického protokolování nebo vlastním protokolováním.
Poznámka:
MLflow umožňuje protokolovat model jako artefakt nebo jako model. Při protokolování modelu jako artefaktu se model považuje za soubor. Když model zapíšete jako model, přidáváte do registrovaného modelu informace, které umožňují model používat přímo v kanálech nebo nasazeních. Další informace o rozdílu mezi artefaktem a modelem
Použití automatického protokolování k protokolování modelu
Při trénování modelu můžete zahrnout mlflow.autolog()
povolení automatickéhologování. Automatické protokolování MLflow automaticky protokoluje parametry, metriky, artefakty a model, který natrénujete. Model se protokoluje při .fit()
zavolání metody. Architektura, kterou používáte k trénování modelu, je identifikována a zahrnuta jako příchuť modelu.
Volitelně můžete určit, jakou příchuť má být model identifikován pomocí mlflow.<flavor>.autolog()
. Mezi běžné varianty, které můžete použít s automatickým protokolováním, patří:
- Keras:
mlflow.keras.autolog()
- Scikit-learn:
mlflow.sklearn.autolog()
- LightGBM:
mlflow.lightgbm.autolog()
- XGBoost:
mlflow.xgboost.autolog()
- TensorFlow:
mlflow.tensorflow.autolog()
- PyTorch:
mlflow.pytorch.autolog()
- ONNX:
mlflow.onnx.autolog()
Tip
Prozkoumejte úplný seznam předdefinovaných variant modelů MLflow.
Při použití automatického protokolování se vytvoří výstupní složka, která obsahuje všechny nezbytné artefakty modelu, včetně MLmodel
souboru, který odkazuje na tyto soubory a obsahuje metadata modelu.
Ruční protokolování modelu
Pokud chcete mít větší kontrolu nad tím, jak se model protokoluje, můžete použít autolog
(pro parametry, metriky a další artefakty) a nastavit log_models=False
. Když nastavíte log_models
parametr na false, MLflow automaticky nezapíše model a můžete ho přidat ručně.
Protokolování modelu umožňuje snadno nasadit model. Pokud chcete určit, jak se má model chovat při odvozování, můžete přizpůsobit očekávané vstupy a výstupy modelu. Schémata očekávaných vstupů a výstupů jsou definována jako podpis v MLmodel
souboru.
Přizpůsobení podpisu
Podpis modelu definuje schéma vstupů a výstupů modelu. Podpis je uložen ve formátu JSON v MLmodel
souboru spolu s dalšími metadaty modelu.
Podpis modelu lze odvodit z datových sad nebo ručně vytvořit ručně.
Pokud chcete protokolovat model s podpisem odvozeným z trénovací datové sady a předpovědí modelu, můžete použít infer_signature()
. Například následující příklad vezme trénovací datovou sadu k odvození schématu vstupů a předpovědi modelu k odvození schématu výstupu:
import pandas as pd
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
import mlflow
import mlflow.sklearn
from mlflow.models.signature import infer_signature
iris = datasets.load_iris()
iris_train = pd.DataFrame(iris.data, columns=iris.feature_names)
clf = RandomForestClassifier(max_depth=7, random_state=0)
clf.fit(iris_train, iris.target)
# Infer the signature from the training dataset and model's predictions
signature = infer_signature(iris_train, clf.predict(iris_train))
# Log the scikit-learn model with the custom signature
mlflow.sklearn.log_model(clf, "iris_rf", signature=signature)
Případně můžete podpis vytvořit ručně:
from mlflow.models.signature import ModelSignature
from mlflow.types.schema import Schema, ColSpec
# Define the schema for the input data
input_schema = Schema([
ColSpec("double", "sepal length (cm)"),
ColSpec("double", "sepal width (cm)"),
ColSpec("double", "petal length (cm)"),
ColSpec("double", "petal width (cm)"),
])
# Define the schema for the output data
output_schema = Schema([ColSpec("long")])
# Create the signature object
signature = ModelSignature(inputs=input_schema, outputs=output_schema)
Poznámka:
Přečtěte si další informace o protokolování modelů MLflow v podpisu modelu Azure Machine Learning a MLflow.