Dela via


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

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:

  1. Öppna datauppsättningen som du vill poängsätta.

  2. Gå till Transformera data.

  3. Högerklicka i den vänstra panelen och välj Skapa ny fråga.

  4. Gå till Visa > Avancerad redigerare.

  5. Ersätt frågetexten med kodfragmentet nedan när du har fyllt i en lämplig DATABRICKS_API_TOKEN och MODEL_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
    
  6. Namnge frågan med önskat modellnamn.

  7. Ö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_TOKENhttps://<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 orienteringen split .

    {
      "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 orienteringen records .

    Kommentar

    Det här formatet garanterar inte att kolumnordningen bevaras och split formatet föredras framför records 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 av t2 (3) än t1 och t3, så det går inte att representera dessa indata i instances 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:

Testmodell– serveringsslutpunktsanteckningsbok

Hämta notebook-fil

Ytterligare resurser