Compartir a través de


Puntuación de modelos de Machine Learning con PREDICT en Microsoft Fabric

Microsoft Fabric permite a los usuarios poner en marcha modelos de aprendizaje automático mediante una función PREDICT escalable. Esta función admite la puntuación por lotes en cualquier motor de proceso. Los usuarios pueden generar predicciones por lotes directamente desde un cuaderno de Microsoft Fabric o desde la página de elementos de un modelo de Machine Learning determinado.

En este artículo, aprenderá a aplicar PREDICT escribiendo código usted mismo o mediante el uso de una experiencia de interfaz de usuario guiada que controla la puntuación por lotes automáticamente.

Requisitos previos

Limitaciones

  • La función PREDICT se admite actualmente para este conjunto limitado de tipos de modelos de ML:
    • CatBoost
    • Keras
    • LightGBM
    • ONNX
    • Prophet
    • PyTorch
    • Sklearn
    • Spark
    • Statsmodels
    • TensorFlow
    • XGBoost
  • PREDICT requiere guardar modelos de ML en el formato MLflow, con sus firmas rellenadas
  • PREDICT no admite modelos de Machine Learning con entradas o salidas de varios tensores

Llamada a PREDICT desde un cuaderno

PREDICT admite modelos empaquetados de MLflow en el registro de Microsoft Fabric. Si ya existe un modelo de Machine Learning entrenado y registrado en el área de trabajo, puede ir directamente al paso 2. Si no es así, el paso 1 proporciona código de ejemplo para guiarle a través del entrenamiento de un modelo de regresión logística de ejemplo. Puede usar este modelo para generar predicciones por lotes al final del procedimiento.

  1. Entrene un modelo de Machine Learning y regístrelo con MLflow. En el código de ejemplo siguiente se usa la API de MLflow para crear un experimento de aprendizaje automático y, a continuación, iniciar una ejecución de MLflow para un modelo de regresión logística scikit-learn. A continuación, la versión del modelo se almacena y registra en el registro de Microsoft Fabric. Visite el recurso cómo entrenar modelos de ML con scikit-learn para obtener más información sobre los modelos de entrenamiento y el seguimiento de sus propios experimentos.

    import mlflow
    import numpy as np 
    from sklearn.linear_model import LogisticRegression 
    from sklearn.datasets import load_diabetes
    from mlflow.models.signature import infer_signature 
    
    mlflow.set_experiment("diabetes-demo")
    with mlflow.start_run() as run:
        lr = LogisticRegression()
        data = load_diabetes(as_frame=True)
        lr.fit(data.data, data.target) 
        signature = infer_signature(data.data, data.target) 
    
        mlflow.sklearn.log_model(
            lr,
            "diabetes-model",
            signature=signature,
            registered_model_name="diabetes-model"
        ) 
    
  2. Cargue datos de prueba como un DataFrame de Spark. Para generar predicciones por lotes con el modelo de Machine Learning entrenado en el paso anterior, necesita datos de prueba en forma de un DataFrame de Spark. En el código siguiente, sustituya el valor de la variable test por sus propios datos.

    # You can substitute "test" below with your own data
    test = spark.createDataFrame(data.frame.drop(['target'], axis=1))
    
  3. Cree un objeto MLFlowTransformer para cargar el modelo de Machine Learning para la inferencia. Para crear un objeto MLFlowTransformer para generar predicciones por lotes, debe realizar estas acciones:

    • Especifique las columnas del DataFrame test que necesita como entradas del modelo (en este caso, todas ellas)
    • Elija un nombre para la nueva columna de salida (en este caso, predictions)
    • proporcione el nombre de modelo y la versión del modelo correctos para la generación de esas predicciones.

    Si usa su propio modelo, sustituya los valores de las columnas de entrada, el nombre de la columna de salida, el nombre del modelo de Machine Learning y la versión del modelo.

    from synapse.ml.predict import MLFlowTransformer
    
    # You can substitute values below for your own input columns,
    # output column name, model name, and model version
    model = MLFlowTransformer(
        inputCols=test.columns,
        outputCol='predictions',
        modelName='diabetes-model',
        modelVersion=1
    )
    
  4. Genere predicciones mediante la función PREDICT. Para invocar la función PREDICT, use la API Transformer, la API Spark SQL o una función definida por el usuario (UDF) de PySpark. En las secciones siguientes se muestra cómo generar predicciones por lotes con los datos de prueba y el modelo de Machine Learning definidos en los pasos anteriores mediante los distintos métodos para invocar la función PREDICT.

PREDICT con la API Transformer

Este código invoca la función PREDICT con la API Transformer. Si usa su propio modelo de Machine Learning, sustituya los valores del modelo y los datos de prueba.

# You can substitute "model" and "test" below with values  
# for your own model and test data 
model.transform(test).show()

PREDICT con la API Spark SQL

Este código invoca la función PREDICT con la API Spark SQL. Si usa su propio modelo de Machine Learning, sustituya los valores de model_name, model_version y features por el nombre del modelo, la versión del modelo y las columnas de características.

Nota:

El uso de la API Spark SQL para la generación de predicciones todavía requiere la creación de un objeto MLFlowTransformer (como se muestra en el paso 3).

from pyspark.ml.feature import SQLTransformer 

# You can substitute "model_name," "model_version," and "features" 
# with values for your own model name, model version, and feature columns
model_name = 'diabetes-model'
model_version = 1
features = test.columns

sqlt = SQLTransformer().setStatement( 
    f"SELECT PREDICT('{model_name}/{model_version}', {','.join(features)}) as predictions FROM __THIS__")

# You can substitute "test" below with your own test data
sqlt.transform(test).show()

PREDICT con una función definida por el usuario

Este código invoca la función PREDICT con una UDF de PySpark. Si usa su propio modelo de Machine Learning, sustituya los valores del modelo y las características.

from pyspark.sql.functions import col, pandas_udf, udf, lit

# You can substitute "model" and "features" below with your own values
my_udf = model.to_udf()
features = test.columns

test.withColumn("PREDICT", my_udf(*[col(f) for f in features])).show()

Generación de código PREDICT desde la página de elementos de un modelo de Machine Learning

En la página de elementos de cualquier modelo de ML, puede elegir una de estas opciones para iniciar la generación de predicciones por lotes para una versión de modelo específica, con la función PREDICT:

  • Copia de una plantilla de código en un cuaderno y personalización de los parámetros usted mismo
  • Uso de una experiencia de interfaz de usuario guiada para generar código PREDICT

Uso de una experiencia de interfaz de usuario guiada

La experiencia de la interfaz de usuario guiada le guía por estos pasos:

  • Seleccionar los datos de origen para la puntuación
  • Asignar los datos correctamente a las entradas del modelo de ML
  • Especificar el destino de las salidas del modelo
  • Crear un cuaderno que use PREDICT para generar y almacenar resultados de predicción

Para usar la experiencia guiada,

  1. Vaya a la página de elementos de una versión de modelo de ML determinada.

  2. En la lista desplegable Aplicar esta versión, seleccione Aplicar este modelo en el asistente.

    Recorte de pantalla que muestra el símbolo del sistema que aplica un modelo de ML desde su página de elementos.

    En el paso "Seleccionar tabla de entrada", se abre la ventana "Aplicar predicciones del modelo de ML".

  3. Seleccione una tabla de entrada de una instancia de almacén de lago de datos en el área de trabajo actual.

    Recorte de pantalla que muestra la selección de una tabla de entrada para las predicciones del modelo de ML.

  4. Seleccione Siguiente para ir al paso "Asignar columnas de entrada".

  5. Asigne nombres de columna de la tabla de origen a los campos de entrada del modelo de Machine Learning, que se extraen de la firma del modelo. Debe proporcionar una columna de entrada para todos los campos obligatorios del modelo. Además, los tipos de datos de columna de origen deben coincidir con los tipos de datos esperados del modelo.

    Sugerencia

    El asistente rellena previamente esta asignación si los nombres de las columnas de la tabla de entrada coinciden con los nombres de columna registrados en la firma del modelo de Machine Learning.

    Recorte de pantalla que muestra el paso que asigna columnas de entrada para predicciones del modelo de ML.

  6. Seleccione Siguiente para ir al paso "Crear tabla de salida".

  7. Proporcione un nombre para una nueva tabla dentro de la instancia de Lakehouse seleccionada del área de trabajo actual. Esta tabla de salida almacena los valores de entrada del modelo de ML y anexa los valores de predicción a esa tabla. De forma predeterminada, la tabla de salida se crea en el mismo lago que la tabla de entrada. Puede cambiar el almacén de lago de datos de destino.

    Recorte de pantalla que muestra el paso que crea una tabla de salida para las predicciones del modelo de ML.

  8. Seleccione Siguiente para ir al paso "Asignar columnas de salida".

  9. Use los campos de texto proporcionados para asignar un nombre a las columnas de la tabla de salida que almacena las predicciones del modelo de ML.

    Recorte de pantalla que muestra el paso que asigna las columnas de salida para las predicciones del modelo de ML.

  10. Seleccione Siguiente para ir al paso "Configurar cuaderno".

  11. Proporcione un nombre para un nuevo cuaderno que ejecute el código PREDICT generado. El asistente muestra una vista previa del código generado en este paso. Si lo desea, puede copiar el código en el Portapapeles y pegarlo en un cuaderno existente.

    Recorte de pantalla que muestra el paso que configura un cuaderno para las predicciones del modelo de ML.

  12. Seleccione Siguiente para ir al paso "Revisar y finalizar".

  13. Revise los detalles de la página de resumen y seleccione Crear cuaderno para agregar el nuevo cuaderno con su código generado al área de trabajo. Se le llevará directamente a ese cuaderno, donde puede ejecutar el código para generar y almacenar predicciones.

    Recorte de pantalla que muestra el paso de revisión y finalización para las predicciones del modelo de ML.

Uso de una plantilla de código personalizable

Para usar una plantilla de código para generar predicciones por lotes:

  1. Vaya a la página de elementos de la versión de un modelo de Machine Learning determinado.
  2. Seleccione Copiar código para aplicar en la lista desplegable Aplicar esta versión. La selección permite copiar una plantilla de código personalizable.

Puede pegar esta plantilla de código en un cuaderno para generar predicciones por lotes con el modelo de Machine Learning. Para ejecutar correctamente la plantilla de código, debe reemplazar manualmente los valores siguientes:

  • <INPUT_TABLE>: ruta de acceso del archivo de la tabla que proporciona entradas al modelo de Machine Learning
  • <INPUT_COLS>: matriz de nombres de columna de la tabla de entrada que va a alimentar al modelo de Machine Learning
  • <OUTPUT_COLS>: nombre de una nueva columna en la tabla de salida que almacena las predicciones
  • <MODEL_NAME>: el nombre del modelo de Machine Learning que se va a usar para generar predicciones
  • <MODEL_VERSION>: la versión del modelo de Machine Learning que se va a usar para generar predicciones
  • <OUTPUT_TABLE>: ruta de acceso del archivo de la tabla que almacena las predicciones

Recorte de pantalla que muestra la plantilla de código de copia para las predicciones del modelo de ML.

import mlflow 
from synapse.ml.predict import MLFlowTransformer 
 
df = spark.read.format("delta").load( 
    <INPUT_TABLE> # Your input table filepath here
) 
 
model = MLFlowTransformer( 
    inputCols=<INPUT_COLS>, # Your input columns here
    outputCol=<OUTPUT_COLS>, # Your new column name here
    modelName=<MODEL_NAME>, # Your ML model name here
    modelVersion=<MODEL_VERSION> # Your ML model version here
) 
df = model.transform(df) 
 
df.write.format('delta').mode("overwrite").save( 
    <OUTPUT_TABLE> # Your output table filepath here
)