Поделиться через


Управление конечными точками обслуживания моделей

В этой статье описывается, как управлять конечными точками обслуживания модели с помощью пользовательского интерфейса обслуживания и REST API. Ознакомьтесь со статьей "Обслуживание конечных точек" в справочнике по REST API.

Чтобы создать конечные точки обслуживания моделей, используйте одно из следующих действий:

Получение состояния конечной точки модели

В пользовательском интерфейсе обслуживания можно проверить состояние конечной точки из индикатора состояния конечной точки обслуживания в верхней части страницы сведений о конечной точке.

Проверьте состояние и сведения конечной точки программным способом с помощью REST API или пакета SDK для развертываний MLflow:

REST API

GET /api/2.0/serving-endpoints/{name}

В следующем примере создается конечная точка, которая служит первой версией модели my-ads-model, зарегистрированной в реестре моделей каталога Unity. Необходимо указать полное имя модели, включая родительский каталог и схему, например, catalog.schema.example-model.

В следующем примере ответа поле "READY" означает, state.ready что конечная точка готова к получению трафика. Поле state.update_stateNOT_UPDATING, и pending_config больше не возвращается, так как обновление успешно завершено.

{
  "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.

Вы можете остановить конечную точку на странице сведений конечной точки в пользовательском интерфейсе обслуживания .

  1. Щелкните конечную точку, которую вы хотите остановить.
  2. Нажмите кнопку " Остановить " в правом верхнем углу.

Кроме того, можно программно остановить конечную точку обслуживания с помощью REST API следующим образом:

POST /api/2.0/serving-endpoints/{name}/config:stop

Когда вы готовы начать остановленную конечную точку обслуживания модели, вы можете сделать это на странице сведений конечной точки в пользовательском интерфейсе обслуживания .

  1. Щелкните конечную точку, которую вы хотите запустить.
  2. Нажмите кнопку " Пуск" в правом верхнем углу.

Кроме того, можно запустить остановленную конечную точку обслуживания программным способом с помощью REST API следующим образом:

POST /api/2.0/serving-endpoints/{name}/config:start

Удаление конечной точки обслуживания модели

Чтобы отключить обслуживание модели, можно удалить конечную точку, в которую она была включена.

Вы можете удалить конечную точку на странице сведений конечной точки в пользовательском интерфейсе обслуживания .

  1. Щелкните "Служить " на боковой панели.
  2. Щелкните конечную точку, которую нужно удалить.
  3. Щелкните меню кебаб в верхней части и выберите Удалить.

Кроме того, можно удалить конечную точку обслуживания программным способом с помощью 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 на конечной точке обслуживания. Дополнительные сведения о уровнях разрешений см. в разделе "Обслуживание списков управления доступом конечных точек".

Получите список разрешений в конечной точке обслуживания.

databricks permissions get servingendpoints <endpoint-id>

Предоставьте пользователю 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 разрешений.

Добавление политики бюджета для конечной точки обслуживания модели

Внимание

Эта функция доступна в общедоступной предварительной версии и недоступна для конечных точек, которые обслуживают внешние модели.

Политики бюджета позволяют вашей организации применять пользовательские теги к бессерверному использованию для детальной атрибуции расходов. Если в рабочей области используются политики бюджета для атрибута бессерверного использования, можно добавить политику бюджета в конечные точки обслуживания модели. См. атрибуцию бессерверного использования с помощью бюджетных политик .

Во время создания конечной точки обслуживания модели можно выбрать политику бюджета конечной точки в меню политики бюджета в пользовательском интерфейсе обслуживания. Если у вас назначена политика бюджета, все создаваемые конечные точки назначаются этой политике бюджета, даже если вы не выбираете политику из меню Бюджет.

Добавить политику бюджета во время создания конечной точки обслуживания модели с помощью пользовательского интерфейса обслуживания.

Если у вас есть MANAGE разрешения для существующей конечной точки, можно изменить и добавить политику бюджета в эту конечную точку на странице сведений о конечной точке в пользовательском интерфейсе.

изменить политику бюджета в существующей конечной точке обслуживания модели с помощью пользовательского интерфейса обслуживания.

Заметка

Если вам предоставлена политика бюджета, ваши существующие конечные точки не будут автоматически помечены вашей политикой. Если вы хотите подключить к ним политику бюджета, вам нужно вручную обновить существующие конечные точки.

Получение схемы конечной точки обслуживания модели

Внимание

Поддержка схем запросов конечных точек доступна в общедоступной предварительной версии. Эта функция доступна в регионах обслуживания моделей.

Схема запроса конечной точки обслуживания — это формальное описание конечной точки обслуживания с помощью стандартной спецификации OpenAPI в формате JSON. Он содержит сведения о конечной точке, включая путь к конечной точке, сведения о запросе конечной точки, например формате текста запроса и ответа, а также типе данных для каждого поля. Эта информация может быть полезной для сценариев воспроизведения или при необходимости информации о конечной точке, но вы не являетесь создателем исходной конечной точки или владельцем.

Чтобы получить схему конечной точки обслуживания модели, обслуживаемая модель должна иметь сигнатуру модели, зарегистрированную в журнале, и конечная точка должна находиться в состоянии READY.

В следующих примерах показано, как программно получить схему конечной точки обслуживания модели с помощью REST API. Сведения о схемах конечных точек обслуживания функций см. в разделе "Что такое Служба компонентов Databricks?".

Схема, возвращаемая 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"

Сведения о ответе схемы

Ответ — это спецификация OpenAPI в формате JSON, включая такие поля, как openapi, infoservers и paths. Так как ответ схемы является объектом JSON, его можно проанализировать с помощью общих языков программирования и создать клиентский код из спецификации с помощью сторонних средств. Вы также можете визуализировать спецификацию OpenAPI с помощью сторонних инструментов, таких как Редактор Swagger.

К основным полям ответа относятся:

  • В info.title поле отображается имя конечной точки обслуживания.
  • Поле servers всегда содержит один объект, как url правило, поле, которое является базовым URL-адресом конечной точки.
  • Объект paths в ответе содержит все поддерживаемые пути для конечной точки. Ключи в объекте — ЭТО URL-адрес пути. Каждый path может поддерживать несколько форматов входных данных. Эти входные данные перечислены в oneOf поле.

Ниже приведен пример ответа схемы конечной точки:


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