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
Obtenga una suscripción a Microsoft Fabric. También puede registrarse para obtener una evaluación gratuita de Microsoft Fabric.
Inicie sesión en Microsoft Fabric.
Cambie a la experiencia de ciencia de datos de Synapse mediante el conmutador de experiencia en el lado izquierdo de la página principal.
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.
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" )
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))
Cree un objeto
MLFlowTransformer
para cargar el modelo de Machine Learning para la inferencia. Para crear un objetoMLFlowTransformer
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 )
- Especifique las columnas del DataFrame
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,
Vaya a la página de elementos de una versión de modelo de ML determinada.
En la lista desplegable Aplicar esta versión, seleccione Aplicar este modelo en el asistente.
En el paso "Seleccionar tabla de entrada", se abre la ventana "Aplicar predicciones del modelo de ML".
Seleccione una tabla de entrada de una instancia de almacén de lago de datos en el área de trabajo actual.
Seleccione Siguiente para ir al paso "Asignar columnas de entrada".
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.
Seleccione Siguiente para ir al paso "Crear tabla de salida".
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.
Seleccione Siguiente para ir al paso "Asignar columnas de salida".
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.
Seleccione Siguiente para ir al paso "Configurar cuaderno".
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.
Seleccione Siguiente para ir al paso "Revisar y finalizar".
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.
Uso de una plantilla de código personalizable
Para usar una plantilla de código para generar predicciones por lotes:
- Vaya a la página de elementos de la versión de un modelo de Machine Learning determinado.
- 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
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
)