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
Et Power BI Premium abonnement. Hvis du ikke har en, kan du se Hvordan du kjøper Power BI Premium.
Et Power BI-arbeidsområde med tilordnet Premium-kapasitet. Hvis du ikke har et arbeidsområde, bruker du fremgangsmåten i Opprett et arbeidsområde for å opprette et og tilordne det til en Premium-kapasitet.
Logg på Microsoft Fabric.
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.
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" )
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))
Opprett et
MLFlowTransformer
objekt for å laste inn modellen for utheving. Hvis du vil opprette etMLFlowTransformer
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 ),
predictions
og - 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 )
- angi hvilke kolonner fra
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_version
og 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,
Gå til elementsiden for en gitt modellversjon.
Velg Bruk denne modellen i veiviseren fra rullegardinlisten Bruk modell .
Utvalget åpner vinduet Bruk modellprognoser i trinnet Velg inndatatabell.
Velg en inndatatabell fra en av Lakehouses i gjeldende arbeidsområde.
Velg Neste for å gå til trinnet Tilordne inndatakolonner.
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.
Velg Neste for å gå til trinnet Opprett utdatatabell.
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.
Velg Neste for å gå til trinnet Tilordne utdatakolonner.
Bruk de angitte tekstfeltene til å gi navn til kolonnen(e) i utdatatabellen som lagrer modellens prognoser.
Velg Neste for å gå til «Konfigurer notatblokk»-trinnet.
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.
Velg Neste for å gå til trinnet Se gjennom og fullfør.
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.
Bruke en kodemal som kan tilpasses
Slik bruker du en kodemal til å generere satsvise prognoser:
- Gå til elementsiden for en gitt modellversjon.
- 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
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>
)