Sdílet prostřednictvím


Dotazování obslužných koncových bodů pro vlastní modely

V tomto článku se dozvíte, jak formátovat žádosti o bodování pro obsluhované modely a jak tyto požadavky odeslat do koncového bodu obsluhující model. Pokyny jsou relevantní pro poskytování vlastních modelů, které Databricks definuje jako tradiční modely ML nebo přizpůsobené modely Pythonu zabalené ve formátu MLflow. Zaregistrujte modely v katalogu Unity nebo v registru modelů pracovního prostoru. Mezi příklady patří modely scikit-learn, XGBoost, PyTorch a Hugging Face Transformer. Další informace o této funkci a podporovaných kategoriích modelů najdete v tématu Nasazení modelů s využitím služby Mosaic AI Model Serving.

Dotazy týkající se generativních úloh umělé inteligence a LLM naleznete v tématu Použití základních modelů.

Požadavky

Důležité

Jako osvědčený postup zabezpečení pro produkční scénáře doporučuje Databricks používat stroj-stroj OAuth tokeny pro ověřování během produkce.

Pro účely testování a vývoje doporučuje Databricks místo uživatelů pracovního prostoru používat osobní přístupový token patřící instančním objektům . Pokud chcete vytvořit tokeny pro instanční objekty, přečtěte si téma Správa tokenů instančního objektu.

Metody dotazování a příklady

Platforma Mosaic AI Model Serving poskytuje následující možnosti pro odesílání žádostí o skórování na nasazené modely.

Metoda Podrobnosti
Obsluha uživatelského rozhraní Na stránce koncového bodu služby ve vašem pracovním prostoru Databricks vyberte dotazovací koncový bod. Vložte vstupní data modelu formátu JSON a klikněte na Odeslat požadavek. Pokud má model zaprotokolovaný vstupní příklad, načtěte ho pomocí příkazu Zobrazit příklad .
Funkce SQL Vyvolání odvozování modelu přímo z SQL pomocí ai_query funkce SQL Viz ai_query funkce.
REST API Volání a dotazování modelu pomocí rozhraní REST API Podrobnosti najdete v tématu POST /serving-endpoints/{name}/invocations . Pro vyhodnocení žádostí na koncových bodech, které obsluhují více modelů, viz Dotazování jednotlivých modelů za koncovým bodem.
Sada SDK pro nasazení MLflow K dotazování modelu použijte funkci predict() sady SDK pro nasazení MLflow.

Příklad bodování datového rámce Pandas

Následující příklad předpokládá MODEL_VERSION_URI jako https://<databricks-instance>/model/iris-classifier/Production/invocations, kde <databricks-instance> je název vaší instance Databricksa token rozhraní REST API databricks označovaný jako DATABRICKS_API_TOKEN.

Viz Podporované formáty bodování.

REST API

Vyhodnoťte model přijímající vstupní formát datového rámce ve formě rozdělených bloků.

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

Skórování modelu, který přijímá tenzorové vstupy. Vstupy Tensoru by měly být formátované, jak je popsáno v dokumentaci k rozhraní API služby TensorFlow.

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

Sada SDK pro nasazení MLflow

Důležité

Následující příklad používá predict() rozhraní API ze SDK pro nasazení MLflow.


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

Power BI

Datovou sadu v Power BI Desktopu můžete ohodnocet pomocí následujícího postupu:

  1. Otevřete datovou sadu, kterou chcete ohodnotit.

  2. Přejděte na Transformaci dat.

  3. Klikněte pravým tlačítkem na levý panel a vyberte Vytvořit nový dotaz.

  4. Přejděte do Režimu > Rozšířený editor.

  5. Po vyplnění příslušného DATABRICKS_API_TOKEN a MODEL_VERSION_URI nahraďte text dotazu následujícím fragmentem kódu.

    (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. Pojmenujte dotaz požadovaným názvem modelu.

  7. Otevřete rozšířený editor dotazů pro datovou sadu a použijte funkci modelu.

Příklad vstupu tenzoru

Následující příklad vyhodnocí model, který přijímá vstupy tensoru. Vstupy tenzoru by měly být naformátovány, jak je uvedeno v dokumentaci k API služby TensorFlow. Tento příklad předpokládá, že MODEL_VERSION_URI je https://<databricks-instance>/model/iris-classifier/Production/invocations, kde <databricks-instance> je název vaší instance Databricks, a také token rozhraní REST API Databricks nazvaný 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]]}'

Podporované formáty bodování

Model Serving u vlastních modelů podporuje žádosti o skórování ve vstupním prvku Pandas DataFrame nebo Tensor.

Datový rámec Pandas

Požadavky by se měly odesílat vytvořením datového rámce Pandas serializovaného JSON s jedním z podporovaných klíčů a objektem JSON odpovídajícím vstupnímu formátu.

  • (Doporučeno)dataframe_split formát je datový rámec Pandas serializovaný ve formátu JSON v orientaci 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 je datový rámec Pandas serializovaný ve formátu JSON v orientaci records .

    Poznámka:

    Tento formát nezaručuje zachování řazení sloupců a split formát je upřednostňovaný před formátem records.

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

Odpověď z koncového bodu obsahuje výstup z vašeho modelu serializovaného pomocí JSON zabaleného do predictions klíče.

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

Tensorový vstup

Pokud váš model očekává tensory, jako je TensorFlow nebo Pytorch model, existují dvě podporované možnosti formátu pro odesílání požadavků: instances a inputs.

Pokud máte více pojmenovaných tensorů na řádek, musíte mít jeden z každého tensoru pro každý řádek.

  • instances je formát založený na tensorech, který přijímá tensory ve formátu řádků. Tento formát použijte, pokud mají všechny vstupní tensory stejnou 0-té dimenzi. Koncepčně lze každý tensor v seznamu instancí spojit s ostatními tensory stejného názvu ve zbytku seznamu, aby se vytvořil úplný vstupní tensor modelu, který by byl možný pouze v případě, že by všechny tenzory měly stejnou 0-té dimenzi.

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

    Následující příklad ukazuje, jak zadat více pojmenovaných tenzorů.

    {
      "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 odesílejte dotazy s tensory ve sloupcovém formátu. Tento požadavek se liší, protože ve skutečnosti existuje jiný počet instancí tensoru t2 (3) než t1 a t3, takže tento vstup není možné reprezentovat ve instances formátu.

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

Odpověď z koncového bodu je v následujícím formátu.

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

Příklad poznámkového bloku

Příklad testování koncového bodu obsluhy modelů pomocí modelu Pythonu najdete v následujícím poznámkovém bloku:

Poznámkový blok koncového bodu obsluhy testovacího modelu

Získejte notebook

Další materiály