Delen via


Query's uitvoeren op eindpunten voor aangepaste modellen

In dit artikel leert u hoe u scoreaanvragen kunt opmaken voor uw aangeboden model en hoe u deze aanvragen verzendt naar het eindpunt van de modelfunctie. De richtlijnen zijn relevant voor het leveren van aangepaste modellen, die Databricks definieert als traditionele ML-modellen of aangepaste Python-modellen die zijn verpakt in de MLflow-indeling. Ze kunnen worden geregistreerd in Unity Catalog of in het register van het werkruimtemodel. Voorbeelden hiervan zijn scikit-learn-, XGBoost-, PyTorch- en Hugging Face-transformatiemodellen. Zie Model met Azure Databricks voor meer informatie over deze functionaliteit en ondersteunde modelcategorieën.

Zie Query foundation-modellen voor queryaanvragen voor generatieve AI- en LLM-workloads.

Eisen

Belangrijk

Als best practice voor beveiliging voor productiescenario's raadt Databricks u aan om OAuth-tokens voor machine-naar-machine te gebruiken voor verificatie tijdens de productie.

Voor testen en ontwikkelen raadt Databricks aan om een persoonlijk toegangstoken te gebruiken dat hoort bij service-principals in plaats van werkruimtegebruikers. Zie Tokens voor een service-principal beheren om tokens voor service-principals te maken.

Query's uitvoeren op methoden en voorbeelden

Mozaïek AI Model Serving biedt de volgende opties voor het verzenden van scoreaanvragen naar aangeboden modellen:

Methode DETAILS
Gebruikersinterface bedienen Selecteer Een query-eindpunt op de pagina Servereindpunt in uw Databricks-werkruimte. Voeg invoergegevens voor het JSON-model in en klik op Aanvraag verzenden. Als het model een ingevoerde voorbeeld heeft geregistreerd, gebruikt u Voorbeeld weergeven om het te laden.
REST-API Het model aanroepen en er query's op uitvoeren met behulp van de REST API. Zie POST /serving-endpoints/{name}/aanroepen voor meer informatie. Zie Afzonderlijke modellen achter een eindpunt opvragen voor scoreaanvragen voor eindpunten die meerdere modellen bedienen.
MLflow Deployments SDK Gebruik de predict()-functie van de MLflow Deployments SDK om een query uit te voeren op het model.
SQL-functie Roep modeldeductie rechtstreeks vanuit SQL aan met behulp van de ai_query SQL-functie. Zie Query uitvoeren op een geleverd model met ai_query().

Voorbeeld van scoren van Pandas DataFrame

In het volgende voorbeeld wordt ervan uitgegaan dat MODEL_VERSION_URIhttps://<databricks-instance>/model/iris-classifier/Production/invocationsdit <databricks-instance> de naam is van uw Databricks-exemplaar en een Databricks REST API-token met de naam DATABRICKS_API_TOKEN.

Zie Ondersteunde score-indelingen.

REST-API

Score a model accepting dataframe split input format.

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]]
    }]
  }'

Score een model dat tensor-invoer accepteert. Tensor-invoer moet worden opgemaakt zoals beschreven in de API-documentatie van TensorFlow Serving.

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

Belangrijk

In het volgende voorbeeld wordt de predict() API van de MLflow Deployments SDK gebruikt.


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

Belangrijk

In het volgende voorbeeld wordt de ingebouwde SQL-functie ai_query gebruikt. Deze functie is openbare preview en de definitie kan veranderen. Zie Query uitvoeren op een geleverd model met ai_query().

In het volgende voorbeeld wordt het model achter het sentiment-analysis eindpunt opgevraagd met de text gegevensset en wordt het retourtype van de aanvraag opgegeven.

SELECT text, ai_query(
    "sentiment-analysis",
    text,
    returnType => "STRUCT<label:STRING, score:DOUBLE>"
  ) AS predict
FROM
  catalog.schema.customer_reviews

Power BI

U kunt een gegevensset in Power BI Desktop scoren met behulp van de volgende stappen:

  1. Open de gegevensset die u wilt scoren.

  2. Ga naar Gegevens transformeren.

  3. Klik met de rechtermuisknop in het linkerdeelvenster en selecteer Nieuwe query maken.

  4. Ga naar Weergave > Geavanceerde editor.

  5. Vervang de hoofdtekst van de query door het onderstaande codefragment, na het invullen van een geschikte DATABRICKS_API_TOKEN en 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. Geef de query een naam met de gewenste modelnaam.

  7. Open de geavanceerde query-editor voor uw gegevensset en pas de modelfunctie toe.

Voorbeeld van Tensor-invoer

In het volgende voorbeeld wordt een model gescored dat tensor-invoer accepteert. Tensor-invoer moet worden opgemaakt zoals beschreven in api-documenten van TensorFlow Serving. In dit voorbeeld wordt ervan uitgegaan dat MODEL_VERSION_URIhttps://<databricks-instance>/model/iris-classifier/Production/invocationsdit <databricks-instance> de naam is van uw Databricks-exemplaar en een Databricks REST API-token met de naam DATABRICKS_API_TOKEN.

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]]}'

Ondersteunde score-indelingen

Voor aangepaste modellen ondersteunt Model Serving scoreaanvragen in Pandas DataFrame- of Tensor-invoer.

Pandas DataFrame

Aanvragen moeten worden verzonden door een met JSON geserialiseerd Pandas DataFrame samen te stellen met een van de ondersteunde sleutels en een JSON-object dat overeenkomt met de invoerindeling.

  • (Aanbevolen)dataframe_split -indeling is een Met JSON geserialiseerd Pandas DataFrame in de split afdrukstand.

    {
      "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 is JSON-geserialiseerd Pandas DataFrame in de records afdrukstand.

    Notitie

    Deze indeling garandeert geen behoud van kolomvolgorde en de split indeling heeft de voorkeur boven de records indeling.

    {
      "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
      }
      ]
    }
    

Het antwoord van het eindpunt bevat de uitvoer van uw model, geserialiseerd met JSON, verpakt in een predictions sleutel.

{
  "predictions": [0,1,1,1,0]
}

Tensor-invoer

Wanneer uw model tensors verwacht, zoals een TensorFlow- of Pytorch-model, zijn er twee ondersteunde indelingsopties voor het verzenden van aanvragen: instances en inputs.

Als u meerdere benoemde tensors per rij hebt, moet u een van elke tensor voor elke rij hebben.

  • instances is een op tensors gebaseerde indeling die tensors in rijindeling accepteert. Gebruik deze indeling als alle invoertenors dezelfde dimensie van 0 hebben. Conceptueel gezien kan elke tensor in de lijst met exemplaren worden samengevoegd met de andere tensors van dezelfde naam in de rest van de lijst om de volledige invoertenor voor het model te maken, wat alleen mogelijk zou zijn als alle tensors dezelfde dimensie van 0 tot 0 hebben.

    {"instances": [ 1, 2, 3 ]}
    

    In het volgende voorbeeld ziet u hoe u meerdere benoemde tensors opgeeft.

    {
    "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 query's met tensors verzenden in kolomindeling. Deze aanvraag is anders omdat er eigenlijk een ander aantal tensor-exemplaren van t2 (3) t1 dan en t3, dus het is niet mogelijk om deze invoer in de instances indeling weer te geven.

    {
    "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]]]
    }
    }
    

Het antwoord van het eindpunt heeft de volgende indeling.

{
  "predictions": [0,1,1,1,0]
}

Voorbeeld van notitieblok

Zie het volgende notebook voor een voorbeeld van het testen van uw Model Serving-eindpunt met een Python-model:

Notebook voor eindpunten voor modelservers testen

Notebook downloaden

Aanvullende bronnen