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 wykazie aparatu Unity lub w rejestrze modeli obszaru roboczego. Przykłady obejmują modele przekształcania twarzy scikit-learn, XGBoost, PyTorch i Hugging Face transformer. Aby uzyskać więcej informacji na temat tej funkcji i obsługiwanych kategorii modeli, zobacz Obsługa modelu w usłudze Azure Databricks .
Aby uzyskać żądania zapytań dotyczące obciążeń generacyjnych sztucznej inteligencji i llM, zobacz Tworzenie zapytań dotyczących modeli sztucznej inteligencji generujących zapytania.
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 | Wybierz pozycję Punkt końcowy zapytania na stronie Obsługa punktu końcowego w obszarze roboczym usługi 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ć. |
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. |
SQL, funkcja | Wywoływanie wnioskowania modelu bezpośrednio z bazy danych SQL przy użyciu ai_query funkcji SQL. Zobacz Wykonywanie zapytań względem obsługiwanego modelu przy użyciu ai_query(). |
Przykład oceniania ramek danych biblioteki Pandas
W poniższym przykładzie przyjęto założenie, że element podobny MODEL_VERSION_URI
do , gdzie <databricks-instance>
jest nazwą wystąpienia usługi Databricks, oraz tokenem interfejsu API REST usługi Databricks o nazwie DATABRICKS_API_TOKEN
.https://<databricks-instance>/model/iris-classifier/Production/invocations
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 Wykonywanie zapytań względem obsługiwanego modelu przy użyciu 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 w panelu po lewej stronie i wybierz pozycję Utwó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 założono, że element podobny do MODEL_VERSION_URI
https://<databricks-instance>/model/iris-classifier/Production/invocations
, gdzie <databricks-instance>
jest nazwą wystąpienia usługi Databricks, oraz 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 kolumn, a
split
format jest preferowany wrecords
formacie.{ "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 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 ]}
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żt1
it3
, więc nie można reprezentować tych danych wejściowycht2
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: