Bewertung von Machine Learning-Modellen mit PREDICT in Microsoft Fabric
Microsoft Fabric ermöglicht Benutzer*innen die Operationalisierung von Machine Learning-Modellen mit einer skalierbaren Funktion namens PREDICT, die die Batchbewertung in jeder Compute-Engine unterstützt. Benutzer können Batchvorhersagen direkt über ein Microsoft Fabric-Notebook oder die Elementseite eines bestimmten ML-Modells generieren.
In diesem Artikel wird erläutert, wie Sie PREDICT auf beide Arten anwenden können, unabhängig davon, ob Sie Code selbst schreiben oder eine Benutzeroberfläche mit Anleitung verwenden, um die Batchbewertung für Sie zu verarbeiten.
Voraussetzungen
Erwerben Sie ein Microsoft Fabric-Abonnement. Registrieren Sie sich alternativ für eine kostenlose Microsoft Fabric-Testversion.
Melden Sie sich bei Microsoft Fabric an.
Wechseln Sie mithilfe des Umschalters für die Benutzeroberfläche auf der linken Seite Ihrer Startseite zur Synapse Data Science-Umgebung.
Begrenzungen
- Die PREDICT-Funktion wird derzeit für eine begrenzte Anzahl von ML-Modellvarianten unterstützt, darunter:
- PyTorch
- Sklearn
- Spark
- TensorFlow
- ONNX
- XGBoost
- LightGBM
- CatBoost
- Statsmodels
- Prophet
- Keras
- PREDICT erfordert, dass Modelle im MLflow-Format mit aufgefüllten Signaturen gespeichert werden.
- PREDICT unterstützt keine ML-Modelle mit MultiTensor-Eingängen oder -Ausgängen.
Aufrufen von PREDICT über ein Notebook
PREDICT unterstützt MLflow-gepackte Modelle in der Microsoft Fabric-Registrierung. Wenn sich in Ihrem Arbeitsbereich bereits ein trainiertes und registriertes ML-Modell befindet, können Sie mit Schritt 2 fortfahren. Andernfalls enthält Schritt 1 Beispielcode, der Sie durch das Trainieren eines logistischen Regressionsmodells führt. Sie können dieses Modell verwenden, um Batchvorhersagen am Ende der Prozedur zu generieren.
Trainieren und Registrieren eines ML-Modells bei MLflow. Im folgenden Beispielcode wird die MLflow-API verwendet, um ein Machine Learning-Experiment zu erstellen und eine MLflow-Ausführung für ein logistisches scikit-learn-Regressionsmodell zu starten. Die Modellversion wird dann gespeichert und in der Microsoft Fabric-Registrierung registriert. Weitere Informationen zum Trainieren von Modellen und Nachverfolgen eigener Experimente finden Sie unter Trainieren von ML-Modellen mit scikit-learn.
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 von Testdaten als Spark-Dataframe: Um Batchvorhersagen mit dem im vorherigen Schritt trainierten ML-Modell zu generieren, benötigen Sie Testdaten in Form eines Spark-Dataframe. Sie können den Wert für die
test
-Variable im folgenden Code durch Ihre eigenen Daten ersetzen.# You can substitute "test" below with your own data test = spark.createDataFrame(data.frame.drop(['target'], axis=1))
Erstellen eines
MLFlowTransformer
-Objekts zum Laden des ML-Modells für Rückschlüsse. Um einMLFlowTransformer
-Objekt zum Generieren von Batchvorhersagen zu erstellen, müssen Sie die folgenden Aktionen ausführen:- Angeben, welche Spalten aus dem
test
-Dataframe Sie als Modelleingaben benötigen (in diesem Fall alle) - Auswählen eines Namens für die neue Ausgabespalte (in diesem Fall
predictions
) - Angeben des richtigen Modellnamens und der richtigen Modellversion zum Generieren dieser Vorhersagen
Wenn Sie Ihr eigenes ML-Modell verwenden, ersetzen Sie die Werte für die Eingabespalten, den Namen der Ausgabespalte, den Modellnamen und die Modellversion.
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 )
- Angeben, welche Spalten aus dem
Generieren von Vorhersagen mithilfe der PREDICT-Funktion: Zum Aufrufen der PREDICT-Funktion können Sie die Transformer-API, die Spark SQL-API oder eine benutzerdefinierte PySpark-Funktion (User-defined Function, UDF) verwenden. In den folgenden Abschnitten wird gezeigt, wie mithilfe der verschiedenen Methoden zum Aufrufen von PREDICT Batchvorhersagen mit den in den vorherigen Schritten definierten Testdaten und dem ML-Modell generiert werden.
PREDICT mit der Transformer-API
Der folgende Code ruft die PREDICT-Funktion mit der Transformer-API auf. Wenn Sie Ihr eigenes ML-Modell verwendet haben, ersetzen Sie die Werte für das Modell und die Testdaten.
# You can substitute "model" and "test" below with values
# for your own model and test data
model.transform(test).show()
PREDICT mit der Spark-SQL-API
Der folgende Code ruft die PREDICT-Funktion mit der Spark-SQL-API auf. Wenn Sie Ihr eigenes ML-Modell verwendet haben, ersetzen Sie die Werte für model_name
, model_version
und features
durch den Modellnamen, die Modellversion und die Featurespalten.
Hinweis
Wenn Sie die Spark-SQL-API zum Generieren von Vorhersagen verwenden, müssen Sie weiterhin ein MLFlowTransformer
-Objekt erstellen (wie in Schritt 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 mit einer benutzerdefinierten Funktion
Der folgende Code ruft die PREDICT-Funktion mit einer benutzerdefinierten PySpark-Funktion auf. Wenn Sie Ihr eigenes ML-Modell verwendet haben, ersetzen Sie die Werte für das Modell und die Features.
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()
Generieren von PREDICT-Code über die Elementseite eines ML-Modells
Auf der Elementseite eines beliebigen ML-Modells können Sie eine der folgenden Optionen auswählen, um mit PREDICT Batchvorhersagen für eine bestimmte Modellversion zu generieren.
- Verwenden einer Benutzeroberfläche mit Anleitung zum Generieren von PREDICT-Code
- Kopieren einer Codevorlage in ein Notebook und Anpassen der Parameter
Verwenden einer Benutzeroberfläche mit Anleitung
Die geführte Benutzeroberfläche führt Sie durch die folgenden Schritte:
- Auswählen von Quelldaten für die Bewertung
- Zuordnen der Daten zu den Eingaben Ihres ML-Modells
- Angeben des Ziels für die Ausgaben Ihres Modells
- Ein Notebook erstellen, das PREDICT verwendet, um Vorhersageergebnisse zu erzeugen und zu speichern
Gehen Sie wie folgt vor, um die Benutzeroberfläche mit Anleitung zu nutzen:
Navigieren Sie zur Elementseite für eine bestimmte ML-Modellversion.
Wählen Sie in der Dropdownliste Diese Version anwenden die Option Dieses Modell im Assistenten anwenden aus.
Durch die Auswahl wird das Fenster „ML-Modellvorhersagen anwenden“ im Schritt „Eingabetabelle auswählen“ geöffnet.
Wählen Sie eine Eingabetabelle aus einem der Lakehouses in Ihrem aktuellen Arbeitsbereich aus.
Klicken Sie auf Weiter, um zum Schritt „Eingabespalten zuordnen“ zu wechseln.
Ordnen Sie Spaltennamen aus der Quelltabelle den Eingabefeldern des ML-Modells zu, die aus der Signatur des Modells abgerufen wurden. Sie müssen eine Eingabespalte für alle erforderlichen Felder des Modells bereitstellen. Außerdem müssen die Datentypen für die Quellspalten mit den erwarteten Datentypen des Modells übereinstimmen.
Tipp
Der Assistent füllt diese Zuordnung vorab auf, wenn die Spaltennamen der Eingabetabelle mit den Spaltennamen übereinstimmen, die in der ML-Modellsignatur protokolliert wurden.
Klicken Sie auf Weiter, um zum Schritt „Ausgabetabelle erstellen“ zu wechseln.
Geben Sie einen Namen für eine neue Tabelle im ausgewählten Lakehouse Ihres aktuellen Arbeitsbereichs an. In dieser Ausgabetabelle werden die Eingabewerte Ihres ML-Modells mit den angefügten Vorhersagewerten gespeichert. Standardmäßig ist die Ausgabetabelle im selben Lakehouse wie die Eingabetabelle erstellt, aber die Option zum Ändern des Ziel-Lakehouse ist ebenfalls verfügbar.
Klicken Sie auf Weiter, um zum Schritt „Ausgabespalten zuordnen“ zu wechseln.
Verwenden Sie die bereitgestellten Textfelder, um die Spalten in der Ausgabetabelle zu benennen, in der die Vorhersagen des ML-Modells gespeichert werden.
Klicken Sie auf Weiter, um zum Schritt „Notebook konfigurieren“ zu wechseln.
Geben Sie einen Namen für ein neues Notebook an, in dem der generierte PREDICT-Code ausgeführt wird. Der Assistent zeigt in diesem Schritt eine Vorschau des generierten Codes an. Sie können den Code in Ihre Zwischenablage kopieren und ihn bei Bedarf in ein vorhandenes Notebook einfügen.
Klicken Sie auf Weiter, um zum Schritt „Überprüfen und abschließen“ zu wechseln.
Überprüfen Sie die Details auf der Zusammenfassungsseite, und wählen Sie Notebook erstellen aus, um Ihrem Arbeitsbereich das neue Notebook mit dem generierten Code hinzuzufügen. Sie werden direkt zu diesem Notebook weitergeleitet, wo Sie den Code ausführen können, um Vorhersagen zu generieren und zu speichern.
Verwenden einer anpassbaren Codevorlage
Gehen Sie wie folgt vor, um eine Codevorlage zum Generieren von Batchvorhersagen zu verwenden:
- Navigieren Sie zur Elementseite für eine bestimmte ML-Modellversion.
- Wählen Sie in der Dropdownliste Diese Version anwenden die Option Code zum Anwenden kopieren aus. Durch die Auswahl können Sie eine anpassbare Codevorlage kopieren.
Sie können diese Codevorlage in ein Notebook einfügen, um Batchvorhersagen mit Ihrem ML-Modell zu generieren. Um die Codevorlage erfolgreich auszuführen, müssen Sie die folgenden Werte manuell ersetzen:
<INPUT_TABLE>
: Dies ist der Dateipfad für die Tabelle, die Eingaben für das ML-Modell bereitstellt<INPUT_COLS>
: Dies ist ein Array von Spaltennamen aus der Eingabetabelle, das in das ML-Modell eingefügt wird<OUTPUT_COLS>
: Dies ist ein Name für eine neue Spalte in der Ausgabetabelle, in der Vorhersagen gespeichert werden<MODEL_NAME>
: Dies ist der Name des ML-Modells, das zum Generieren von Vorhersagen verwendet werden soll<MODEL_VERSION>
: Dies ist die Version des ML-Modells, das zum Generieren von Vorhersagen verwendet werden soll<OUTPUT_TABLE>
: Dies ist der Dateipfad für die Tabelle, in der die Vorhersagen gespeichert werden
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
)