Delen via


Scoren van machine learning-modellen met PREDICT in Microsoft Fabric

Met Microsoft Fabric kunnen gebruikers machine learning-modellen operationeel maken met een schaalbare functie met de naam PREDICT, die ondersteuning biedt voor batchgewijs scoren in elke rekenengine. Gebruikers kunnen batchvoorspellingen rechtstreeks genereren vanuit een Microsoft Fabric-notebook of op de itempagina van een bepaald ML-model.

In dit artikel leert u hoe u VOORSPELLEN op beide manieren kunt toepassen, of u nu vertrouwd bent met het schrijven van code zelf of het gebruik van een begeleide gebruikersinterface om batchgewijs scoren voor u af te handelen.

Vereisten

Beperkingen

  • De functie PREDICT wordt momenteel ondersteund voor een beperkte set ML-modelsmaak, waaronder:
    • PyTorch
    • SKLearn
    • Spark
    • TensorFlow
    • ONNX
    • XGBoost
    • LightGBM
    • CatBoost
    • Statsmodels
    • Profeet
    • Keras
  • PREDICT vereist dat ML-modellen worden opgeslagen in de MLflow-indeling, waarbij hun handtekeningen zijn ingevuld.
  • PREDICT biedt geen ondersteuning voor ML-modellen met multitensor-invoer of -uitvoer.

Predict aanroepen vanuit een notebook

PREDICT ondersteunt MLflow-verpakte modellen in het Microsoft Fabric-register. Als er al een getraind en geregistreerd ML-model in uw werkruimte is, kunt u doorgaan naar stap 2. Zo niet, dan biedt stap 1 voorbeeldcode om u te begeleiden bij het trainen van een voorbeeld van een logistiek regressiemodel. U kunt dit model gebruiken om batchvoorspellingen te genereren aan het einde van de procedure.

  1. Train een ML-model en registreer het bij MLflow. De volgende voorbeeldcode maakt gebruik van de MLflow-API om een machine learning-experiment te maken en een MLflow-uitvoering te starten voor een scikit-learn logistiek regressiemodel. De modelversie wordt vervolgens opgeslagen en geregistreerd in het Microsoft Fabric-register. Lees hoe u ML-modellen traint met scikit-learn voor meer informatie over het trainen van modellen en het volgen van experimenten van uw eigen modellen.

    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. Laden in testgegevens als een Spark DataFrame. Als u batchvoorspellingen wilt genereren met behulp van het ML-model dat in de vorige stap is getraind, hebt u testgegevens nodig in de vorm van een Spark DataFrame. U kunt de waarde voor de test variabele in de volgende code vervangen door uw eigen gegevens.

    # You can substitute "test" below with your own data
    test = spark.createDataFrame(data.frame.drop(['target'], axis=1))
    
  3. Maak een MLFlowTransformer object om het ML-model te laden voor deductie. Als u een MLFlowTransformer object wilt maken voor het genereren van batchvoorspellingen, moet u de volgende acties uitvoeren:

    • geef op welke kolommen van het test DataFrame u nodig hebt als modelinvoer (in dit geval allemaal),
    • kies een naam voor de nieuwe uitvoerkolom (in dit geval predictions) en
    • geef de juiste modelnaam en modelversie op voor het genereren van deze voorspellingen.

    Als u uw eigen ML-model gebruikt, vervangt u de waarden voor de invoerkolommen, de naam van de uitvoerkolom, de modelnaam en de modelversie.

    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. Genereer voorspellingen met behulp van de functie PREDICT. Als u de functie PREDICT wilt aanroepen, kunt u de Transformer-API, de Spark SQL-API of een door de gebruiker gedefinieerde PySpark-functie (UDF) gebruiken. In de volgende secties ziet u hoe u batchvoorspellingen genereert met de testgegevens en het ML-model dat in de vorige stappen is gedefinieerd, met behulp van de verschillende methoden voor het aanroepen van PREDICT.

VOORSPELLEN met de Transformer-API

Met de volgende code wordt de functie PREDICT aangeroepen met de Transformer-API. Als u uw eigen ML-model hebt gebruikt, vervangt u de waarden voor het model en testgegevens.

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

VOORSPELLEN met de Spark SQL-API

Met de volgende code wordt de functie PREDICT aangeroepen met de Spark SQL-API. Als u uw eigen ML-model hebt gebruikt, vervangt u de waarden voor en model_versionfeatures vervangt u de waarden door model_namede naam van het model, de modelversie en de functiekolommen.

Notitie

Als u de Spark SQL-API gebruikt om voorspellingen te genereren, moet u nog steeds een MLFlowTransformer object maken (zoals in stap 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()

VOORSPELLEN met een door de gebruiker gedefinieerde functie

Met de volgende code wordt de functie PREDICT aangeroepen met een PySpark UDF. Als u uw eigen ML-model hebt gebruikt, vervangt u de waarden voor het model en de functies.

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()

PREDICT-code genereren op de itempagina van een ML-model

Op de itempagina van een ML-model kunt u een van de volgende opties kiezen om batchvoorspellingen te genereren voor een specifieke modelversie met PREDICT.

  • Een begeleide ui-ervaring gebruiken om PREDICT-code te genereren
  • Een codesjabloon kopiëren naar een notebook en de parameters zelf aanpassen

Een begeleide gebruikersinterface-ervaring gebruiken

De begeleide gebruikersinterface helpt u bij het doorlopen van de volgende stappen:

  • Brongegevens selecteren voor scoren
  • De gegevens correct toewijzen aan de invoer van uw ML-model
  • Geef de bestemming op voor de uitvoer van uw model
  • Een notebook maken waarin PREDICT wordt gebruikt om voorspellingsresultaten te genereren en op te slaan

Als u de begeleide ervaring wilt gebruiken,

  1. Ga naar de itempagina voor een bepaalde ML-modelversie.

  2. Selecteer Dit model toepassen in de wizard in de vervolgkeuzelijst Deze versie toepassen.

    Screenshot of the prompt to apply an ML model from its item page.

    De selectie opent het venster ML-modelvoorspellingen toepassen in de stap Invoertabel selecteren.

  3. Selecteer een invoertabel uit een van de lakehouses in uw huidige werkruimte.

    Screenshot of the step to select an input table for ML model predictions.

  4. Selecteer Volgende om naar de stap Invoerkolommen toewijzen te gaan.

  5. Wijs kolomnamen uit de brontabel toe aan de invoervelden van het ML-model, die worden opgehaald uit de handtekening van het model. U moet een invoerkolom opgeven voor alle vereiste velden van het model. De gegevenstypen voor de bronkolommen moeten ook overeenkomen met de verwachte gegevenstypen van het model.

    Tip

    Deze toewijzing wordt vooraf ingevuld als de namen van de kolommen van de invoertabel overeenkomen met de kolomnamen die zijn vastgelegd in de ML-modelhandtekening.

    Screenshot of the step to map input columns for ML model predictions.

  6. Selecteer Volgende om naar de stap Uitvoertabel maken te gaan.

  7. Geef een naam op voor een nieuwe tabel in het geselecteerde lakehouse van uw huidige werkruimte. In deze uitvoertabel worden de invoerwaarden van uw ML-model opgeslagen met de voorspellingswaarden toegevoegd. De uitvoertabel wordt standaard gemaakt in hetzelfde lakehouse als de invoertabel, maar de optie om het doel lakehouse te wijzigen, is ook beschikbaar.

    Screenshot of the step to create an output table for ML model predictions.

  8. Selecteer Volgende om naar de stap Uitvoerkolommen toewijzen te gaan.

  9. Gebruik de opgegeven tekstvelden om de kolommen in de uitvoertabel een naam te geven waarin de voorspellingen van het ML-model worden opgeslagen.

    Screenshot of the step to map output columns for ML model predictions.

  10. Selecteer Volgende om naar de stap Notitieblok configureren te gaan.

  11. Geef een naam op voor een nieuw notebook waarmee de gegenereerde PREDICT-code wordt uitgevoerd. In deze stap wordt een voorbeeld van de gegenereerde code weergegeven. U kunt de code naar het Klembord kopiëren en in een bestaand notitieblok plakken als u wilt.

    Screenshot of the step to configure a notebook for ML model predictions.

  12. Selecteer Volgende om naar de stap Controleren en voltooien te gaan.

  13. Bekijk de details op de overzichtspagina en selecteer Notitieblok maken om het nieuwe notitieblok met de gegenereerde code toe te voegen aan uw werkruimte. U wordt rechtstreeks naar dat notebook geleid, waar u de code kunt uitvoeren om voorspellingen te genereren en op te slaan.

    Screenshot of the review-and-finish step for ML model predictions.

Een aanpasbare codesjabloon gebruiken

Een codesjabloon gebruiken voor het genereren van batchvoorspellingen:

  1. Ga naar de itempagina voor een bepaalde ML-modelversie.
  2. Selecteer Code kopiëren die u wilt toepassen in de vervolgkeuzelijst Deze versie toepassen. Met de selectie kunt u een aanpasbare codesjabloon kopiëren.

U kunt deze codesjabloon in een notebook plakken om batchvoorspellingen te genereren met uw ML-model. Als u de codesjabloon wilt uitvoeren, moet u de volgende waarden handmatig vervangen:

  • <INPUT_TABLE>: Het bestandspad voor de tabel die invoer levert aan het ML-model
  • <INPUT_COLS>: Een matrix met kolomnamen uit de invoertabel die moet worden ingevoerd in het ML-model
  • <OUTPUT_COLS>: Een naam voor een nieuwe kolom in de uitvoertabel waarin voorspellingen worden opgeslagen
  • <MODEL_NAME>: De naam van het ML-model dat moet worden gebruikt voor het genereren van voorspellingen
  • <MODEL_VERSION>: De versie van het ML-model die moet worden gebruikt voor het genereren van voorspellingen
  • <OUTPUT_TABLE>: Het bestandspad voor de tabel waarin de voorspellingen worden opgeslagen

Screenshot of the copy-code template for ML model predictions.

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
)