Управление конечными точками обслуживания моделей
В этой статье описывается, как управлять конечными точками обслуживания модели с помощью пользовательского интерфейса обслуживания и REST API. Ознакомьтесь со статьей "Обслуживание конечных точек" в справочнике по REST API.
Чтобы создать конечные точки обслуживания моделей, используйте одно из следующих действий:
- Создайте пользовательские конечные точки обслуживания моделей.
- Создание базовой модели обслуживания конечных точек.
Get состояние конечной точки модели
В пользовательском интерфейсе обслуживания можно проверить состояние конечной точки из индикатора состояния конечной точки обслуживания в верхней части страницы сведений о конечной точке.
Проверьте состояние и сведения конечной точки программным способом с помощью REST API или пакета SDK для развертываний MLflow:
REST API
GET /api/2.0/serving-endpoints/{name}
В следующем примере создается конечная точка, которая служит первой версией модели my-ads-model
, зарегистрированной в реестре моделей Unity Catalog. Необходимо указать полное имя модели, включая родительские catalog и schema, например, catalog.schema.example-model
.
В следующем примере ответа поле "READY" означает, state.ready
что конечная точка готова к получению трафика. Поле state.update_state
сейчас равно NOT_UPDATING
, и pending_config
больше не возвращается, так как update успешно завершён.
{
"name": "unity-model-endpoint",
"creator": "customer@example.com",
"creation_timestamp": 1666829055000,
"last_updated_timestamp": 1666829055000,
"state": {
"ready": "READY",
"update_state": "NOT_UPDATING"
},
"config": {
"served_entities": [
{
"name": "my-ads-model",
"entity_name": "myCatalog.mySchema.my-ads-model",
"entity_version": "1",
"workload_size": "Small",
"scale_to_zero_enabled": false,
"state": {
"deployment": "DEPLOYMENT_READY",
"deployment_state_message": ""
},
"creator": "customer@example.com",
"creation_timestamp": 1666829055000
}
],
"traffic_config": {
"routes": [
{
"served_model_name": "my-ads-model",
"traffic_percentage": 100
}
]
},
"config_version": 1
},
"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"permission_level": "CAN_MANAGE"
}
Пакет SDK для развертываний MLflow
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
endpoint = client.get_endpoint(endpoint="chat")
assert endpoint == {
"name": "chat",
"creator": "alice@company.com",
"creation_timestamp": 0,
"last_updated_timestamp": 0,
"state": {...},
"config": {...},
"tags": [...],
"id": "88fd3f75a0d24b0380ddc40484d7a31b",
}
Остановка конечной точки обслуживания модели
Вы можете временно остановить конечную точку обслуживания модели и запустить ее позже. Когда конечная точка остановлена, ресурсы, подготовленные для него, завершаются, и конечная точка не может обслуживать запросы, пока не будет запущена снова. Только конечные точки, обслуживающие пользовательские модели, не оптимизированы для маршрутизации и не могут быть остановлены. Остановленные конечные точки не учитываются в квоте ресурса. Запросы, отправленные в остановленную конечную точку, возвращают ошибку 400.
Вы можете остановить конечную точку на странице сведений конечной точки в пользовательском интерфейсе обслуживания .
- Щелкните конечную точку, которую вы хотите остановить.
- Нажмите кнопку " Остановить " в правом верхнем углу.
Кроме того, можно программно остановить конечную точку обслуживания с помощью REST API следующим образом:
POST /api/2.0/serving-endpoints/{name}/config:stop
Когда вы готовы начать остановленную конечную точку обслуживания модели, вы можете сделать это на странице сведений конечной точки в пользовательском интерфейсе обслуживания .
- Щелкните конечную точку, которую вы хотите запустить.
- Нажмите кнопку " Пуск" в правом верхнем углу.
Кроме того, можно запустить остановленную конечную точку обслуживания программным способом с помощью REST API следующим образом:
POST /api/2.0/serving-endpoints/{name}/config:start
Удаление конечной точки обслуживания модели
Чтобы отключить обслуживание модели, можно удалить конечную точку, в которую она была включена.
Вы можете удалить конечную точку на странице сведений конечной точки в пользовательском интерфейсе обслуживания .
- Щелкните "Служить " на боковой панели.
- Щелкните конечную точку, которую нужно удалить.
- Щелкните меню кебаб в верхней части и selectУдалить.
Кроме того, можно удалить конечную точку обслуживания программным способом с помощью REST API или пакета SDK для развертываний MLflow.
REST API
DELETE /api/2.0/serving-endpoints/{name}
Пакет SDK для развертываний MLflow
from mlflow.deployments import get_deploy_client
client = get_deploy_client("databricks")
client.delete_endpoint(endpoint="chat")
Отладка конечной точки обслуживания модели
Для отладки любых проблем с конечной точкой можно получить следующее:
- Журналы сборки контейнеров сервера модели
- Журналы сервера модели
Эти журналы также доступны из пользовательского интерфейса конечных точек на вкладке "Журналы ".
Для журналов сборки для обслуживаемой модели можно использовать следующий запрос. Дополнительные сведения см . в руководстве по отладке для службы моделей.
GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
“config_version”: 1 // optional
}
Для журналов сервера модели для модели обслуживания можно использовать следующий запрос:
GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs
{
“config_version”: 1 // optional
}
Управление разрешениями в конечной точке обслуживания модели
Для изменения разрешений необходимо иметь по крайней мере разрешение CAN MANAGE на конечной точке обслуживания. Дополнительные сведения о уровнях разрешений см. в разделе "Обслуживание списков управления доступом конечных точек".
Get list разрешений на конечной точке обслуживания.
databricks permissions get servingendpoints <endpoint-id>
Grant пользователя jsmith@example.com
разрешение CAN QUERY на конечной точке обслуживания.
databricks permissions update servingendpoints <endpoint-id> --json '{
"access_control_list": [
{
"user_name": "jsmith@example.com",
"permission_level": "CAN_QUERY"
}
]
}'
Вы также можете изменить разрешения конечной точки обслуживания с помощью API разрешений.
Добавление политики бюджета для конечной точки обслуживания модели
Внимание
Эта функция доступна в общедоступной предварительной версии и недоступна для конечных точек, которые обслуживают внешние модели или API моделей-основ с оплатой за жетон.
Политики бюджета позволяют вашей организации применять пользовательские теги к бессерверному использованию для детальной атрибуции расходов. Если в рабочей области используются политики бюджета для атрибута бессерверного использования, можно добавить политику бюджета в конечные точки обслуживания модели. См. атрибуцию бессерверного использования с помощью бюджетных политик .
Во время создания конечной точки обслуживания модели можно
Если у вас есть MANAGE
разрешения для существующей конечной точки, можно изменить и добавить политику бюджета в эту конечную точку на странице сведений о конечной точке в пользовательском интерфейсе.
Заметка
Если вам предоставлена политика бюджета, ваши существующие конечные точки не будут автоматически помечены вашей политикой. Если вы хотите подключить к ним политику бюджета, необходимо вручную update существующих конечных точек.
Get конечную точку обслуживания модели schema
Внимание
Поддержка схем запросов конечных точек доступна в общедоступной предварительной версии. Эта функция доступна в регионах обслуживания моделей.
Запрос конечной точки обслуживания schema является формальным описанием конечной точки обслуживания, используя стандартную спецификацию OpenAPI в формате JSON. Он содержит сведения о конечной точке, включая путь к конечной точке, сведения о запросе конечной точки, например формате текста запроса и ответа, а также типе данных для каждого поля. Эта информация может быть полезной для сценариев воспроизведения или при необходимости информации о конечной точке, но вы не являетесь создателем исходной конечной точки или владельцем.
Чтобы get конечной точке обслуживания модели schema, обслуживаемая модель должна иметь подпись модели, зарегистрированную в журнале, и конечная точка должна находиться в состоянии READY
.
В следующих примерах показано, как программно get конечную точку обслуживания модели schema с помощью REST API. Сведения о схемах конечных точек обслуживания функций см. в разделе "Что такое Служба компонентов Databricks?".
schema, возвращенный API, находится в формате объекта JSON, который соответствует спецификации OpenAPI.
ACCESS_TOKEN="<endpoint-token>"
ENDPOINT_NAME="<endpoint name>"
curl "https://example.databricks.com/api/2.0/serving-endpoints/$ENDPOINT_NAME/openapi" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json"
подробности ответа Schema
Ответ — это спецификация OpenAPI в формате JSON, включая такие поля, как openapi
, info
servers
и paths
. Так как ответ schema является объектом JSON, его можно проанализировать с помощью общих языков программирования и generate клиентский код из спецификации с помощью сторонних средств.
Вы также можете визуализировать спецификацию OpenAPI с помощью сторонних инструментов, таких как Редактор Swagger.
К основным полям ответа относятся:
- В
info.title
поле отображается имя конечной точки обслуживания. - Поле
servers
всегда содержит один объект, какurl
правило, поле, которое является базовым URL-адресом конечной точки. - Объект
paths
в ответе содержит все поддерживаемые пути для конечной точки. Ключи в объекте — ЭТО URL-адрес пути. Каждыйpath
может поддерживать несколько форматов входных данных. Эти входные данные перечислены вoneOf
поле.
Ниже приведен пример ответа конечной точки schema:
{
"openapi": "3.1.0",
"info": {
"title": "example-endpoint",
"version": "2"
},
"servers": [{ "url": "https://example.databricks.com/serving-endpoints/example-endpoint"}],
"paths": {
"/served-models/vanilla_simple_model-2/invocations": {
"post": {
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"type": "object",
"properties": {
"dataframe_split": {
"type": "object",
"properties": {
"columns": {
"description": "required fields: int_col",
"type": "array",
"items": {
"type": "string",
"enum": [
"int_col",
"float_col",
"string_col"
]
}
},
"data": {
"type": "array",
"items": {
"type": "array",
"prefixItems": [
{
"type": "integer",
"format": "int64"
},
{
"type": "number",
"format": "double"
},
{
"type": "string"
}
]
}
}
}
},
"params": {
"type": "object",
"properties": {
"sentiment": {
"type": "number",
"format": "double",
"default": "0.5"
}
}
}
},
"examples": [
{
"columns": [
"int_col",
"float_col",
"string_col"
],
"data": [
[
3,
10.4,
"abc"
],
[
2,
20.4,
"xyz"
]
]
}
]
},
{
"type": "object",
"properties": {
"dataframe_records": {
"type": "array",
"items": {
"required": [
"int_col",
"float_col",
"string_col"
],
"type": "object",
"properties": {
"int_col": {
"type": "integer",
"format": "int64"
},
"float_col": {
"type": "number",
"format": "double"
},
"string_col": {
"type": "string"
},
"becx_col": {
"type": "object",
"format": "unknown"
}
}
}
},
"params": {
"type": "object",
"properties": {
"sentiment": {
"type": "number",
"format": "double",
"default": "0.5"
}
}
}
}
}
]
}
}
}
},
"responses": {
"200": {
"description": "Successful operation",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"predictions": {
"type": "array",
"items": {
"type": "number",
"format": "double"
}
}
}
}
}
}
}
}
}
}
}
}