Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede usar MLflow para consultar experimentos y trabajos (o ejecuciones) en Azure Machine Learning. No es necesario instalar ningún SDK específico para administrar lo que sucede dentro de un trabajo de entrenamiento. Al quitar dependencias específicas de la nube, obtendrá una transición más fluida entre las ejecuciones locales y la nube. En este artículo, aprenderá a consultar y comparar experimentos y ejecuciones en el área de trabajo mediante Azure Machine Learning y el SDK de MLflow en Python.
Con MLflow, puede hacer lo siguiente:
- Crear, consultar, eliminar y buscar experimentos en un área de trabajo.
- Consultar, eliminar y buscar ejecuciones en un área de trabajo.
- Realizar el seguimiento y recuperar métricas, parámetros, artefactos y modelos a partir de ejecuciones.
Para obtener una comparación detallada entre MLflow de código abierto y MLflow al conectarse a Azure Machine Learning, consulte Matriz de compatibilidad para consultar ejecuciones y experimentos en Azure Machine Learning.
Nota:
El SDK de Python de Azure Machine Learning v2 no proporciona funcionalidades nativas de registro ni seguimiento. Esta limitación se aplica no solo al registro, sino también a consultar las métricas registradas. En su lugar, use MLflow para administrar experimentos y ejecuciones. En este artículo se explica cómo usar MLflow para administrar experimentos y ejecuciones en Azure Machine Learning.
También es posible consultar y buscar experimentos y ejecuciones mediante la API de REST de MLflow. Para obtener un ejemplo sobre cómo consumirlo, consulte Uso de REST de MLflow con Azure Machine Learning.
Requisitos previos
Instale el paquete del SDK
mlflowde MLflow y el complemento de Azure Machine Learningazureml-mlflowpara MLflow:pip install mlflow azureml-mlflowSugerencia
Puede usar el paquete de
mlflow-skinny, que es un paquete de MLflow ligero sin dependencias de almacenamiento de SQL, servidor, interfaz de usuario o ciencia de datos. Se recomienda este paquete para los usuarios que necesitan principalmente las funcionalidades de seguimiento y registro de MLflow, pero no para el conjunto completo de características, incluidas las implementaciones.Cree un área de trabajo de Azure Machine Learning. Para crear un área de trabajo, consulte Crear recursos que necesita para empezar. Revise los permisos de acceso que necesita para realizar operaciones de MLflow en el área de trabajo.
Para realizar el seguimiento remoto o realizar el seguimiento de experimentos 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.
Consulta y búsqueda de experimentos
Use MLflow para buscar experimentos dentro del área de trabajo. Consulte los siguientes ejemplos:
Obtener todos los experimentos activos:
mlflow.search_experiments()Nota:
En las versiones heredadas de MLflow (<2.0), use el método
mlflow.list_experiments()en su lugar.Obtenga todos los experimentos, incluidos los experimentos archivados:
from mlflow.entities import ViewType mlflow.search_experiments(view_type=ViewType.ALL)Obtenga un experimento específico por nombre:
mlflow.get_experiment_by_name(experiment_name)Obtenga un experimento específico por Id.:
mlflow.get_experiment('1234-5678-90AB-CDEFG')
Experimentos de búsqueda
El search_experiments() método, disponible desde Mlflow 2.0, permite buscar experimentos que coincidan con criterios mediante filter_string.
Recupere varios experimentos en función de sus Id.:
mlflow.search_experiments(filter_string="experiment_id IN (" "'CDEFG-1234-5678-90AB', '1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')" )Recupere todos los experimentos creados después de un tiempo determinado:
import datetime dt = datetime.datetime(2022, 6, 20, 5, 32, 48) mlflow.search_experiments(filter_string=f"creation_time > {int(dt.timestamp())}")Recupere todos los experimentos con una etiqueta determinada:
mlflow.search_experiments(filter_string=f"tags.framework = 'torch'")
Ejecución de consultas y búsquedas
MLflow permite realizar búsquedas de ejecuciones dentro de cualquier experimento o, incluso, de varios al mismo tiempo. El método mlflow.search_runs() acepta los argumentos experiment_ids y experiment_name para indicar qué experimentos desea buscar. También puede establecer search_all_experiments=True si desea buscar en todos los experimentos del área de trabajo:
Por nombre del experimento:
mlflow.search_runs(experiment_names=[ "my_experiment" ])Por id. de experimento:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ])Busque en todos los experimentos del área de trabajo:
mlflow.search_runs(filter_string="params.num_boost_round='100'", search_all_experiments=True)
El experiment_ids argumento admite proporcionar un conjunto de experimentos, de modo que pueda buscar entre varios experimentos. Esta característica es útil si desea comparar ejecuciones del mismo modelo cuando se registra en diferentes experimentos (por ejemplo, por diferentes personas o iteraciones de proyectos diferentes).
Importante
Si no especifica experiment_ids, experiment_nameso search_all_experiments, MLflow busca de forma predeterminada en el experimento activo actual. Puede establecer el experimento activo mediante mlflow.set_experiment().
De forma predeterminada, MLflow devuelve los datos en formato Pandas Dataframe , lo que hace que sea útil al realizar más procesamiento o análisis de las ejecuciones. Los datos devueltos incluyen columnas con:
- Información básica sobre la ejecución.
- Parámetros con nombres de columna
params.<parameter-name>. - Métricas (último valor registrado de cada métrica) con nombres de columna
metrics.<metric-name>.
Todas las métricas y parámetros también se devuelven al realizar consultas. Sin embargo, para las métricas que contengan varios valores (por ejemplo, una curva de pérdida o una curva de PR), solo se devolverá el último valor de la métrica. Si desea recuperar todos los valores de una métrica determinada, use el mlflow.get_metric_history método . Consulte Obtención de parámetros y métricas de una ejecución para ver un ejemplo.
Ejecuciones de pedidos
De forma predeterminada, el portal muestra experimentos en orden descendente por start_time, que es la hora en la que ha puesto en cola el experimento en Azure Machine Learning. Sin embargo, puede cambiar este orden predeterminado mediante el order_by parámetro .
El orden se lleva a cabo por atributos, como
start_time:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.start_time DESC"])Ordene ejecuciones y limite los resultados. En el ejemplo siguiente se devuelve la última ejecución única del experimento:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], max_results=1, order_by=["attributes.start_time DESC"])La orden se ejecuta mediante el atributo
duration:mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], order_by=["attributes.duration DESC"])Sugerencia
attributes.durationno está presente en MLflow OSS, pero Azure Machine Learning lo proporciona para mayor comodidad.Ordenar las ejecuciones por valores de métrica
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ]).sort_values("metrics.accuracy", ascending=False)Advertencia
El
order_byparámetro no admite actualmente expresiones que contenganmetrics.*,params.*otags.*. En su lugar, use el métodosort_valuesde Pandas, tal y como se muestra en el ejemplo.
Filtrado de ejecuciones
Puede usar el filter_string parámetro para buscar ejecuciones con una combinación específica de hiperparámetros. Use params para acceder a los parámetros de una ejecución, metrics para acceder a las métricas registradas en la ejecución y attributes para acceder a los detalles de la información de ejecución. MLflow admite expresiones unidas por la palabra clave AND (la sintaxis no admite OR):
La búsqueda se ejecuta según el valor de un parámetro:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="params.num_boost_round='100'")Advertencia
Solo se admiten los operadores
=,likey!=para filtrarparameters.Buscar ejecuciones en función del valor de una métrica:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="metrics.auc>0.8")Buscar ejecuciones con una etiqueta determinada:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="tags.framework='torch'")Buscar ejecuciones creadas por un usuario determinado:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.user_id = 'John Smith'")Buscar ejecuciones con errores. Consulte Filtrado de ejecuciones por estado para ver los valores posibles:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.status = 'Failed'")Buscar ejecuciones creadas después de un tiempo determinado:
import datetime dt = datetime.datetime(2022, 6, 20, 5, 32, 48) mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string=f"attributes.creation_time > '{int(dt.timestamp())}'")Sugerencia
Para la clave
attributes, los valores deben ser siempre cadenas y, por tanto, estar codificados entre comillas.Ejecuciones de búsqueda que tardan más de una hora:
duration = 360 * 1000 # duration is in milliseconds mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string=f"attributes.duration > '{duration}'")Sugerencia
attributes.durationno está presente en MLflow OSS, pero Azure Machine Learning lo proporciona para mayor comodidad.Ejecuciones de búsqueda que tienen el identificador en un conjunto determinado:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ], filter_string="attributes.run_id IN ('1234-5678-90AB-CDEFG', '5678-1234-90AB-CDEFG')")
Filtrado de ejecuciones por estado
Al filtrar las ejecuciones por estado, MLflow usa una convención diferente para asignar un nombre a los distintos estados posibles de una ejecución en comparación con Azure Machine Learning. En la tabla siguiente, se muestran los valores posibles:
| Estado del trabajo de Azure Machine Learning | de MLflow attributes.status |
Significado |
|---|---|---|
| No iniciado | Scheduled |
Azure Machine Learning recibe el trabajo o la ejecución. |
| Cola | Scheduled |
La tarea o el proceso está programado para ejecutarse, pero aún no se inicia. |
| Preparando | Scheduled |
El trabajo o la ejecución aún no se han iniciado, pero se asigna un recurso de cálculo para su ejecución, y se está preparando el entorno y los datos de entrada. |
| En ejecución | Running |
El trabajo o proceso se está ejecutando activamente. |
| Completed | Finished |
El trabajo o la ejecución se completa sin errores. |
| Con error | Failed |
El trabajo o la ejecución se completa con errores. |
| Cancelado | Killed |
El usuario cancela el trabajo o la ejecución, o el sistema lo finaliza. |
Ejemplo:
mlflow.search_runs(experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="attributes.status = 'Failed'")
Obtención de métricas, parámetros, artefactos y modelos
El método search_runs devuelve un Pandas Dataframe que contiene una cantidad limitada de información de forma predeterminada. En caso necesario, es posible obtener objetos de Python que pudieran ser útiles para ver más detalles sobre estos. Use el output_format parámetro para controlar cómo se devuelve la salida:
runs = mlflow.search_runs(
experiment_ids=[ "1234-5678-90AB-CDEFG" ],
filter_string="params.num_boost_round='100'",
output_format="list",
)
Puede acceder a los detalles del miembro info. En el siguiente ejemplo se muestra cómo obtener run_id:
last_run = runs[-1]
print("Last run ID:", last_run.info.run_id)
Obtención de parámetros y métricas de una ejecución
Al devolver ejecuciones mediante output_format="list", puede acceder fácilmente a los parámetros mediante la clave data:
last_run.data.params
De la misma manera, puede consultar las métricas:
last_run.data.metrics
Para las métricas que contienen varios valores (por ejemplo, una curva de pérdida o una curva PR), solo se devuelve el último valor registrado de la métrica. Si desea recuperar todos los valores de una métrica determinada, use el mlflow.get_metric_history método . Este método requiere que use MlflowClient:
client = mlflow.tracking.MlflowClient()
client.get_metric_history("1234-5678-90AB-CDEFG", "log_loss")
Obtención de artefactos de una ejecución
MLflow puede consultar cualquier artefacto registrado por una ejecución. No se puede acceder a los artefactos mediante el propio objeto run. En su lugar, use el cliente MLflow:
client = mlflow.tracking.MlflowClient()
client.list_artifacts("1234-5678-90AB-CDEFG")
El método anterior enumera todos los artefactos registrados en la ejecución, pero permanecen almacenados en el almacén de artefactos (almacenamiento de Azure Machine Learning). Para descargar cualquiera de ellos, use el método download_artifact:
file_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path="feature_importance_weight.png"
)
Nota:
En las versiones heredadas de MLflow (<2.0), use el método MlflowClient.download_artifacts() en su lugar.
Obtención de modelos de una ejecución
Puede registrar modelos en la ejecución y, a continuación, recuperarlos directamente. Para recuperar un modelo, es necesario conocer la ruta de acceso al artefacto donde se almacene. Use el list_artifacts método para buscar artefactos que representan un modelo, ya que los modelos de MLflow siempre son carpetas. Descargue un modelo de manera que especifique la ruta de acceso donde se almacene el modelo mediante el método download_artifact:
artifact_path="classifier"
model_local_path = mlflow.artifacts.download_artifacts(
run_id="1234-5678-90AB-CDEFG", artifact_path=artifact_path
)
A continuación, puede volver a cargar el modelo desde los artefactos descargados mediante la función load_model típica en el espacio de nombres específico del sabor. En el ejemplo siguiente se usa xgboost:
model = mlflow.xgboost.load_model(model_local_path)
MLflow también permite realizar ambas operaciones a la vez y descargar y cargar el modelo en una sola instrucción. MLflow descarga el modelo en una carpeta temporal y lo carga desde allí. El método load_model usa un formato URI para indicar desde dónde se debe recuperar el modelo. En el caso de cargar un modelo desde una ejecución, la estructura de URI es la siguiente:
model = mlflow.xgboost.load_model(f"runs:/{last_run.info.run_id}/{artifact_path}")
Sugerencia
Para consultar y cargar modelos registrados en el registro de modelos, consulte Administración de registros de modelos en Azure Machine Learning con MLflow.
Obtención de ejecuciones secundarias (anidadas)
MLflow admite el concepto de ejecuciones secundarias (anidadas). Estas ejecuciones resultan útiles cuando es necesario poner en marcha rutinas de entrenamiento que se deben seguir de forma independientemente del proceso de entrenamiento principal. Los procesos de optimización del ajuste de hiperparámetros o las canalizaciones de Azure Machine Learning son ejemplos típicos de trabajos que generan varias ejecuciones secundarias. Puede consultar todas las ejecuciones secundarias de una ejecución específica mediante la etiqueta mlflow.parentRunIdde propiedad , que contiene el identificador de ejecución de la ejecución primaria.
hyperopt_run = mlflow.last_active_run()
child_runs = mlflow.search_runs(
filter_string=f"tags.mlflow.parentRunId='{hyperopt_run.info.run_id}'"
)
Comparación de trabajos y modelos en Estudio de Azure Machine Learning (versión preliminar)
Para comparar y evaluar la calidad de los trabajos y modelos en Estudio de Azure Machine Learning, use el panel de vista previa para habilitar la característica. Una vez habilitado, puede comparar los parámetros, las métricas y las etiquetas entre los trabajos y los modelos seleccionados.
Importante
Los elementos marcados (versión preliminar) en este artículo se encuentran actualmente en versión preliminar pública. Se ofrece la versión preliminar sin Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no se admitan o que tengan funcionalidades restringidas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.
En MLflow con cuadernos de Azure Machine Learning se demuestran y se analizan con mayor profundidad los conceptos presentados en este artículo.
- Entrenar y seguir un clasificador con MLflow: muestra cómo realizar un seguimiento de experimentos mediante MLflow, registrar modelos, así como combinar varios tipos en canalizaciones.
- Administración de experimentos y ejecuciones con MLflow: muestra cómo consultar experimentos, ejecuciones, métricas, parámetros y artefactos desde Azure Machine Learning mediante MLflow.
Matriz de compatibilidad para consultas de ejecuciones y experimentos
El SDK de MLflow expone varios métodos para recuperar ejecuciones, incluidas opciones para controlar lo que se devuelve y de qué manera. Consulte la tabla siguiente para obtener información sobre cuáles de esos métodos se admiten actualmente en MLflow cuando se conecta a Azure Machine Learning:
| Característica | Compatible con MLflow | Compatible con Azure Machine Learning |
|---|---|---|
| Ordenación de ejecuciones por atributos | ✓ | ✓ |
| Ordenación de ejecuciones por métricas | ✓ | 1 |
| Ordenación de ejecuciones por parámetros | ✓ | 1 |
| Ordenación de ejecuciones por etiquetas | ✓ | 1 |
| Filtrado de ejecuciones por atributos | ✓ | ✓ |
| Filtrado de ejecuciones por métricas | ✓ | ✓ |
| Filtrado de ejecuciones por métricas con caracteres especiales (con escape) | ✓ | |
| Filtrado de ejecuciones por parámetros | ✓ | ✓ |
| Filtrado de ejecuciones por etiquetas | ✓ | ✓ |
Filtrado de ejecuciones con comparadores numéricos (métricas), como =, !=, >, >=, < y <= |
✓ | ✓ |
Filtrado de ejecuciones con comparadores de cadenas (parámetros, etiquetas y atributos): = y != |
✓ | ✓2 |
Filtrado de ejecuciones con comparadores de cadenas (parámetros, etiquetas y atributos): LIKE/ILIKE |
✓ | ✓ |
Filtrado de ejecuciones con comparadores AND |
✓ | ✓ |
Filtrado de ejecuciones con comparadores OR |
||
| Cambio de nombre de experimentos | ✓ |
Nota:
- 1 Consulte la sección Ordenar ejecuciones para ver instrucciones y ejemplos sobre cómo lograr la misma funcionalidad en Azure Machine Learning.
-
2
!=para etiquetas no admitidas.