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
Haal een Microsoft Fabric-abonnement op. Of meld u aan voor een gratis proefversie van Microsoft Fabric.
Meld u aan bij Microsoft Fabric.
Gebruik de ervaringswisselaar aan de linkerkant van de startpagina om over te schakelen naar de Synapse-Datawetenschap-ervaring.
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.
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" )
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))
Maak een
MLFlowTransformer
object om het ML-model te laden voor deductie. Als u eenMLFlowTransformer
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 )
- geef op welke kolommen van het
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_version
features
vervangt u de waarden door model_name
de 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,
Ga naar de itempagina voor een bepaalde ML-modelversie.
Selecteer Dit model toepassen in de wizard in de vervolgkeuzelijst Deze versie toepassen.
De selectie opent het venster ML-modelvoorspellingen toepassen in de stap Invoertabel selecteren.
Selecteer een invoertabel uit een van de lakehouses in uw huidige werkruimte.
Selecteer Volgende om naar de stap Invoerkolommen toewijzen te gaan.
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.
Selecteer Volgende om naar de stap Uitvoertabel maken te gaan.
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.
Selecteer Volgende om naar de stap Uitvoerkolommen toewijzen te gaan.
Gebruik de opgegeven tekstvelden om de kolommen in de uitvoertabel een naam te geven waarin de voorspellingen van het ML-model worden opgeslagen.
Selecteer Volgende om naar de stap Notitieblok configureren te gaan.
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.
Selecteer Volgende om naar de stap Controleren en voltooien te gaan.
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.
Een aanpasbare codesjabloon gebruiken
Een codesjabloon gebruiken voor het genereren van batchvoorspellingen:
- Ga naar de itempagina voor een bepaalde ML-modelversie.
- 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
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
)