Administración de registros de modelos en Azure Machine Learning con MLflow

Azure Machine Learning admite MLflow para la administración de modelos cuando está conectado a un área de trabajo. Este enfoque representa una forma práctica de admitir todo el ciclo de vida del modelo para los usuarios familiarizados con el cliente de MLFlow. En el siguiente artículo se describen las distintas funcionalidades y se realiza una comparación con otras opciones.

Requisitos previos

  • Instale el paquete mlflow del SDK de MLflow y el complemento de Azure Machine Learning para MLflow azureml-mlflow.

    pip install mlflow azureml-mlflow
    

    Sugerencia

    Puede usar el paquete de mlflow-skinny, que es un paquete MLflow ligero sin dependencias de ciencia de datos, servidor, servidor o almacenamiento de SQL. mlflow-skinny se recomienda para los usuarios que necesitan principalmente las funcionalidades de seguimiento y registro de MLflow sin importar el conjunto completo de características, incluidas las implementaciones.

  • Un área de trabajo de Azure Machine Learning. Puede crear uno siguiendo el tutorial Creación de recursos de Aprendizaje automático .

  • Si va a realizar el seguimiento remoto (es decir, los experimentos de seguimiento que se ejecutan fuera de Azure Machine Learning), configure MLflow para que apunte al URI de seguimiento del área de trabajo de Azure Machine Learning. Para más información sobre cómo conectar MLflow al área de trabajo, consulte Configuración de MLflow para Azure Machine Learning.

  • Tenga en cuenta que no se admiten registros organizativos para la administración de modelos con MLflow.

  • Algunas operaciones se pueden ejecutar directamente mediante la API fluida de MLflow (mlflow.<method>). Sin embargo, otros pueden requerir la creación de un cliente de MLflow, lo que permite comunicarse con Azure Machine Learning en el protocolo MLflow. Puede crear un objeto MlflowClient como se indica a continuación. Este tutorial utiliza el objeto client para referirse a dicho cliente de MLflow.

    import mlflow
    
    client = mlflow.tracking.MlflowClient()
    

Registro de nuevos modelos en el registro

El registro de modelos ofrece una manera cómoda y centralizada de administrar modelos en un área de trabajo. Cada área de trabajo tiene su propio registro de modelos independientes. En la sección siguiente se explican varias maneras de registrar modelos en el registro mediante el SDK de MLflow.

Creación de modelos a partir de una ejecución existente

Si tiene un modelo de MLflow registrado dentro de una ejecución y quiere registrarlo en un registro, use el id. de ejecución y la ruta de acceso donde se registró el modelo. Consulte Administración de experimentos y ejecuciones con MLflow para obtener más información.

mlflow.register_model(f"runs:/{run_id}/{artifact_path}", model_name)

Nota

Los modelos solo se pueden registrar en la misma área de trabajo del registro en la que se realizó el seguimiento de la ejecución. Las operaciones entre áreas de trabajo no se admiten por el momento en Azure Machine Learning.

Sugerencia

Se recomienda registrar modelos a partir de ejecuciones o mediante el método mlflow.<flavor>.log_model desde dentro de la ejecución, ya que mantiene el linaje del trabajo que generó el recurso.

Creación de modelos a partir de recursos

Si tiene una carpeta con un modelo MLflow de MLModel, puede registrarla directamente. El modelo no tiene por qué estar siempre en el contexto de una ejecución. Para ello, puede usar el esquema de URI file://path/to/model para registrar los modelos de MLflow que están almacenados en el sistema de archivos local. Vamos a crear un modelo sencillo con Scikit-Learn y a guardarlo en formato MLflow en el almacenamiento local:

from sklearn import linear_model

reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

mlflow.sklearn.save_model(reg, "./regressor")

Sugerencia

El método save_model() funciona de la misma manera que log_model(). Mientras que log_model() guarda el modelo en una ejecución activa, save_model() usa el sistema de archivos local para guardar el modelo.

Ahora puede registrar el modelo desde la ruta de acceso local:

import os

model_local_path = os.path.abspath("./regressor")
mlflow.register_model(f"file://{model_local_path}", "local-model-test")

Consulta de registros de modelos

Puede usar el SDK de MLflow para consultar y buscar modelos registrados en el registro. En la sección siguiente se explican varias maneras de lograrlo.

Consulta de todos los modelos del registro

Puede consultar todos los modelos registrados en el registro mediante el cliente de MLflow. El ejemplo siguiente muestra la impresión de todos los nombres del modelo:

for model in client.search_registered_models():
    print(f"{model.name}")

Se usa order_by para ordenar por una propiedad específica como name, version, creation_timestampy last_updated_timestamp:

client.search_registered_models(order_by=["name ASC"])

Nota

Aviso de MLflow 2.0: En las versiones anteriores de MLflow (<2.0), use el método MlflowClient.list_registered_models() en su lugar.

Obtención de versiones específicas del modelo

El comando search_registered_models() recupera el objeto del modelo, que contiene todas las versiones del modelo. Sin embargo, si quiere obtener la última versión de modelo registrada de un modelo determinado, puede usar get_registered_model:

client.get_registered_model(model_name)

Si necesita una versión específica del modelo, puede indicar lo siguiente:

client.get_model_version(model_name, version=2)

Carga de modelos desde el Registro

Los modelos se pueden cargar directamente desde el Registro para restaurar los objetos de modelos registrados. Use las funciones mlflow.<flavor>.load_model() o mlflow.pyfunc.load_model() indique el identificador URI del modelo que desea cargar con la sintaxis siguiente:

  • models:/<model-name>/latest, para cargar la última versión del modelo.
  • models:/<model-name>/<version-number>, para cargar una versión concreta del modelo.
  • models:/<model-name>/<stage-name>, para cargar una versión concreta en una fase dada en el modelo. Para más información, consulta Fases del modelo.

Sugerencia

Para obtener información sobre la diferencia entre mlflow.<flavor>.load_model() y mlflow.pyfunc.load_model(), consulte Flujos de trabajo para cargar modelos de MLflow.

Fases del modelo

MLflow admite las fases del modelo para administrar el ciclo de vida de este. La versión del modelo puede pasar de una fase a otra. Las fases se asignan a la versión de un modelo (en lugar de varios modelos), de forma que un modelo determinado puede tener varias versiones en distintas fases.

Importante

Solo se puede acceder a las fases mediante el SDK de MLflow. No se muestran en el portal de Azure Machine Learning Studio y no se pueden recuperar mediante el SDK, la CLI ni la API de REST de Azure Machine Learning. La creación de la implementación a partir de la fase de un modelo determinado no se admite en este momento.

Consulta de fases del modelo

Puede usar el cliente de MLflow para comprobar todas las fases posibles en las que puede encontrarse un modelo:

client.get_model_version_stages(model_name, version="latest")

Para ver qué versión del modelo se encuentra en cada fase, puede obtener el modelo del registro. En el ejemplo siguiente se obtiene la versión del modelo que se encuentra actualmente en la fase Staging.

client.get_latest_versions(model_name, stages=["Staging"])

Nota

Sin embargo, en MLflow puede haber varias versiones que se estén en la misma fase a la vez; no obstante, este método devuelve la versión más reciente de todas (versión mayor).

Advertencia

Los nombres de fases distinguen entre mayúsculas y minúsculas.

Transición de modelos

La transición de la versión de un modelo a una fase determinada se puede realizar mediante el cliente de MLflow.

client.transition_model_version_stage(model_name, version=3, stage="Staging")

En el caso de que haya una versión del modelo existente en esa fase determinada, esta permanece allí de forma predeterminada. Por lo tanto, no se reemplaza, ya que varias versiones de modelos pueden estar en la misma fase a la vez. Como alternativa, puede indicar archive_existing_versions=True para que MLflow mueva la versión del modelo existente a la fase Archived.

client.transition_model_version_stage(
    model_name, version=3, stage="Staging", archive_existing_versions=True
)

Carga de modelos desde fases

Puede cargar un modelo que está en una fase determinada directamente desde Python mediante la función load_model y con el siguiente formato de URI. Tenga en cuenta que, para que este método se complete correctamente, debe tener todas las bibliotecas y dependencias ya instaladas en el entorno en el que está trabajando.

model = mlflow.pyfunc.load_model(f"models:/{model_name}/Staging")

Edición y eliminación de modelos

La edición de modelos registrados se admite en Mlflow y Azure ML. Sin embargo, hay algunas diferencias importantes que se deben tener en cuenta:

Advertencia

No se admite el cambio de nombre de los modelos en Azure Machine Learning, ya que los objetos de modelo son inmutables.

Edición de modelos

Puede editar la descripción y las etiquetas desde el propio modelo mediante MLflow:

client.update_model_version(model_name, version=1, description="My classifier description")

Para editar etiquetas, debe usar el método set_model_version_tag y remove_model_version_tag:

client.set_model_version_tag(model_name, version="1", key="type", value="classification")

Eliminación de una etiqueta:

client.delete_model_version_tag(model_name, version="1", key="type")

Eliminación de la versión de un modelo

Puede eliminar cualquier versión del modelo en el registro mediante el cliente de MLflow, como se muestra en el ejemplo siguiente:

client.delete_model_version(model_name, version="2")

Nota

Azure Machine Learning no admite la eliminación de todo el contenedor del modelo. Para ello, deberá eliminar todas las versiones de un modelo determinado.

Matriz de compatibilidad para administrar modelos con MLflow

El cliente de MLflow expone varios métodos para recuperar y administrar modelos. En la tabla siguiente se muestra cuáles de esos métodos se admiten actualmente en MLflow cuando se conectan a Azure Machine Learning. También se compara con otras funcionalidades de administración de modelos en Azure Machine Learning.

Característica MLflow Azure Machine Learning con MLflow Azure Machine Learning CLIv2 Azure ML Studio
Registro de modelos en formato MLflow
Registro de modelos en un formato distinto a MLflow
Registro de modelos a partir de salidas o artefactos de ejecuciones 1 2
Registro de modelos a partir de salidas o artefactos de ejecuciones en un servidor o área de trabajo de seguimiento diferente 5 5
Buscar o enumerar modelos registrados
Recuperación de detalles de las versiones del modelo registrado
Edición de la descripción de las versiones del modelo registrado
Edición de las etiquetas de las versiones del modelo registrado
Cambio de nombre de modelos registrados 3 3 3
Eliminación de un modelo registrado (contenedor) 3 3 3
Eliminación de una versión de modelo registrado
Administración de fases del modelo de MLflow
Búsqueda de modelos registrados por nombre 4
Búsqueda de modelos registrados mediante comparadores de cadenas LIKE y ILIKE 4
Búsqueda de modelos registrados por etiqueta 4
Compatibilidad con registros organizativos

Nota:

  • 1 Use los URI con formato runs:/<ruin-id>/<path>.
  • 2 Use los URI con formato azureml://jobs/<job-id>/outputs/artifacts/<path>.
  • 3 Los modelos registrados son objetos inmutables en Azure Machine Learning.
  • 4 Use el cuadro de búsqueda en Azure Machine Learning Studio. Se admite la coincidencia parcial.
  • 5 Use registros para mover modelos entre diferentes áreas de trabajo, a la vez que mantiene el linaje.

Pasos siguientes