Modellpoengberegning med PREDICT i Microsoft Fabric

Microsoft Fabric gjør det mulig for brukere å operasjonalisere maskinlæringsmodeller med en skalerbar funksjon kalt PREDICT, som støtter satsvis poengsum i enhver databehandlingsmotor. Brukere kan generere satsvise prognoser direkte fra en Microsoft Fabric-notatblokk eller fra elementsiden til en gitt modell.

Viktig

Microsoft Fabric er for øyeblikket i PREVIEW. Denne informasjonen er knyttet til et forhåndsutgitt produkt som kan endres vesentlig før det utgis. Microsoft gir ingen garantier, uttrykt eller underforstått, med hensyn til informasjonen som er oppgitt her.

I denne artikkelen lærer du hvordan du bruker FORUTSI begge veier, enten du er mer komfortabel med å skrive kode selv eller bruker en veiledet brukergrensesnittopplevelse til å håndtere satsvis poengsum for deg.

Forutsetninger

Begrensninger

  • PREDICT-funksjonen støttes for øyeblikket for et begrenset sett med modellsmaker, inkludert PyTorch, Sklearn, Spark, TensorFlow, ONNX, XGBoost, LightGBM, CatBoost og Statsmodels.
  • PREDICT krever at modeller lagres i MLflow-formatet med signaturene utfylt.
  • PREDICT støtter ikke modeller med inndata eller utganger med flere tensorer.

Ringe forutsi fra en notatblokk

PREDICT støtter MLflow-pakkede modeller i Microsoft Fabric-registeret. Hvis du allerede har kalibrert og registrert en modell i arbeidsområdet, kan du hoppe til trinn 2 nedenfor. Hvis ikke, gir trinn 1 eksempelkode for å veilede deg gjennom opplæring av en eksempelmodell for logistisk regresjon. Du kan bruke denne modellen til å generere satsvise prognoser på slutten av prosedyren.

  1. Kalibrer en modell og registrer den med MLflow. Følgende eksempelkode bruker MLflow-API-en til å opprette et maskinlæringseksperiment og starte en MLflow-kjøring for en logistikkregresjonsmodell for scikit-learn. Modellversjonen lagres og registreres deretter i Microsoft Fabric-registeret. Se hvordan du lærer opp modeller med scikit-learn for å lære mer om opplæringsmodeller og hvordan du sporer eksperimenter selv.

    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. Last inn testdata som spark-dataramme. Hvis du vil generere satsvise prognoser ved hjelp av modellen som er kalibrert i forrige trinn, må du teste data i form av en Spark DataFrame. Du kan erstatte verdien for variabelen 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. Opprett et MLFlowTransformer objekt for å laste inn modellen for utheving. Hvis du vil opprette et MLFlowTransformer objekt for generering av satsvise prognoser, må du gjøre følgende:

    • angi hvilke kolonner fra test DataFrame du trenger som modellinndata (i dette tilfellet alle)
    • velg et navn for den nye utdatakolonnen (i dette tilfellet ), predictionsog
    • oppgi riktig modellnavn og modellversjon for generering av disse prognosene.

    Hvis du bruker din egen modell, kan du erstatte verdiene for inndatakolonnene, navnet på utdatakolonnen, modellnavnet og modellversjonen.

    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. Generer prognoser ved hjelp av PROGNOSE-funksjonen. Hvis du vil aktivere PREDICT-funksjonen, kan du bruke Transformer-API-en, Spark SQL-API-en eller en brukerdefinert PySpark-funksjon (UDF). Avsnittene nedenfor viser hvordan du genererer satsvise prognoser med testdataene og modellen som er definert i de forrige trinnene, ved hjelp av de ulike metodene for å aktivere PROGNOSE.

FORUTSI med Transformer-API-en

Følgende kode aktiverer PREDICT-funksjonen med Transformer-API-en. Hvis du har brukt din egen modell, kan du erstatte verdiene 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()

FORUTSI med Spark SQL-API-en

Følgende kode aktiverer PREDICT-funksjonen med Spark SQL-API-en. Hvis du har brukt din egen modell, kan du erstatte verdiene for model_name, model_versionog features med modellnavn, modellversjon og funksjonskolonner.

Obs!

Bruk av Spark SQL-API-en til å generere prognoser krever fremdeles at du oppretter et MLFlowTransformer objekt (som i trinn 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()

FORUTSI med en brukerdefinert funksjon

Følgende kode aktiverer PREDICT-funksjonen med en PySpark UDF. Hvis du har brukt din egen modell, kan du erstatte verdiene for modellen og funksjonene.

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

Generer FORUTSI-kode fra elementsiden for en modell

Fra elementsiden for en modell kan du velge ett av følgende alternativer for å begynne å generere satsvise prognoser for en bestemt modellversjon med PROGNOSE.

  • Bruk en veiledet brukergrensesnittopplevelse til å generere PROGNOSE-kode for deg
  • Kopiere en kodemal til en notatblokk og tilpasse parameterne selv

Bruke en veiledet brukergrensesnittopplevelse

Den veiledede brukergrensesnittopplevelsen veileder deg gjennom trinnene for å velge kildedata for poengberegning, tilordne dataene riktig til modellens inndata, angi målet for modellens utdata og opprette en notatblokk som bruker PROGNOSE til å generere og lagre prognoseresultater.

Hvis du vil bruke veiledet opplevelse,

  1. Gå til elementsiden for en gitt modellversjon.

  2. Velg Bruk denne modellen i veiviseren fra rullegardinlisten Bruk modell .

    Skjermbilde av ledeteksten om å bruke en modell fra elementsiden.

    Utvalget åpner vinduet Bruk modellprognoser i trinnet Velg inndatatabell.

  3. Velg en inndatatabell fra en av Lakehouses i gjeldende arbeidsområde.

    Skjermbilde av trinnet for å velge en inndatatabell for modellprognoser.

  4. Velg Neste for å gå til trinnet Tilordne inndatakolonner.

  5. Tilordne kolonnenavn fra kildetabellen til modellens inndatafelt, som er hentet fra modellens signatur. Du må angi en inndatakolonne for alle de nødvendige feltene i modellen. Datatypene for kildekolonnene må også samsvare med modellens forventede datatyper.

    Tips

    Veiviseren forhåndsutfyller denne tilordningen hvis navnene på inndatatabellkolonnene samsvarer med kolonnenavnene som er logget i modellsignaturen.

    Skjermbilde av trinnet for å tilordne inndatakolonner for modellprognoser.

  6. Velg Neste for å gå til trinnet Opprett utdatatabell.

  7. Angi et navn for en ny tabell i det valgte Lakehouse for gjeldende arbeidsområde. Denne utdatatabellen lagrer modellens inndataverdier med prognoseverdiene tilføyd. Som standard opprettes utdatatabellen i samme Lakehouse som inndatatabellen, men alternativet for å endre målet Lakehouse er også tilgjengelig.

    Skjermbilde av trinnet for å opprette en utdatatabell for modellprognoser.

  8. Velg Neste for å gå til trinnet Tilordne utdatakolonner.

  9. Bruk de angitte tekstfeltene til å gi navn til kolonnen(e) i utdatatabellen som lagrer modellens prognoser.

    Skjermbilde av trinnet for å tilordne utdatakolonner for modellprognoser.

  10. Velg Neste for å gå til «Konfigurer notatblokk»-trinnet.

  11. Angi et navn for en ny notatblokk som skal kjøre den genererte PREDICT-koden. Veiviseren viser en forhåndsvisning av den genererte koden i dette trinnet. Du kan kopiere koden til utklippstavlen og lime den inn i en eksisterende notatblokk hvis du foretrekker det.

    Skjermbilde av trinnet for å konfigurere en notatblokk for modellprognoser.

  12. Velg Neste for å gå til trinnet Se gjennom og fullfør.

  13. Se gjennom detaljene på sammendragssiden, og velg Opprett notatblokk for å legge til den nye notatblokken med den genererte koden i arbeidsområdet. Du blir omdirigert direkte til notatblokken, der du kan kjøre koden for å generere og lagre prognoser.

    Skjermbilde av gjennomgangs- og slutt-trinnet for modellprognoser.

Bruke en kodemal som kan tilpasses

Slik bruker du en kodemal til å generere satsvise prognoser:

  1. Gå til elementsiden for en gitt modellversjon.
  2. Velg Kopier kode som skal brukes fra rullegardinlisten Bruk modell . Med utvalget kan du kopiere en kodemal som kan tilpasses.

Du kan lime inn denne kodemalen i en notatblokk for å generere satsvise prognoser med modellen. Hvis du vil kjøre kodemalen, må du erstatte følgende verdier manuelt:

  • <INPUT_TABLE>: Filbanen for tabellen som skal gi inndata til modellen
  • <INPUT_COLS>: En matrise med kolonnenavn fra inndatatabellen som skal mates til modellen
  • <OUTPUT_COLS>: Et navn på en ny kolonne i utdatatabellen som lagrer prognoser
  • <MODEL_NAME>: Navnet på modellen som skal brukes for generering av prognoser
  • <MODEL_VERSION>: Versjonen av modellen som skal brukes til å generere prognoser
  • <OUTPUT_TABLE>: Filbanen for tabellen som lagrer prognosene

Skjermbilde av kopieringskodemalen for modellprognoser.

import mlflow 
from synapse.ml.predict import MLFlowTransformer 
 
df = spark.read.format("delta").load( 
    <INPUT_TABLE> 
) 
 
model = MLFlowTransformer( 
    inputCols=<INPUT_COLS>, 
    outputCol=<OUTPUT_COLS>, 
    modelName=<MODEL_NAME>, 
    modelVersion=<MODEL_VERSION> 
) 
df = model.transform(df) 
 
df.write.format('delta').mode("overwrite").save( 
    <OUTPUT_TABLE> 
)  

Neste trinn