Scoring af model til maskinel indlæring med PREDICT i Microsoft Fabric

Microsoft Fabric giver brugerne mulighed for at anvende modeller til maskinel indlæring med en skalerbar funktion kaldet PREDICT, som understøtter batchscore i ethvert beregningsprogram. Brugerne kan generere batchforudsigelser direkte fra en Microsoft Fabric-notesbog eller fra en given ML-models elementside.

I denne artikel lærer du, hvordan du anvender PREDICT på begge måder, uanset om du selv er mere fortrolig med at skrive kode eller bruger en guidet brugergrænsefladeoplevelse til at håndtere batchscore for dig.

Forudsætninger

  • Få et Microsoft Fabric-abonnement. Du kan også tilmelde dig en gratis Prøveversion af Microsoft Fabric.

  • Log på Microsoft Fabric.

  • Brug oplevelsesskifteren i venstre side af startsiden til at skifte til Synapse Data Science-oplevelsen.

    Screenshot of the experience switcher menu, showing where to select Data Science.

Begrænsninger

  • Funktionen PREDICT understøttes i øjeblikket for et begrænset sæt ML-modelvarianter, herunder:
    • Pytorch
    • Sklearn
    • Spark
    • TensorFlow
    • ONNX
    • XGBoost
    • Lys GBM
    • Katboost
    • Statsmodeller
    • Profeten
    • Keras
  • PREDICT kræver , at ML-modeller gemmes i MLflow-formatet med deres signaturer udfyldt.
  • PREDICT understøtter ikke ML-modeller med input eller output med flere tensorer.

Foretag et kald til PREDICT fra en notesbog

PREDICT understøtter MLflow-pakkede modeller i Microsoft Fabric-registreringsdatabasen. Hvis der allerede er en oplært og registreret ML-model i dit arbejdsområde, kan du gå til trin 2. Hvis ikke, indeholder trin 1 eksempelkode, der guider dig gennem oplæring af en eksempel på logistisk regressionsmodel. Du kan bruge denne model til at generere batchforudsigelser i slutningen af proceduren.

  1. Oplær en ML-model, og registrer den med MLflow. I følgende eksempelkode bruges MLflow-API'en til at oprette et maskinlæringseksperiment og starte en MLflow-kørsel for en logistisk regressionsmodel i scikit-learn. Modelversionen gemmes derefter og registreres i Microsoft Fabric-registreringsdatabasen. Se , hvordan du oplærer ML-modeller med scikit-learn for at få mere at vide om træningsmodeller og sporing af dine egne eksperimenter.

    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. Indlæs testdata som en Spark DataFrame. Hvis du vil generere batchforudsigelser ved hjælp af ml-modellen, der er oplært i det forrige trin, skal du bruge testdata i form af en Spark DataFrame. Du kan erstatte variablen test i følgende kode med dine egne data.

    # You can substitute "test" below with your own data
    test = spark.createDataFrame(data.frame.drop(['target'], axis=1))
    
  3. Opret et MLFlowTransformer objekt til indlæsning af ML-modellen til udledning. Hvis du vil oprette et MLFlowTransformer objekt til generering af batchforudsigelser, skal du udføre følgende handlinger:

    • angiv, hvilke kolonner fra DataFrame test du skal bruge som modelinput (i dette tilfælde dem alle)
    • vælg et navn til den nye outputkolonne (i dette tilfælde predictions), og
    • angiv det korrekte modelnavn og den korrekte modelversion til generering af disse forudsigelser.

    Hvis du bruger din egen ML-model, skal du erstatte værdierne for inputkolonnerne, outputkolonnenavnet, modelnavnet og modelversionen.

    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. Generér forudsigelser ved hjælp af funktionen PREDICT. Hvis du vil aktivere funktionen PREDICT, kan du bruge Transformer-API'en, Spark SQL-API'en eller en Brugerdefineret PySpark-funktion (UDF). I følgende afsnit kan du se, hvordan du genererer batchforudsigelser med de testdata og ML-modellen, der er defineret i de forrige trin, ved hjælp af de forskellige metoder til aktivering af PREDICT.

FORUDSIG med Transformer-API'en

Følgende kode aktiverer funktionen PREDICT med Transformer-API'en. Hvis du har brugt din egen ML-model, skal du erstatte værdierne for modellen og teste data.

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

FORUDSIG med Spark SQL-API'en

Følgende kode aktiverer funktionen PREDICT med Spark SQL-API'en. Hvis du har brugt din egen ML-model, skal du erstatte værdierne for model_name, model_versionog features med modelnavnet, modelversionen og funktionskolonnerne.

Bemærk

Hvis du bruger Spark SQL API til at generere forudsigelser, kræver det stadig, at du opretter et MLFlowTransformer objekt (som i trin 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 med en brugerdefineret funktion

Følgende kode aktiverer funktionen PREDICT med en PySpark UDF. Hvis du har brugt din egen ML-model, skal du erstatte modellen og funktionerne med værdierne.

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

Generér PREDICT-kode fra elementsiden for en ML-model

Fra alle ML-modellers elementside kan du vælge en af følgende indstillinger for at begynde at generere batchforudsigelser for en bestemt modelversion med PREDICT.

  • Brug en guidet brugergrænsefladeoplevelse til at generere PREDICT-kode
  • Kopiér en kodeskabelon til en notesbog, og tilpas selv parametrene

Brug en guidet brugergrænsefladeoplevelse

Den guidede brugergrænsefladeoplevelse fører dig gennem trin til:

  • Vælg kildedata til scoring
  • Knyt dataene korrekt til ml-modellens input
  • Angiv destinationen for din models output
  • Opret en notesbog, der bruger PREDICT til at generere og gemme forudsigelsesresultater

Hvis du vil bruge den guidede oplevelse,

  1. Gå til elementsiden for en given ML-modelversion.

  2. Vælg Anvend denne model i guidenrullelisten Anvend denne version .

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

    Markeringen åbner vinduet "Anvend ML-modelforudsigelser" på trinnet "Vælg inputtabel".

  3. Vælg en inputtabel fra et af lakehouses i dit aktuelle arbejdsområde.

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

  4. Vælg Næste for at gå til trinnet "Tilknyt inputkolonner".

  5. Knyt kolonnenavne fra kildetabellen til ML-modellens inputfelter, som hentes fra modellens signatur. Du skal angive en inputkolonne til alle modellens obligatoriske felter. Desuden skal datatyperne for kildekolonnerne stemme overens med modellens forventede datatyper.

    Tip

    Guiden udfylder denne tilknytning på forhånd, hvis navnene på inputtabellens kolonner stemmer overens med de kolonnenavne, der er logført i ML-modelsignaturen.

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

  6. Vælg Næste for at gå til trinnet "Opret outputtabel".

  7. Angiv et navn til en ny tabel i det valgte lakehouse i dit aktuelle arbejdsområde. I denne outputtabel gemmes inputværdierne for din ML-model med de vedhæftede forudsigelsesværdier. Outputtabellen oprettes som standard i samme lakehouse som inputtabellen, men muligheden for at ændre destinationssøhuset er også tilgængelig.

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

  8. Vælg Næste for at gå til trinnet "Tilknyt outputkolonner".

  9. Brug de angivne tekstfelter til at navngive de kolonner i outputtabellen, der gemmer ML-modellens forudsigelser.

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

  10. Vælg Næste for at gå til trinnet "Konfigurer notesbog".

  11. Angiv et navn til en ny notesbog, der kører den genererede PREDICT-kode. Guiden viser et eksempel på den genererede kode på dette trin. Du kan kopiere koden til udklipsholderen og indsætte den i en eksisterende notesbog, hvis du foretrækker det.

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

  12. Vælg Næste for at gå til trinnet "Gennemse og afslut".

  13. Gennemse detaljerne på oversigtssiden, og vælg Opret notesbog for at føje den nye notesbog med den genererede kode til dit arbejdsområde. Du føres direkte til notesbogen, hvor du kan køre koden for at generere og gemme forudsigelser.

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

Brug en kodeskabelon, der kan tilpasses

Sådan bruges en kodeskabelon til generering af batchforudsigelser:

  1. Gå til elementsiden for en given ML-modelversion.
  2. Vælg Kopiér kode, der skal anvendesrullelisten Anvend denne version . Med markeringen kan du kopiere en kodeskabelon, der kan tilpasses.

Du kan indsætte denne kodeskabelon i en notesbog for at generere batchforudsigelser med din ML-model. Hvis du vil køre kodeskabelonen, skal du manuelt erstatte følgende værdier:

  • <INPUT_TABLE>: Filstien til den tabel, der leverer input til ML-modellen
  • <INPUT_COLS>: En matrix af kolonnenavne fra inputtabellen, der skal føjes til ML-modellen
  • <OUTPUT_COLS>: Et navn til en ny kolonne i outputtabellen, der gemmer forudsigelser
  • <MODEL_NAME>: Navnet på den ML-model, der skal bruges til at generere forudsigelser
  • <MODEL_VERSION>: Den version af ML-modellen, der skal bruges til at generere forudsigelser
  • <OUTPUT_TABLE>: Filstien til den tabel, der gemmer forudsigelserne

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
)