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ą modele przekształcania twarzy scikit-learn, XGBoost, PyTorch i Hugging Face transformer. 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ążenia wynikającego z generatywnej SI i LLM, zobacz Podstawowe modele zapytań.
Wymagania
- Model obsługujący punkt końcowy.
- W przypadku zestawu MLflow Deployment SDK wymagany jest zestaw MLflow 2.9 lub nowszy.
- Żądanie oceniania w akceptowanym formacie.
- Aby wysłać żądanie oceniania za pomocą interfejsu API REST lub zestawu MLflow Deployment SDK, musisz mieć token interfejsu API usługi Databricks.
Ważne
Najlepszym rozwiązaniem w zakresie zabezpieczeń w scenariuszach produkcyjnych usługa Databricks zaleca używanie tokenów OAuth maszyny do maszyny podczas uwierzytelniania w środowisku produkcyjnym.
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ń
Obsługa modelu mozaiki sztucznej inteligencji udostępnia następujące opcje wysyłania żądań oceniania do obsługiwanych modeli:
Metoda | Szczegóły |
---|---|
Obsługa interfejsu użytkownika | Select punkt końcowy zapytania ze strony Obsługa punktu końcowego w obszarze roboczym usługi Databricks. Insert Dane wejściowe modelu w formacie JSON i kliknij Wyślij żądanie. Jeśli model ma zarejestrowany przykład danych wejściowych, użyj polecenia Pokaż przykład , aby go załadować. |
SQL, funkcja | Wywoływanie wnioskowania modelu bezpośrednio z bazy danych SQL przy użyciu ai_query funkcji SQL. Zobacz Zapytaj o obsługiwany model za pomocą polecenia ai_query. |
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 końcowych obsługujących wiele modeli, zobacz Wykonywanie zapytań o poszczególne modele za punktem końcowym. |
Zestaw SDK wdrożeń MLflow | Funkcja predict() zestawu SDK wdrożeń MLflow umożliwia wykonywanie zapytań względem modelu. |
Przykład oceniania ramek danych biblioteki Pandas
W poniższym przykładzie założono, że MODEL_VERSION_URI
, podobnie jak https://<databricks-instance>/model/iris-classifier/Production/invocations
, where<databricks-instance>
, to nazwa Twojego 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
Ocenianie modelu akceptującego podzielony format wejściowy ramki danych.
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]]
}]
}'
Ocenianie modelu akceptującego dane wejściowe tensor. Dane wejściowe tensor powinny być sformatowane zgodnie z opisem w dokumentacji interfejsu API usługi 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 interfejsu predict()
API z zestawu SDK wdrożeń 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]]
}
}
)
SQL
Ważne
W poniższym przykładzie użyto wbudowanej funkcji SQL, ai_query. Ta funkcja jest publiczna wersja zapoznawcza , a definicja może ulec zmianie. Zobacz Zapytaj serwowany model za pomocą ai_query.
W poniższym przykładzie model znajduje się za sentiment-analysis
punktem końcowym z zestawem text
danych i określa zwracany typ żądania.
SELECT text, ai_query(
"sentiment-analysis",
text,
returnType => "STRUCT<label:STRING, score:DOUBLE>"
) AS predict
FROM
catalog.schema.customer_reviews
PowerBI
Zestaw danych można ocenić w programie Power BI Desktop, wykonując następujące kroki:
Otwórz zestaw danych, który chcesz ocenić.
Przejdź do pozycji Przekształć dane.
Kliknij prawym przyciskiem myszy na panelu po lewej stronie i selectUtwórz nowe zapytanie.
Przejdź do pozycji Wyświetl > Edytor zaawansowany.
Zastąp treść zapytania poniższym fragmentem kodu po wypełnieniu odpowiedniego
DATABRICKS_API_TOKEN
elementu iMODEL_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
Nadaj kwerendzie nazwę żądanego modelu.
Otwórz zaawansowany edytor zapytań dla zestawu danych i zastosuj funkcję modelu.
Przykład danych wejściowych tensor
Poniższy przykład ocenia model akceptujący dane wejściowe tensor. Dane wejściowe tensor powinny być sformatowane zgodnie z opisem w dokumentacji interfejsu API usługi TensorFlow . W tym przykładzie przyjęto założenie, że MODEL_VERSION_URI
, taki jak https://<databricks-instance>/model/iris-classifier/Production/invocations
, where<databricks-instance>
jest nazwą wystąpienia usługi Databricksoraz tokenem interfejsu API REST usługi Databricks o nazwie 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]]}'
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 biblioteki 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 orientacjisplit
.{ "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 Biblioteki Pandas w formacie JSON w orientacjirecords
.Uwaga
Ten format nie gwarantuje zachowania kolejności column, a format
split
jest preferowany od formaturecords
.{ "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, serializowane przy użyciu kodu JSON, opakowane w predictions
klucz.
{
"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ć jeden z poszczególnych tensorów 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 w wystąpieniach list można połączyć z innymi tensorami o tej samej nazwie w pozostałej części list, aby skonstruować 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 ]}
W poniższym przykładzie pokazano, jak określić wiele nazwanych tensorów.
{ "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łać zapytania z tensorami w formacie kolumnowym. To żądanie jest inne, ponieważ istnieje w rzeczywistości inna liczba wystąpień tensorów (3) niżt2
it1
, więc nie można reprezentować tych danych wejściowycht3
winstances
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 notesu
Zapoznaj się z poniższym notesem, aby zapoznać się z przykładem testowania punktu końcowego obsługującego model modelu przy użyciu modelu w języku Python: