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 MLflowazureml-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 objetoMlflowClient
como se indica a continuación. Este tutorial utiliza el objetoclient
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_timestamp
y 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
Comentaris
https://aka.ms/ContentUserFeedback.
Properament: al llarg del 2024 eliminarem gradualment GitHub Issues com a mecanisme de retroalimentació del contingut i el substituirem per un nou sistema de retroalimentació. Per obtenir més informació, consulteu:Envieu i consulteu els comentaris de