Compartir a través de


Directrices para implementar modelos de MLflow

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

En este artículo, obtendrá información sobre la implementación de modelos de MLflow en Azure Machine Learning para la inferencia por lotes y en tiempo real, y sobre las distintas herramientas que puede usar para administrar las implementaciones.

Implementación sin código

Al implementar modelos de MLflow en Azure Machine Learning, a diferencia de la implementación de modelos personalizados, no es necesario proporcionar un script de puntuación ni un entorno. Azure Machine Learning genera automáticamente el script de puntuación y el entorno. Esta funcionalidad se denomina implementación sin código.

En la implementación sin código, Azure Machine Learning hace lo siguiente:

  • Garantiza que se cumplen todas las dependencias de paquete indicadas en el modelo de MLflow.
  • Proporciona una imagen base de MLflow o un entorno mantenido que contiene los elementos siguientes:
    • Paquetes necesarios para que Azure Machine Learning realice la inferencia, incluido mlflow-skinny.
    • Un script de puntuación para realizar la inferencia.

Paquetes y dependencias

Azure Machine Learning genera automáticamente entornos para ejecutar la inferencia de modelos en MLflow. Para compilar los entornos, Azure Machine Learning lee las dependencias de Conda que se especifican en el modelo de MLflow y agrega los paquetes necesarios para ejecutar el servidor de inferencia. Estos paquetes adicionales varían en función del tipo de implementación.

En el siguiente archivo de ejemplo conda.yaml se muestran las dependencias de Conda especificadas en un modelo de MLflow.

channels:
- conda-forge
dependencies:
- python=3.12.3
- pip<=23.1.2
- pip:
  - mlflow
  - scikit-learn==1.6.1
  - psutil==5.9.4
  - azureml-ai-monitoring
  - azureml-inference-server-http
name: mlflow-env

Important

MLflow detecta automáticamente los paquetes cuando registra un modelo y ancla las versiones del paquete en las dependencias de Conda del modelo. Es posible que esta detección automática de paquetes no refleje sus intenciones o requisitos. También puede registrar modelos que usen una firma, un entorno o ejemplos personalizados.

Modelos que incluyen firmas

Los modelos de MLflow pueden incluir una firma que indique las entradas esperadas y sus tipos. Cuando estos modelos se implementan en puntos de conexión en línea o por lotes, Azure Machine Learning garantiza que el número y los tipos de las entradas de datos cumplan la firma. Si los datos de entrada no se pueden analizar según lo previsto, se produce un error en la invocación del modelo.

Puede inspeccionar una firma de modelo de MLflow abriendo el archivo MLmodel. Para obtener más información sobre cómo funcionan las firmas en MLflow, consulte Firmas en MLflow.

En el siguiente archivo MLmodel de ejemplo se resalta el signature.

artifact_path: model
flavors:
  python_function:
    env:
      conda: conda.yaml
      virtualenv: python_env.yaml
    loader_module: mlflow.sklearn
    model_path: model.pkl
    predict_fn: predict
    python_version: 3.12.3
  sklearn:
    code: null
    pickled_model: model.pkl
    serialization_format: cloudpickle
    sklearn_version: 1.1.2
mlflow_version: 2.7.1
model_uuid: 3f725f3264314c02808dd99d5e5b2781
run_id: 70f15bab-cf98-48f1-a2ea-9ad2108c28cd
signature:
  inputs: '[{"name": "age", "type": "double"}, {"name": "sex", "type": "double"},
    {"name": "bmi", "type": "double"}, {"name": "bp", "type": "double"}, {"name":
    "s1", "type": "double"}, {"name": "s2", "type": "double"}, {"name": "s3", "type":
    "double"}, {"name": "s4", "type": "double"}, {"name": "s5", "type": "double"},
    {"name": "s6", "type": "double"}]'
  outputs: '[{"type": "double"}]'

Tip

Se recomiendan firmas en modelos de MLflow porque proporcionan una manera cómoda de detectar problemas de compatibilidad de datos. Para obtener más información sobre cómo registrar modelos que tienen firmas, consulte Modelos de registro que usan una firma personalizada, un entorno o ejemplos.

Implementación en el servidor integrado de MLflow frente a la implementación en el servidor de inferencia de Azure Machine Learning

Los desarrolladores de modelos pueden usar herramientas de implementación integradas de MLflow para probar modelos localmente. Por ejemplo, puede ejecutar una instancia local de un modelo registrado en el registro del servidor de MLflow mediante mlflow models serve o la CLI mlflow models predictde MLflow . Para obtener más información sobre las herramientas de implementación integradas de MLflow, vea herramientas de implementación integradas en la documentación de MLflow.

Azure Machine Learning también admite la implementación de modelos en puntos de conexión tanto en línea como por lotes. Estos puntos de conexión ejecutan diferentes tecnologías de inferencia que pueden tener características diferentes.

  • Los puntos de conexión en línea de Azure Machine Learning, similares al servidor integrado de MLflow, proporcionan una manera escalable, sincrónica y ligera de ejecutar modelos para la inferencia.

  • Los puntos de conexión por lotes de Azure Machine Learning pueden ejecutar inferencia asincrónica a través de procesos de inferencia de ejecución prolongada que se pueden escalar a grandes cantidades de datos. El servidor MLflow carece de esta funcionalidad, aunque puede lograr una funcionalidad similar mediante trabajos de Spark. Para más información sobre los puntos de conexión por lotes y los modelos de MLflow, consulte Uso de modelos de MLflow en implementaciones por lotes.

Formatos de entrada

En la tabla siguiente se muestran los tipos de entrada admitidos por el servidor integrado de MLflow y los admitidos por los puntos de conexión en línea de Azure Machine Learning.

Tipo de entrada Servidor integrado de MLflow Punto de conexión en línea de Azure Machine Learning
DataFrames de Pandas serializados por JSON en la orientación dividida
DataFrames de Pandas serializados por JSON en la orientación de registros Deprecated
DataFrames de Pandas serializados en CSV Use la inferencia por lotes. Para obtener más información, consulte Implementación de modelos de MLflow en puntos de conexión por lotes.
Entrada de TensorFlow como listas serializadas por JSON (tensores) y diccionario de listas (tensores con nombre)
Entrada de TensorFlow mediante la API de servicio de TensorFlow

Las siguientes secciones se centran en los modelos de MLflow que se implementan en puntos de conexión en línea de Azure Machine Learning.

Estructura de entrada

Independientemente del tipo de entrada, Azure Machine Learning requiere que proporcione entradas en una carga JSON en la clave de diccionario input_data. Esta clave no es necesaria cuando se usa el comando mlflow models serve para atender modelos, por lo que las cargas no se pueden usar indistintamente para los puntos de conexión en línea de Azure Machine Learning y el servidor integrado de MLflow.

Important

La estructura de carga ha cambiado en MLflow 2.0.

Los siguientes ejemplos de carga muestran diferencias entre un modelo implementado en el servidor integrado de MLflow frente al servidor de inferencia de Azure Machine Learning.

DataFrame de Pandas serializado por JSON en la orientación dividida

{
    "input_data": {
        "columns": [
            "age", "sex", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
        ],
        "index": [1],
        "data": [
            [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
        ]
    }
}

Entrada de tensor

{
    "input_data": [
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
          [1, 1, 0, 233, 1, 2, 150, 0, 2.3, 3, 0, 2],
          [1, 1, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
    ]
}

Entrada de tensor con nombre

{
    "input_data": {
        "tokens": [
          [0, 655, 85, 5, 23, 84, 23, 52, 856, 5, 23, 1]
        ],
        "mask": [
          [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
        ]
    }
}

Personalización de inferencia para modelos de MLflow

Los scripts de puntuación personalizan cómo ejecutar la inferencia para modelos personalizados. Pero para la implementación del modelo de MLflow, el generador de modelos toma la decisión sobre cómo ejecutar la inferencia en lugar del ingeniero de implementación. Cada marco de modelo puede aplicar automáticamente rutinas de inferencia específicas.

Si necesita cambiar cómo se ejecuta la inferencia para un modelo de MLflow, puede realizar una de las siguientes acciones:

  • Cambie cómo se registra el modelo en la rutina de entrenamiento.
  • Personalice la inferencia mediante un script de puntuación en el momento de la implementación.

Cambiar cómo se registra el modelo durante el entrenamiento

Al registrar un modelo mediante mlflow.autolog o mlflow.<flavor>.log_model, el tipo usado para el modelo determina cómo ejecutar la inferencia y los resultados que se van a devolver. MLflow no impone ningún comportamiento específico en cuanto a cómo genera resultados la función predict().

En algunos casos, es posible que desee realizar algún tipo de preprocesamiento o posprocesamiento antes y después de ejecutar su modelo. O puede que quiera cambiar lo que se devuelve, por ejemplo, probabilidades en lugar de clases. Una solución es implementar canalizaciones de aprendizaje automático que se mueven de las entradas a las salidas directamente.

Por ejemplo, sklearn.pipeline.Pipeline o pyspark.ml.Pipeline son formas populares de implementar canalizaciones y, a veces, se recomiendan para mejorar el rendimiento. También puede personalizar cómo realiza la inferencia del modelo registrando modelos personalizados.

Personalización de la inferencia mediante un script de puntuación

Aunque los modelos de MLflow no requieren un script de puntuación, puede proporcionar uno para personalizar la ejecución de inferencia para los modelos de MLflow si es necesario. Para obtener más información sobre cómo personalizar la inferencia, consulte Personalización de implementaciones de modelos de MLflow para puntos de conexión en línea o Personalización de la implementación de modelos con script de puntuación para puntos de conexión por lotes.

Important

Si elige suministrar un script de puntuación de una implementación de modelo de MLflow, también debe especificar un entorno para la implementación.

Herramientas de implementación

Azure Machine Learning proporciona las siguientes herramientas para implementar modelos de MLflow en puntos de conexión en línea y por lotes:

Cada herramienta tiene diferentes funcionalidades, especialmente para qué tipo de proceso puede tener como destino. En la siguiente tabla se muestra la compatibilidad con diferentes escenarios de implementación de MLflow.

Scenario MLflow SDK CLI/SDK o estudio de Azure Machine Learning
Implemente en puntos de conexión en línea administrados. 1 Supported. Consulte Implementación progresiva de modelos de MLflow en puntos de conexión en línea. Supported. Consulte Implementación de modelos de MLflow en puntos de conexión en línea.
Implementación en puntos de conexión en línea administrados con un script de puntuación. No se admite. 3 Supported. Consulte Personalización de implementaciones de modelos de MLflow.
Implementación en puntos de conexión por lotes. No se admite. 3 Supported. Consulte Uso de modelos de MLflow en implementaciones por lotes.
Implementación en puntos de conexión por lotes con un script de puntuación. No se admite. 3 Supported. Consulte Personalización de la implementación de modelos con script de puntuación.
Implemente en servicios web como Azure Container Instances o Azure Kubernetes Service (AKS). Compatibilidad heredada. 2 No se admite. 2
Implemente en servicios web como Container Instances o AKS con un script de puntuación. No se admite. 3 Compatibilidad heredada. 2

1 Cambie a puntos de conexión en línea administrados si es posible.

2 MLflow de código abierto no admite scripts de puntuación ni ejecución por lotes.

Elección de una herramienta de implementación

Use el SDK de MLflow si se cumplen las dos condiciones siguientes:

  • Está familiarizado con MLflow y quiere seguir usando los mismos métodos.
  • Usa una plataforma como Azure Databricks que admite MLflow de forma nativa.

Use la CLI de Azure Machine Learning v2 o el SDK para Python si se cumple alguna de las siguientes condiciones:

  • Conoces la herramienta.
  • Desea automatizar la implementación mediante el uso de canalizaciones.
  • Quiere almacenar la configuración de implementación en un repositorio de Git.

Use la interfaz de usuario de Estudio de Azure Machine Learning si desea implementar y probar rápidamente modelos entrenados con MLflow.