Abfragen von Bereitstellungsendpunkten für benutzerdefinierte Modelle
In diesem Artikel erfahren Sie, wie Sie Bewertungsanforderungen für Ihr bereitgestelltes Modell formatieren und diese Anforderungen an den Modellbereitstellungsendpunkt senden. Der Leitfaden bezieht sich auf die Bereitstellung benutzerdefinierter Modelle, die Databricks als herkömmliche ML-Modelle definiert, oder benutzerdefinierte Python-Modelle, die im MLflow-Format gepackt sind. Sie können in Unity Catalog oder in der Arbeitsbereichsmodellregistrierung registriert werden. Beispiele sind scikit-learn-, XGBoost-, PyTorch- und Hugging Face-Transformationsmodelle. Weitere Informationen zu diesen Funktionen und unterstützten Modellkategorien finden Sie unter Deploy models using Mosaic AI Model Serving.
Abfrageanforderungen für generative KI und LLM-Workloads finden Sie unter Abfragen von Basismodellen.
Anforderungen
- Ein Modellbereitstellungsendpunkt.
- Für das MLflow Deployment SDK ist MLflow 2.9 oder höher erforderlich.
- Bewertungsanforderung in einem akzeptierten Format.
- Sie müssen über Databricks-API-Token verfügen, um eine Bewertungsanforderung über die REST-API oder das MLflow Deployment SDK zu senden.
Wichtig
Als bewährte Sicherheitsmethode für Produktionsszenarien empfiehlt Databricks, Computer-zu-Computer-OAuth-Token für die Authentifizierung während der Produktion zu verwenden.
Für die Test- und Entwicklungsphase empfiehlt Databricks die Verwendung eines persönlichen Zugriffstokens, das Dienstprinzipalen anstelle von Arbeitsbereichsbenutzern gehört. Informationen zum Erstellen von Token für Dienstprinzipale finden Sie unter Verwalten von Token für einen Dienstprinzipal.
Abfragen von Methoden und Beispielen
Mosaic AI Model Serving bietet die folgenden Optionen zum Senden von Bewertungsanforderungen an bereitgestellte Modelle:
Methode | Details |
---|---|
Serving-Benutzeroberfläche | Wählen Sie in Ihrem Databricks-Arbeitsbereich auf der Seite Bereitstellungsendpunkt die Option Endpunkt abfragen aus. Fügen Sie Eingabedaten des JSON-Formatmodells ein, und klicken Sie auf Anforderung übermitteln. Wenn das Modell ein Eingabebeispiel protokolliert hat, verwenden Sie Beispiel anzeigen, um es zu laden. |
SQL-Funktion | Rufen Sie den Modellrückschluss direkt aus SQL mithilfe der SQL-Funktion „ai_query “ auf. Weitere Informationen finden Sie unter Abfragen eines bereitgestellten Modells mit ai_query. |
REST-API | Rufen Sie das Modell mithilfe der REST-API auf, und fragen Sie es ab. Details finden Sie unter POST /serving-endpoints/{name}/invocations. Informationen zum Bewerten von Anforderungen an Endpunkte, die mehreren Modellen dienen, finden Sie unter Abfragen einzelner Modelle hinter einem Endpunkt. |
MLflow Deployments SDK | Verwenden Sie die Funktion predict() des MLflow Deployments SDK, um das Modell abzufragen. |
Pandas DataFrame-Bewertungsbeispiel
Im folgenden Beispiel wird eine MODEL_VERSION_URI
wie https://<databricks-instance>/model/iris-classifier/Production/invocations
angenommen, wobei <databricks-instance>
der Name Ihrer Databricks-Instanz ist und ein Databricks-REST-API-Token DATABRICKS_API_TOKEN
aufgerufen hat.
Siehe Unterstützte Bewertungsformate.
REST-API
Ein Modell bewerten, das das Eingabeformat „split input“ akzeptiert:
curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
-H 'Content-Type: application/json' \
-d '{"dataframe_split": [{
"columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"],
"data": [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]]
}]
}'
Hier wird ein Modell bewertet, das Tensoreingaben akzeptiert. Tensoreingaben sollten wie in der Dokumentation zu TensorFlow-Bereitstellungs-APIs beschrieben formatiert werden.
curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
-H 'Content-Type: application/json' \
-d '{"inputs": [[5.1, 3.5, 1.4, 0.2]]}'
MLflow Deployments SDK
Wichtig
Im folgenden Beispiel wird die predict()
-API aus dem MLflow Deployments SDK verwendet.
import mlflow.deployments
export DATABRICKS_HOST="https://<workspace_host>.databricks.com"
export DATABRICKS_TOKEN="dapi-your-databricks-token"
client = mlflow.deployments.get_deploy_client("databricks")
response = client.predict(
endpoint="test-model-endpoint",
inputs={"dataframe_split": {
"index": [0, 1],
"columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"],
"data": [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]]
}
}
)
SQL
Wichtig
Im folgenden Beispiel wird die integrierte SQL-Funktion ai_query verwendet. Diese Funktion befindet sich in der Public Preview, und die Definition kann sich ändern. Weitere Informationen finden Sie unter Abfragen eines bereitgestellten Modells mit ai_query.
Das folgende Beispiel fragt das Modell hinter dem Endpunkt sentiment-analysis
mit dem Dataset text
ab und gibt den Rückgabetyp der Anforderung an.
SELECT text, ai_query(
"sentiment-analysis",
text,
returnType => "STRUCT<label:STRING, score:DOUBLE>"
) AS predict
FROM
catalog.schema.customer_reviews
PowerBI
Sie können ein Dataset in Power BI Desktop wie folgt bewerten:
Öffnen Sie das Dataset, das Sie bewerten möchten.
Wechseln Sie zu „Daten transformieren“.
Klicken Sie mit der rechten Maustaste in den linken Bereich, und wählen Sie Create New Query (Neue Abfrage erstellen) aus.
Wechseln Sie zu Ansicht >Erweiterter Editor.
Ersetzen Sie den Abfragetext durch den folgenden Codeschnipsel, nachdem Sie ein entsprechendes
DATABRICKS_API_TOKEN
und einen entsprechendenMODEL_VERSION_URI
angegeben haben.(dataset as table ) as table => let call_predict = (dataset as table ) as list => let apiToken = DATABRICKS_API_TOKEN, modelUri = MODEL_VERSION_URI, responseList = Json.Document(Web.Contents(modelUri, [ Headers = [ #"Content-Type" = "application/json", #"Authorization" = Text.Format("Bearer #{0}", {apiToken}) ], Content = {"dataframe_records": Json.FromValue(dataset)} ] )) in responseList, predictionList = List.Combine(List.Transform(Table.Split(dataset, 256), (x) => call_predict(x))), predictionsTable = Table.FromList(predictionList, (x) => {x}, {"Prediction"}), datasetWithPrediction = Table.Join( Table.AddIndexColumn(predictionsTable, "index"), "index", Table.AddIndexColumn(dataset, "index"), "index") in datasetWithPrediction
Geben Sie der Abfrage den gewünschten Modellnamen.
Öffnen Sie den erweiterten Abfrage-Editor für Ihr Dataset, und wenden Sie die Modellfunktion an.
Tensoreingabebeispiel
Im folgenden Beispiel wird ein Modell bewertet, das Tensoreingaben akzeptiert. Tensoreingaben sollten wie in der Dokumentation zu TensorFlow-Bereitstellungs-APIs beschrieben formatiert werden. In diesem Beispiel wird eine MODEL_VERSION_URI
wie https://<databricks-instance>/model/iris-classifier/Production/invocations
angenommen, wobei <databricks-instance>
der Name Ihrer Databricks-Instanzist und ein Databricks-REST-API-Token DATABRICKS_API_TOKEN
aufgerufen hat.
curl -X POST -u token:$DATABRICKS_API_TOKEN $MODEL_VERSION_URI \
-H 'Content-Type: application/json' \
-d '{"inputs": [[5.1, 3.5, 1.4, 0.2]]}'
Unterstützte Bewertungsformate
Für benutzerdefinierte Modelle unterstützt Model Serving Bewertungsanforderungen in Pandas DataFrame- oder Tensor-Eingaben.
Pandas DataFrame
Zum Senden von Anforderungen muss ein mit JSON serialisierter Pandas DataFrame mit einem der unterstützten Schlüssel und einem dem Eingabeformat entsprechenden JSON-Objekt erstellt werden.
(Empfohlen) Das Format
dataframe_split
ist ein JSON-serialisierter Pandas DataFrame in dersplit
-Ausrichtung.{ "dataframe_split": { "index": [0, 1], "columns": ["sepal length (cm)", "sepal width (cm)", "petal length (cm)", "petal width (cm)"], "data": [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]] } }
dataframe_records
ist ein JSON-serialisierter Pandas DataFrame in derrecords
-Ausrichtung.Hinweis
Dieses Format garantiert nicht die Beibehaltung der Spaltenreihenfolge, und das
split
-Format wird demrecords
-Format vorgezogen.{ "dataframe_records": [ { "sepal length (cm)": 5.1, "sepal width (cm)": 3.5, "petal length (cm)": 1.4, "petal width (cm)": 0.2 }, { "sepal length (cm)": 4.9, "sepal width (cm)": 3, "petal length (cm)": 1.4, "petal width (cm)": 0.2 }, { "sepal length (cm)": 4.7, "sepal width (cm)": 3.2, "petal length (cm)": 1.3, "petal width (cm)": 0.2 } ] }
Die Antwort vom Endpunkt enthält die Ausgabe Ihres Modells, serialisiert mit JSON, umschlossen in einem predictions
-Schlüssel.
{
"predictions": [0,1,1,1,0]
}
Tensoreingabe
Wenn Ihr Modell Tensoren erwartet, z. B. ein TensorFlow- oder Pytorch-Modell, gibt es zwei unterstützte Formatoptionen für das Senden von Anforderungen: instances
und inputs
.
Wenn mehrere benannte Tensoren pro Zeile vorhanden sind, benötigen Sie für jede Zeile jeweils einen der verschiedenen Tensoren.
instances
: Ein tensorsbasiertes Format, das Tensoren im Zeilenformat akzeptiert. Verwenden Sie dieses Format, wenn alle Eingabetensoren die gleiche nullte Dimension aufweisen. Konzeptionell betrachtet könnte jeder Tensor in der Instanzliste mit den anderen Tensoren gleichen Namens in der restlichen Liste verknüpft werden, um den vollständigen Eingabetensor für das Modell zu erstellen, was nur möglich wäre, wenn alle Tensoren die gleiche nullte Dimension haben.{"instances": [ 1, 2, 3 ]}
Das folgende Beispiel zeigt, wie mehrere benannte Tensoren angegeben werden.
{ "instances": [ { "t1": "a", "t2": [1, 2, 3, 4, 5], "t3": [[1, 2], [3, 4], [5, 6]] }, { "t1": "b", "t2": [6, 7, 8, 9, 10], "t3": [[7, 8], [9, 10], [11, 12]] } ] }
inputs
: Dient zum Senden von Abfragen mit Tensoren im Spaltenformat. Diese Anforderung ist anders, dat2
über eine andere Anzahl von Tensorinstanzen (3) verfügt alst1
undt3
. Die Eingabe ist daher nicht im Instanzenformat (instances
) darstellbar.{ "inputs": { "t1": ["a", "b"], "t2": [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], "t3": [[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]] } }
Die Antwort vom Endpunkt hat folgendes Format.
{
"predictions": [0,1,1,1,0]
}
Notebook-Beispiel
Im folgenden Notebook finden Sie ein Beispiel dafür, wie Sie Ihren Modellbereitstellungsendpunkt mit einem Python-Modell testen können: