Frågeserverslutpunkter för anpassade modeller
I den här artikeln lär du dig hur du formaterar bedömningsbegäranden för din betjänade modell och hur du skickar dessa begäranden till den modell som betjänar slutpunkten. Vägledningen är relevant för att hantera anpassade modeller, som Databricks definierar som traditionella ML-modeller eller anpassade Python-modeller som paketeras i MLflow-format. De kan registreras antingen i Unity Catalog eller i arbetsytans modellregister. Exempel är scikit-learn, XGBoost, PyTorch och Hugging Ansiktstransformatormodeller. Mer information om den här funktionen och modellkategorier som stöds finns i Modellhantering med Azure Databricks .
Frågebegäranden för generativa AI- och LLM-arbetsbelastningar finns i Fråga efter generativa AI-modeller.
Krav
- En modell som betjänar slutpunkten.
- För MLflow Deployment SDK krävs MLflow 2.9 eller senare.
- Bedömningsbegäran i ett godkänt format.
- Om du vill skicka en bedömningsbegäran via REST API eller MLflow Deployment SDK måste du ha en Databricks API-token.
Viktigt!
Som bästa säkerhet för produktionsscenarier rekommenderar Databricks att du använder OAuth-token från dator till dator för autentisering under produktion.
För testning och utveckling rekommenderar Databricks att du använder en personlig åtkomsttoken som tillhör tjänstens huvudnamn i stället för arbetsyteanvändare. Information om hur du skapar token för tjänstens huvudnamn finns i Hantera token för tjänstens huvudnamn.
Frågemetoder och exempel
Mosaic AI Model Serving innehåller följande alternativ för att skicka bedömningsbegäranden till hanterade modeller:
Metod | Details |
---|---|
Serveringsgränssnitt | Välj Frågeslutpunkt från sidan Serveringsslutpunkt på databricks-arbetsytan. Infoga indata för JSON-formatmodellen och klicka på Skicka begäran. Om modellen har ett indataexempel loggat använder du Visa exempel för att läsa in det. |
REST-API | Anropa och fråga modellen med hjälp av REST-API:et. Mer information finns i POST /serving-endpoints/{name}/invocations . Information om bedömning av begäranden till slutpunkter som betjänar flera modeller finns i Fråga efter enskilda modeller bakom en slutpunkt. |
SDK för MLflow-distributioner | Använd SDK:s predict()-funktion för MLflow Deployments för att fråga modellen. |
SQL-funktion | Anropa modellinferens direkt från SQL med hjälp av ai_query SQL-funktionen. Se Fråga en hanterad modell med ai_query(). |
Pandas DataFrame-bedömningsexempel
I följande exempel förutsätts en MODEL_VERSION_URI
like https://<databricks-instance>/model/iris-classifier/Production/invocations
, där <databricks-instance>
är namnet på din Databricks-instans och en Databricks REST API-token med namnet DATABRICKS_API_TOKEN
.
Se Bedömningsformat som stöds.
REST-API
Poängsätt en modell som accepterar dataramens delade indataformat.
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]]
}]
}'
Poängsätta en modell som accepterar tensor-indata. Tensor-indata ska formateras enligt beskrivningen i TensorFlow Servings API-dokumentation.
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]]}'
SDK för MLflow-distributioner
Viktigt!
I följande exempel används API:et predict()
från MLflow Deployments SDK.
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
Viktigt!
I följande exempel används den inbyggda SQL-funktionen ai_query. Den här funktionen är offentlig förhandsversion och definitionen kan ändras. Se Fråga en hanterad modell med ai_query().
I följande exempel frågar modellen bakom sentiment-analysis
slutpunkten med datauppsättningen text
och anger returtypen för begäran.
SELECT text, ai_query(
"sentiment-analysis",
text,
returnType => "STRUCT<label:STRING, score:DOUBLE>"
) AS predict
FROM
catalog.schema.customer_reviews
Power BI
Du kan poängsätta en datauppsättning i Power BI Desktop med hjälp av följande steg:
Öppna datauppsättningen som du vill poängsätta.
Gå till Transformera data.
Högerklicka i den vänstra panelen och välj Skapa ny fråga.
Gå till Visa > Avancerad redigerare.
Ersätt frågetexten med kodfragmentet nedan när du har fyllt i en lämplig
DATABRICKS_API_TOKEN
ochMODEL_VERSION_URI
.(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
Namnge frågan med önskat modellnamn.
Öppna den avancerade frågeredigeraren för datamängden och tillämpa modellfunktionen.
Exempel på Tensor-indata
I följande exempel poängsättas en modell som accepterar tensor-indata. Tensor-indata ska formateras enligt beskrivningen i TensorFlow Servings API-dokument. Det här exemplet förutsätter en MODEL_VERSION_URI
like , där <databricks-instance>
är namnet på din Databricks-instans och en Databricks REST API-token med namnet DATABRICKS_API_TOKEN
https://<databricks-instance>/model/iris-classifier/Production/invocations
.
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]]}'
Bedömningsformat som stöds
För anpassade modeller har modellservern stöd för bedömningsbegäranden i Pandas DataFrame- eller Tensor-indata.
Pandas DataFrame
Begäranden ska skickas genom att skapa en JSON-serialiserad Pandas DataFrame med en av de nycklar som stöds och ett JSON-objekt som motsvarar indataformatet.
(Rekommenderas)
dataframe_split
formatet är en JSON-serialiserad Pandas DataFrame i orienteringensplit
.{ "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
är JSON-serialiserad Pandas DataFrame i orienteringenrecords
.Kommentar
Det här formatet garanterar inte att kolumnordningen bevaras och
split
formatet föredras framförrecords
formatet.{ "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 } ] }
Svaret från slutpunkten innehåller utdata från din modell, serialiserade med JSON, inlindade i en predictions
nyckel.
{
"predictions": [0,1,1,1,0]
}
Tensor-indata
När din modell förväntar sig tensorer, till exempel en TensorFlow- eller Pytorch-modell, finns det två formatalternativ som stöds för att skicka begäranden: instances
och inputs
.
Om du har flera namngivna tensorer per rad måste du ha en av varje tensor för varje rad.
instances
är ett tensors-baserat format som accepterar tensorer i radformat. Använd det här formatet om alla indata tensorer har samma 0:e dimension. Konceptuellt kan varje tensor i instanslistan kopplas till de andra tensorerna med samma namn i resten av listan för att konstruera den fullständiga indata tensorn för modellen, vilket bara skulle vara möjligt om alla tensorer har samma 0:e dimension.{"instances": [ 1, 2, 3 ]}
I följande exempel visas hur du anger flera namngivna tensorer.
{ "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
skicka frågor med tensorer i kolumnformat. Den här begäran skiljer sig eftersom det faktiskt finns ett annat antal tensor-instanser avt2
(3) änt1
ocht3
, så det går inte att representera dessa indata iinstances
formatet.{ "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]]] } }
Svaret från slutpunkten är i följande format.
{
"predictions": [0,1,1,1,0]
}
Notebook-exempel
I följande notebook-fil finns ett exempel på hur du testar din modellserveringsslutpunkt med en Python-modell: