Udostępnij za pośrednictwem


Wykonywanie zapytań dotyczących punktów końcowych dla modeli niestandardowych

W tym artykule dowiesz się, jak sformatować żądania oceniania dla obsługiwanego modelu oraz jak wysyłać te żądania do punktu końcowego obsługującego model. Wskazówki dotyczą obsługi modeli niestandardowych, które usługa Databricks definiuje jako tradycyjne modele uczenia maszynowego lub dostosowane modele języka Python spakowane w formacie MLflow. Można je zarejestrować w Unity Catalog lub w rejestrze modeli przestrzeni roboczej. Przykłady obejmują scikit-learn, XGBoost, PyTorch oraz modele transformer Hugging Face. Zobacz Deploy models using Mosaic AI Model Serving, aby uzyskać więcej informacji na temat tej funkcjonalności i obsługiwanych kategorii modeli.

Aby uzyskać zapytania dotyczące obciążeń generatywnej sztucznej inteligencji i LLM, zobacz Korzystanie z modeli podstawowych.

Wymagania

Ważne

Jako najlepsza praktyka w zakresie bezpieczeństwa w scenariuszach produkcyjnych, Databricks zaleca używanie tokenów OAuth maszyna-maszyna do uwierzytelniania w produkcji.

W przypadku testowania i programowania usługa Databricks zaleca używanie osobistego tokenu dostępu należącego do jednostek usługi zamiast użytkowników obszaru roboczego. Aby utworzyć tokeny dla jednostek usługi, zobacz Zarządzanie tokenami dla jednostki usługi.

Metody i przykłady wykonywania zapytań

Usługa Mosaic AI Model Serving udostępnia następujące opcje wysyłania żądań punktacji do obsługiwanych modeli:

Metoda Szczegóły
Serwowanie interfejsu użytkownika Wybierz Punkt końcowy kwerendy ze strony Punkt końcowy obsługi w obszarze roboczym Databricks. Wstaw dane wejściowe modelu formatu JSON i kliknij pozycję Wyślij żądanie. Jeśli model ma zarejestrowany przykład danych wejściowych, użyj polecenia Pokaż przykład , aby go załadować.
funkcja SQL Wywoływanie wnioskowania modelu bezpośrednio z bazy danych SQL przy użyciu ai_query funkcji SQL. Zobacz ai_query funkcję.
Interfejs API REST Wywoływanie modelu i wykonywanie zapytań względem tego modelu przy użyciu interfejsu API REST. Aby uzyskać szczegółowe informacje, zobacz POST /serving-endpoints/{name}/invocations . Aby uzyskać informacje na temat oceniania żądań do punktów dostępowych obsługujących wiele modeli, zobacz Wykonywanie zapytań dla poszczególnych modeli z wykorzystaniem punktu dostępowego.
Zestaw SDK wdrożeń MLflow Funkcja predict() zestawu SDK wdrożeń MLflow umożliwia wykonywanie zapytań względem modelu.

Przykład oceny DataFrame Pandas

W poniższym przykładzie przyjęto założenie, że MODEL_VERSION_URI jest podobne do https://<databricks-instance>/model/iris-classifier/Production/invocations, gdzie <databricks-instance> to nazwa wystąpienia usługi Databricks, a to token interfejsu API REST usługi Databricks o nazwie DATABRICKS_API_TOKEN.

Zobacz Obsługiwane formaty oceniania.

Interfejs API REST

Oceń model akceptujący format wejściowy ramki danych z podziałem.

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

Ocenić model przyjmujący tensory jako dane wejściowe. Dane wejściowe tensorów powinny być sformatowane zgodnie z opisem w dokumentacji interfejsu API 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]]}'

Zestaw SDK wdrożeń MLflow

Ważne

W poniższym przykładzie użyto predict() API z 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]]
                    }
                }
          )

PowerBI

Zestaw danych można ocenić w programie Power BI Desktop, wykonując następujące kroki:

  1. Otwórz zestaw danych, który chcesz ocenić.

  2. Przejdź do pozycji Przekształć dane.

  3. Kliknij prawym przyciskiem myszy w panelu po lewej stronie i wybierz pozycję Utwórz nowe zapytanie.

  4. Przejdź do Wyświetl Edytor zaawansowany>.

  5. Zastąp treść zapytania poniższym fragmentem kodu po wypełnieniu odpowiednich DATABRICKS_API_TOKEN i 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. Nadaj kwerendzie nazwę żądanego modelu.

  7. Otwórz zaawansowany edytor zapytań dla zestawu danych i zastosuj funkcję modelu.

Przykład wejściowych danych tensorowych

Poniższy przykład ocenia model akceptujący wejścia tensora. Dane wejściowe tensora powinny być sformatowane zgodnie z opisem w dokumentacji interfejsu API usługi TensorFlow . W tym przykładzie przyjęto założenie, że jest podobne do , gdzie to nazwa Twojego wystąpienia usługi Databricks , a token interfejsu API REST usługi Databricks nazywa się .

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

Obsługiwane formaty oceniania

W przypadku modeli niestandardowych obsługa modeli obsługuje ocenianie żądań w ramce danych Biblioteki Pandas lub danych wejściowych Tensor.

Ramka danych Pandas

Żądania powinny być wysyłane przez skonstruowanie zserializowanej ramki danych Pandas w formacie JSON z jednym z obsługiwanych kluczy i obiektu JSON odpowiadającego formatowi wejściowemu.

  • (Zalecane)dataframe_split format to serializowana ramka danych Biblioteki Pandas w formacie JSON w orientacji 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 to serializowana ramka danych Pandas w formacie JSON w orientacji records.

    Uwaga

    Ten format nie gwarantuje zachowania kolejności kolumn, a format split jest preferowany w formacie 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
        }
      ]
    }
    

Odpowiedź z punktu końcowego zawiera dane wyjściowe z modelu, sformatowane w JSON i opakowane jako klucz predictions.

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

Dane wejściowe programu Tensor

Gdy model oczekuje tensorów, takich jak model TensorFlow lub Pytorch, istnieją dwie obsługiwane opcje formatowania wysyłania żądań: instances i inputs.

Jeśli masz wiele nazwanych tensorów na wiersz, musisz mieć po jednym z każdego tensora dla każdego wiersza.

  • instances jest formatem opartym na tensorach, który akceptuje tensory w formacie wiersza. Użyj tego formatu, jeśli wszystkie tensory wejściowe mają ten sam wymiar 0-ty. Koncepcyjnie każdy tensor na liście wystąpień może być połączony z innymi tensorami o tej samej nazwie w pozostałej części listy, aby utworzyć pełny tensor wejściowy dla modelu, co byłoby możliwe tylko wtedy, gdy wszystkie tensory mają ten sam wymiar 0.

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

    Poniższy przykład pokazuje, jak określić wiele tensorów z nazwami.

    {
      "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 wysyłaj zapytania z wykorzystaniem tensorów w formacie kolumnowym. To żądanie jest inne, ponieważ istnieje w rzeczywistości inna liczba wystąpień tensorów (3) niż t2 i t1, więc nie można reprezentować tych danych wejściowych t3 w instances formacie.

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

Odpowiedź z punktu końcowego ma następujący format.

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

Przykład notatnika

Zapoznaj się z poniższym notatnikiem, aby uzyskać przykład testowania punktu końcowego obsługi modelu przy użyciu modelu w języku Python.

Notatnik punktu końcowego usług dla modelu testowego

Weź notatnik

Dodatkowe zasoby