Registro de modelos con MLflow

Completado

Para entrenar un modelo de Machine Learning, puede elegir usar un marco de código abierto que mejor se adapte a sus necesidades. Después del entrenamiento, hay que implementar el modelo. MLflow es una plataforma de código abierto que simplifica la implementación del aprendizaje automático, independientemente del tipo de modelo que ha entrenado y del marco que usó.

MLflow se integra con Azure Machine Learning. La integración con Azure Machine Learning permite implementar fácilmente modelos que entrena y realiza un seguimiento con Mlflow. Por ejemplo, cuando tiene un modelo de MLflow, puede optar por la implementación sin código en Azure Machine Learning.

Nota

Actualmente, algunos tipos de modelos no son compatibles con Azure Machine Learning y MLflow. En ese caso, puede registrar un modelo de tipo custom. Obtenga más información sobre cómo trabajar con modelos (personalizados) de Azure Machine Learning.

Por qué utilizar MLflow

Al entrenar un modelo de Machine Learning con Azure Machine Learning, puede usar MLflow para registrar el modelo. MLflow estandariza el empaquetado de modelos, lo que significa que un modelo de MLflow se puede importar o exportar fácilmente entre diferentes flujos de trabajo.

Por ejemplo, imagine el entrenamiento de un modelo en un área de trabajo de Azure Machine Learning que se usa para el desarrollo. Si desea exportar el modelo a otra área de trabajo que se usa para producción, puede usar un modelo de MLflow para hacerlo fácilmente.

Al entrenar y registrar un modelo, se almacenan todos los artefactos pertinentes en un directorio. Al registrar el modelo, se crea un archivo MLmodel en ese directorio. El archivo MLmodel contiene los metadatos del modelo, lo que permite la rastreabilidad del modelo.

Puede registrar modelos con MLflow habilitando el registro automático o mediante el registro personalizado.

Nota

MLflow permite registrar un modelo como artefacto o como modelo. Al registrar un modelo como un artefacto, el modelo se trata como un archivo. Al registrar un modelo como modelo, se agrega información al modelo registrado, lo que le permite usar el modelo directamente en canalizaciones o implementaciones. Más información sobre la diferencia entre un artefacto y un modelo

Uso del registro automático para registrar un modelo

Al entrenar un modelo, puede incluir mlflow.autolog() para habilitar el registro automático. El registro automático de MLflow registra automáticamente parámetros, métricas, artefactos y el modelo que entrena. El modelo se registra cuando se llama al método .fit(). El marco que se usa para entrenar el modelo se identifica e incluye como el tipo del modelo.

De manera opcional, puede especificar el tipo con el que desea que el modelo se identifique mediante mlflow.<flavor>.autolog(). Algunos tipos comunes que puede usar con el registro automático son:

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

Sugerencia

Explore la lista completa de los tipos de modelos integrados de MLflow.

Cuando se usa el registro automático, se crea una carpeta de salida que incluye todos los artefactos de modelo necesarios, incluido el archivo MLmodel, que hace referencia a estos archivos e incluye los metadatos del modelo.

Registrar manualmente un modelo

Si desea tener más control sobre cómo se registra el modelo, puede usar autolog (para los parámetros, las métricas y otros artefactos) y establecer log_models=False. Al establecer el parámetro log_models en false, MLflow no registra automáticamente el modelo y puede agregarlo manualmente.

El registro del modelo permite implementar fácilmente el modelo. Para especificar cómo debe comportarse el modelo en el momento de la inferencia, puede personalizar las entradas y salidas esperadas del modelo. Los esquemas de las entradas y salidas esperadas se definen como la firma en el archivo MLmodel.

Personalización de la firma

La firma del modelo define el esquema de las entradas y salidas del modelo. La firma se almacena en formato JSON en el archivo MLmodel, junto con otros metadatos del modelo.

La firma del modelo se puede deducir de conjuntos de datos o crearse manualmente a mano.

Para registrar un modelo con una firma que se deduce del conjunto de datos de entrenamiento y las predicciones del modelo, puede usar infer_signature(). En el siguiente ejemplo se toma el conjunto de datos de entrenamiento para deducir el esquema de las entradas y las predicciones del modelo para deducir el esquema de la salida:

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)

Como alternativa, puede crear la firma manualmente:

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)