Administración de código de entrenamiento con ejecuciones de MLflow

En este artículo se describen las ejecuciones de MLflow para administrar el entrenamiento de aprendizaje automático. También incluye instrucciones acerca de cómo administrar y comparar ejecuciones entre experimentos.

Una ejecución de MLflow corresponde a una única ejecución del código del modelo. Cada ejecución registra la siguiente información:

  • Origen: nombre del cuaderno que inició la ejecución o el nombre del proyecto y el punto de entrada de la ejecución.
    • Versión: hash de confirmación de Git si el cuaderno está almacenado en una Carpeta Git de Databricks o se ejecuta desde un proyecto de MLflow. De lo contrario, revisión del cuaderno.
    • Hora de inicio y finalización: hora de inicio y finalización de la ejecución.
    • Parámetros: parámetros de modelo guardados como pares clave-valor. Tanto las claves como los valores son cadenas.
    • Métricas: métricas de evaluación de modelos guardadas como pares clave-valor. El valor es "numérico". Cada métrica se puede actualizar durante el curso de la ejecución (por ejemplo, para realizar un seguimiento de cómo converge la función de pérdida del modelo) y los registros de MLflow, y le permite visualizar el historial de la métrica.
    • Etiquetas: ejecute metadatos guardados como pares clave-valor. Puede actualizar las etiquetas durante y después de que se complete una ejecución. Tanto las claves como los valores son cadenas.
    • Artefactos: archivos de salida en cualquier formato. Por ejemplo, puede grabar imágenes, modelos (por ejemplo, un modelo scikit-learn de pickle) y archivos de datos (por ejemplo, un archivo Parquet) como un artefacto.

Todas las ejecuciones de MLflow se registran en el experimento activo. Si no ha establecido explícitamente un experimento como experimento activo, las ejecuciones se registran en el experimento de cuaderno.

Visualización de ejecuciones

Puede acceder a una ejecución desde su página de experimento principal o directamente desde el cuaderno que creó la ejecución.

En la página del experimento, en la tabla de ejecuciones, haga clic en la hora de inicio de una ejecución.

En el cuaderno, haga clic en External Link junto a la fecha y hora de la ejecución en la barra lateral ejecuciones de experimentos.

La pantalla de ejecución muestra los parámetros usados para la ejecución, las métricas resultantes de la ejecución y las etiquetas o notas. Para mostrar las Notas, los Parámetros, las Métricas o las Etiquetas de esta ejecución, haga clic en flecha que apunta a la derecha a la izquierda de la etiqueta.

Desde una ejecución de esta pantalla también se accede a los artefactos guardados.

Vista de ejecución

Fragmentos de código para la predicción

Si registra un modelo desde una ejecución, el modelo aparece en la sección Artefactos de esta página. Para mostrar fragmentos de código que ilustren cómo cargar y usar el modelo para realizar predicciones en DataFrames de Spark y Pandas, haga clic en el nombre del modelo.

Predicción de fragmentos de código

Visualización del cuaderno o el proyecto de Git usados para una ejecución

Para ver la versión del cuaderno que creó una ejecución:

  • En la página del experimento, haga clic en el vínculo de la columna Source (Origen).
  • En la página de ejecución, haga clic en el vínculo situado junto a Source (Origen).
  • En el cuaderno, en la barra lateral Ejecuciones de experimentos, haga clic en el icono NotebookIcono de versión de Notebook de en el cuadro para esa ejecución del experimento.

La versión del cuaderno asociada a la ejecución aparece en la ventana principal con una barra de resaltado que muestra la fecha y hora de la ejecución.

Si la ejecución se inició de forma remota desde un proyecto de Git, haga clic en el vínculo del campo Git Commit(Confirmación de Git) para abrir la versión específica del proyecto usada en la ejecución. El vínculo del campo Source (Origen) abre la rama principal del proyecto de Git usado en la ejecución.

Adición de una etiqueta a una ejecución

Las etiquetas son pares clave-valor que puede crear y usar más adelante para buscar ejecuciones.

  1. En la página de ejecución, haga clic en icono de etiqueta si aún no está abierto. Aparece la tabla de etiquetas.

    tabla de etiquetas

  2. Haga clic en los campos Nombre y Valor y escriba la clave y el valor de la etiqueta.

  3. Haga clic en Agregar.

    adición de una etiqueta

Edición o eliminación de una etiqueta de una ejecución

Para editar o eliminar una etiqueta, use los iconos de la columna Actions (Acciones).

acciones de etiqueta

Reproducción del entorno de software de una ejecución

Puede reproducir el entorno de software exacto para la ejecución haciendo clic en Reproduce Run(Reproducir ejecución). Aparece el cuadro de diálogo siguiente:

Reproducción de cuadro de diálogo de ejecución

Con la configuración predeterminada, al hacer clic en Confirm (Confirmar):

  • El cuaderno se clona en la ubicación que se muestra en el cuadro de diálogo.
  • Si el clúster original sigue existiendo, el cuaderno clonado se asocia al clúster original y se inicia el clúster.
  • Si el clúster original ya no existe, se crea e inicia un nuevo clúster con la misma configuración, incluidas las bibliotecas instaladas. El cuaderno está asociado al nuevo clúster.

Puede seleccionar una ubicación diferente para el cuaderno clonado e inspeccionar la configuración del clúster y las bibliotecas instaladas:

  • Para seleccionar otra carpeta para guardar el cuaderno clonado, haga clic en Edit Folder (Editar carpeta).
  • Para ver la especificación del clúster, haga clic en View Spec (Ver especificación). Para clonar solo el cuaderno y no el clúster, desactive esta opción.
  • Para ver las bibliotecas instaladas en el clúster original, haga clic en View Libraries (Ver bibliotecas). Si no le interesa instalar las mismas bibliotecas que en el clúster original, desactive esta opción.

Administración de ejecuciones

Cambio de nombre de una ejecución

Para cambiar el nombre de una ejecución, haga clic en icono de tres botones la esquina superior derecha de la página de ejecución y seleccione Cambiar nombre.

Filtrado de ejecuciones

Puede buscar ejecuciones en función de los valores de parámetro o métrica. También puede buscar ejecuciones por etiqueta.

  • Para buscar ejecuciones que coincidan con una expresión que contenga valores de parámetro y métrica, escriba una consulta en el campo de búsqueda y haga clic en Search (Buscar). Algunos ejemplos de sintaxis de consulta son:

    metrics.r2 > 0.3

    params.elasticNetParam = 0.5

    params.elasticNetParam = 0.5 AND metrics.avg_areaUnderROC > 0.3

  • Para buscar ejecuciones por etiqueta, escriba etiquetas con el formato: tags.<key>="<value>". Los valores de cadena se deben incluir entre comillas, como se muestra.

    tags.estimator_name="RandomForestRegressor"

    tags.color="blue" AND tags.size=5

    Tanto las claves como los valores pueden contener espacios. Si la clave tiene espacios, debe incluirla entre acentos graves, como se muestra.

    tags.`my custom tag` = "my value"
    

También puede filtrar las ejecuciones por su estado (activo o eliminado) y en función de si una versión del modelo está asociada a la ejecución. Para ello, realice sus selecciones en los menús desplegables Estado y Hora de creación, respectivamente.

Filtrado de ejecuciones

Descarga de ejecuciones

  1. Selecciona una o varias ejecuciones.

  2. Haga clic en Download CSV (Descargar CSV). Se descarga un archivo CSV que contiene los campos siguientes:

    Run ID,Name,Source Type,Source Name,User,Status,<parameter1>,<parameter2>,...,<metric1>,<metric2>,...
    

Eliminación de ejecuciones

Puede eliminar ejecuciones mediante la interfaz de usuario de Databricks Machine Learning con los pasos siguientes:

  1. En el experimento, seleccione una o varias ejecuciones haciendo clic en la casilla situada a su izquierda.
  2. Haga clic en Eliminar.
  3. Si la ejecución es una ejecución primaria, decida si también desea eliminar ejecuciones descendientes. Esta opción se encuentra seleccionada de forma predeterminada.
  4. Haga clic en Delete (Eliminar) para confirmar. Las ejecuciones eliminadas se guardan durante 30 días. Para mostrar las ejecuciones eliminadas, seleccione Deleted (Eliminado) en el campo State (Estado).

Ejecuciones de eliminación masiva basadas en el tiempo de creación

Puede usar Python para eliminar masivamente las ejecuciones de un experimento creado antes o en una marca de tiempo de UNIX. Con Databricks Runtime 14.1 o posterior, puede llamar a la API de mlflow.delete_runs para eliminar ejecuciones y devolver el número de ejecuciones eliminadas.

A continuación se muestran los parámetros mlflow.delete_runs:

  • experiment_id: el identificador del experimento que contiene las ejecuciones que se van a eliminar.
  • max_timestamp_millis: marca de tiempo de creación máxima en milisegundos desde la época de UNIX para eliminar ejecuciones. Solo se eliminan las ejecuciones creadas antes o en esta marca de tiempo.
  • max_runs: opcional. Entero positivo que indica el número máximo de ejecuciones que se van a eliminar. El valor máximo permitido para max_runs es 10000. Si no se especifica, el valor predeterminado max_runs es 10000.
import mlflow

# Replace <experiment_id>, <max_timestamp_ms>, and <max_runs> with your values.
runs_deleted = mlflow.delete_runs(
  experiment_id=<experiment_id>,
  max_timestamp_millis=<max_timestamp_ms>,
  max_runs=<max_runs>
)
# Example:
runs_deleted = mlflow.delete_runs(
  experiment_id="4183847697906956",
  max_timestamp_millis=1711990504000,
  max_runs=10
)

Con Databricks Runtime 13.3 LTS o versiones anteriores, puede ejecutar el siguiente código de cliente en Azure Databricks Notebook.

from typing import Optional

def delete_runs(experiment_id: str,
                max_timestamp_millis: int,
                max_runs: Optional[int] = None) -> int:
    """
    Bulk delete runs in an experiment that were created prior to or at the specified timestamp.
    Deletes at most max_runs per request.

    :param experiment_id: The ID of the experiment containing the runs to delete.
    :param max_timestamp_millis: The maximum creation timestamp in milliseconds
                                 since the UNIX epoch for deleting runs. Only runs
                                 created prior to or at this timestamp are deleted.
    :param max_runs: Optional. A positive integer indicating the maximum number
                     of runs to delete. The maximum allowed value for max_runs
                     is 10000. If not specified, max_runs defaults to 10000.
    :return: The number of runs deleted.
    """
    from mlflow.utils.databricks_utils import get_databricks_host_creds
    from mlflow.utils.request_utils import augmented_raise_for_status
    from mlflow.utils.rest_utils import http_request

    json_body = {"experiment_id": experiment_id, "max_timestamp_millis": max_timestamp_millis}
    if max_runs is not None:
        json_body["max_runs"] = max_runs
    response = http_request(
        host_creds=get_databricks_host_creds(),
        endpoint="/api/2.0/mlflow/databricks/runs/delete-runs",
        method="POST",
        json=json_body,
    )
    augmented_raise_for_status(response)
    return response.json()["runs_deleted"]

Consulte la documentación de la API de experimentos de Azure Databricks para conocer los parámetros y las especificaciones de valor devuelto para eliminar ejecuciones en función del tiempo de creación.

Ejecuciones de restauración

Puede restaurar ejecuciones eliminadas anteriormente mediante la interfaz de usuario de Databricks Machine Learning.

  1. En la página Experimento, seleccione Eliminado en el campo Estado para mostrar las ejecuciones eliminadas.
  2. Seleccione una o varias ejecuciones haciendo clic en la casilla situada a la izquierda de la ejecución.
  3. Haga clic en Restaurar.
  4. Haga clic en Restaurar para confirmar. Para mostrar las ejecuciones restauradas, seleccione Activo en el campo Estado.

Se ejecuta la restauración masiva en función del tiempo de eliminación

También puede usar Python para restaurar masivamente las ejecuciones de un experimento que se eliminaron en o después de una marca de tiempo de UNIX. Con Databricks Runtime 14.1 o posterior, puede llamar a la API de mlflow.restore_runs para restaurar ejecuciones y devolver el número de ejecuciones restauradas.

A continuación se muestran los parámetros mlflow.restore_runs:

  • experiment_id: el identificador del experimento que contiene las ejecuciones que se van a restaurar.
  • min_timestamp_millis: marca de tiempo de eliminación mínima en milisegundos desde la época de UNIX para restaurar ejecuciones. Solo se eliminan las ejecuciones en o después de restaurar esta marca de tiempo.
  • max_runs: opcional. Entero positivo que indica el número máximo de ejecuciones que se van a restaurar. El valor máximo permitido para max_runs es 10000. Si no se especifica, max_runs el valor predeterminado es 10000.
import mlflow

# Replace <experiment_id>, <min_timestamp_ms>, and <max_runs> with your values.
runs_restored = mlflow.restore_runs(
  experiment_id=<experiment_id>,
  min_timestamp_millis=<min_timestamp_ms>,
  max_runs=<max_runs>
)
# Example:
runs_restored = mlflow.restore_runs(
  experiment_id="4183847697906956",
  min_timestamp_millis=1711990504000,
  max_runs=10
)

Con Databricks Runtime 13.3 LTS o versiones anteriores, puede ejecutar el siguiente código de cliente en Azure Databricks Notebook.

from typing import Optional

def restore_runs(experiment_id: str,
                 min_timestamp_millis: int,
                 max_runs: Optional[int] = None) -> int:
    """
    Bulk restore runs in an experiment that were deleted at or after the specified timestamp.
    Restores at most max_runs per request.

    :param experiment_id: The ID of the experiment containing the runs to restore.
    :param min_timestamp_millis: The minimum deletion timestamp in milliseconds
                                 since the UNIX epoch for restoring runs. Only runs
                                 deleted at or after this timestamp are restored.
    :param max_runs: Optional. A positive integer indicating the maximum number
                     of runs to restore. The maximum allowed value for max_runs
                     is 10000. If not specified, max_runs defaults to 10000.
    :return: The number of runs restored.
    """
    from mlflow.utils.databricks_utils import get_databricks_host_creds
    from mlflow.utils.request_utils import augmented_raise_for_status
    from mlflow.utils.rest_utils import http_request
    json_body = {"experiment_id": experiment_id, "min_timestamp_millis": min_timestamp_millis}
    if max_runs is not None:
        json_body["max_runs"] = max_runs
    response = http_request(
        host_creds=get_databricks_host_creds(),
        endpoint="/api/2.0/mlflow/databricks/runs/restore-runs",
        method="POST",
        json=json_body,
    )
    augmented_raise_for_status(response)
    return response.json()["runs_restored"]

Consulte la documentación de la API de experimentos de Azure Databricks para conocer los parámetros y las especificaciones de valor devuelto para restaurar ejecuciones en función del tiempo de eliminación.

comparación de ejecuciones

Puede comparar las ejecuciones tanto de un experimento como de varios. La página Comparing Runs presenta información sobre las ejecuciones seleccionadas en los formatos de gráficos y de tablas. También puede crear visualizaciones de resultados de ejecución y tablas de información de ejecución, parámetros de ejecución y métricas.

Para crear una visualización:

  1. Seleccione el tipo de trazado (Parallel Coordinates Plot, Scatter Plot o Contour Plot).
    1. En el caso de Parallel Coordinates Plot, seleccione los parámetros y las métricas que se van a trazar. Desde aquí, puede identificar las relaciones entre los parámetros y las métricas seleccionados, lo que le ayuda a definir mejor el espacio de ajuste de hiperparámetros para los modelos.

      Comparación de visualización de página de ejecución

    2. En el caso de Scatter Plot o Contour Plot, seleccione el parámetro o la métrica que se va a mostrar en cada eje.

Las tablas Parameters y Metrics muestran los parámetros y métricas de ejecución de todas las ejecuciones seleccionadas. Las columnas de estas tablas se identifican mediante la tabla Run details inmediatamente superior. Para simplificar, puede ocultar parámetros y métricas idénticos en todas las ejecuciones seleccionadas mediante la alternancia de Mostrar solo botón de diferencia.

Comparación de tablas de página de ejecución

Comparación de ejecuciones de un único experimento

  1. En la página del experimento, seleccione dos o más ejecuciones, para lo que debe hacer clic en la casilla situada a la izquierda de la ejecución, o bien seleccione todas las ejecuciones activando la casilla situada en la parte superior de la columna.
  2. Haga clic en Compare (Comparar). Aparece la pantalla Comparar <N> ejecuciones.

Comparación de ejecuciones de varios experimentos

  1. En la página de experimentos, seleccione los experimentos que desea comparar, para lo que debe hacer clic en el cuadro situado a la izquierda del nombre del experimento.
  2. Haga clic en Compare (n) (n es el número de experimentos que ha seleccionado). Aparece una pantalla que muestra todas las ejecuciones de los experimentos seleccionados.
  3. Seleccione dos o más ejecuciones, para lo que debe hacer clic en la casilla situada a la izquierda de la ejecución, o bien seleccione todas las ejecuciones activando la casilla situada en la parte superior de la columna.
  4. Haga clic en Compare (Comparar). Aparece la pantalla Comparar <N> ejecuciones.

Copia de ejecuciones entre áreas de trabajo

Para importar o exportar ejecuciones de MLflow hacia o desde el área de trabajo de Databricks, puede usar el proyecto de código abierto controlado por la comunidad MLflow Export-Import.