Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы узнаете, как форматировать запросы оценки для вашей обслуживаемой модели и как отправлять эти запросы в конечную точку обслуживания модели. Это руководство относится к обслуживанию пользовательских моделей, которые Databricks определяет как традиционные модели машинного обучения или настраиваемые модели Python, упакованные в формате MLflow. Зарегистрируйте модели в каталоге Unity или в реестре моделей рабочей области. Примеры включают scikit-learn, XGBoost, PyTorch и модели трансформеров Hugging Face. Дополнительные сведения об этой функциональности и поддерживаемых категориях моделей см. в статье "Развертывание моделей с помощью мозаичной модели ИИ".
Запросы, связанные с генеративным ИИ и рабочими нагрузками LLM, см. в разделе "Использование базовых моделей".
Требования
- Конечная точка обслуживания модели.
- Для пакета SDK развертывания MLflow требуется MLflow 2.9 или более поздней версии.
- Запрос оценки в принятом формате.
- Чтобы отправить запрос оценки через REST API или SDK развертывания MLflow, необходимо иметь токен API Databricks.
Внимание
В качестве рекомендации по обеспечению безопасности для производственных сценариев Databricks рекомендует использовать маркер OAuth для машинного взаимодействия для проверки подлинности в производственной среде.
Для тестирования и разработки Databricks рекомендует использовать личный маркер доступа, принадлежащий субъектам-службам , а не пользователям рабочей области. Сведения о создании маркеров для субъектов-служб см. в разделе "Управление маркерами" для субъекта-службы.
Запрос методов и примеров
Служба моделей Mosaic AI предоставляет следующие варианты отправки запросов на оценку в обслуживаемые модели:
| Метод | Сведения |
|---|---|
| Обслуживающий пользовательский интерфейс | Выберите конечную точку запроса на странице конечной точки обслуживания в рабочей области Databricks. Вставьте входные данные модели формата JSON и нажмите кнопку "Отправить запрос". Если в модели есть входной пример, используйте команду Show Example для загрузки. |
| Функция SQL | Вызов вывода модели непосредственно из SQL с помощью ai_query функции SQL. См. ai_query функцию. |
| REST API | Вызов и запрос модели с помощью REST API. Дополнительные сведения см. в разделе POST /обслуживающие конечные точки/{name}/invocations . Сведения о оценке запросов к конечным точкам, обслуживающим несколько моделей, см. в разделе "Запрос отдельных моделей" за конечной точкой. |
| Пакет SDK для развертываний MLflow | Используйте функцию predict() из SDK MLflow Deployments для запроса модели. |
Пример применения оценки в Pandas DataFrame
В следующем примере предполагается, что MODEL_VERSION_URI как https://<databricks-instance>/model/iris-classifier/Production/invocations, где <databricks-instance>, это имя экземпляра Databricks и токен REST API Databricks, названный DATABRICKS_API_TOKEN.
См. поддерживаемые форматы оценки.
REST API
Оценка модели, принимающей формат разделённых входных данных датасета.
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]]
}]
}'
Оценивайте модель, принимающую на вход тензоры. Входные данные Tensor должны быть отформатированы, как описано в документации по 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]]}'
Пакет SDK для развертываний MLflow
Внимание
В следующем примере используется predict() API из пакета SDK для развертываний MLflow.
import os
import mlflow.deployments
os.environ["DATABRICKS_HOST"] = "https://<workspace_host>.databricks.com"
os.environ["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
Чтобы оценить набор данных в Power BI Desktop, выполните указанные ниже действия.
Откройте набор данных, который вы хотите оценить.
Перейдите в раздел преобразования данных.
Щелкните правой кнопкой мыши на левой панели и выберите "Создать запрос".
Перейдите к просмотру > расширенного редактора.
Замените текст запроса приведенным ниже фрагментом кода, подставив соответствующие значения
DATABRICKS_API_TOKENи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Присвойте запросу желаемое имя модели.
Откройте расширенный редактор запросов для своего набора данных и примените функцию модели.
Пример входных данных тензора
В следующем примере оценивается модель, принимающая тензорные входные данные. Входные данные Tensor должны быть отформатированы, как описано в документации API TensorFlow Serving. В этом примере предполагается использование MODEL_VERSION_URI аналогично https://<databricks-instance>/model/iris-classifier/Production/invocations, где <databricks-instance> является именем вашего экземпляра Databricks, а токен REST API Databricks называется 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]]}'
Поддерживаемые форматы оценки
Для пользовательских моделей сервис размещения моделей поддерживает запросы оценки в формате Pandas DataFrame или в виде тензорного входа.
Датафрейм Pandas
Запросы должны отправляться путем создания кадра данных Pandas, сериализованного в формате JSON, с использованием одного из поддерживаемых ключей и объекта JSON, соответствующего входному формату.
(Рекомендуется)
dataframe_splitформат — это сериализованный JSON-кадр данных Pandas в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— Pandas DataFrame, сериализованный в формате JSON, в ориентации поrecords.Примечание.
Этот формат не гарантирует сохранение порядка столбцов, а формат
splitпредпочтителен для формата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 } ] }
Ответ конечной точки содержит выходные данные модели, сериализованные в формате JSON и заключенные в ключ predictions.
{
"predictions": [0, 1, 1, 1, 0]
}
Входные данные Tensor
Когда ваша модель ожидает тензоры, такие как модели TensorFlow или PyTorch, доступны два поддерживаемых варианта формата для отправки запросов: instances и inputs.
Если у вас несколько именованных тензоров для каждой строки, то необходимо, чтобы для каждой строки был один экземпляр каждого из этих тензоров.
instances— это формат на основе тензоров, который принимает тензоры в формате строк. Используйте этот формат, если все входные тензоры имеют одинаковое нулевое измерение. Концептуально каждый тензор в списке экземпляров можно объединить с другими тензорами того же имени в остальной части списка, чтобы создать полный тензор входных данных для модели, что может быть возможно только в том случае, если все тензоры имеют то же 0-е измерение.{ "instances": [1, 2, 3] }В следующем примере показано, как указать несколько именованных тензоров.
{ "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— отправляйте запросы с тензорами в столбчатом формате. Этот запрос отличается, так как фактически существует другое количество экземпляров тензораt2(3) нежели вt1иt3, поэтому невозможно представить эти входные данные в форматеinstances.{ "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] ] ] } }
Ответ конечной точки имеет следующий формат.
{
"predictions": [0, 1, 1, 1, 0]
}
Пример записной книжки
Пример тестирования конечной точки службы модели с помощью модели Python см. в следующей записной книжке: