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


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

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

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

  • Пользовательский интерфейс обслуживания
  • REST API
  • Пакет SDK для развертываний MLflow

Сведения о создании конечных точек, обслуживающих созданные модели ИИ, см. в разделе Создание базовой модели обслуживания конечных точек.

Требования

  • Рабочая область должна находиться в поддерживаемом регионе.
  • Если вы используете пользовательские библиотеки или библиотеки с частного зеркального сервера с моделью, ознакомьтесь с помощью пользовательских библиотек Python с моделью, прежде чем создавать конечную точку модели.
  • Для создания конечных точек с помощью пакета SDK для развертываний MLflow необходимо установить клиент развертывания MLflow. Чтобы установить его, выполните следующую команду:
import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

Управление доступом

Сведения о параметрах управления доступом для конечных точек обслуживания моделей для управления конечными точками см. в статье "Управление разрешениями" в конечной точке обслуживания модели.

Можно также добавить переменные среды для хранения credentials для обслуживания моделей. См. раздел "Настройка доступа к ресурсам из конечных точек обслуживания модели"

Создание конечной точки

Обслуживающий пользовательский интерфейс

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

  1. Щелкните "Служить " на боковой панели, чтобы отобразить пользовательский интерфейс обслуживания.

  2. Нажмите кнопку "Создать конечную точку обслуживания".

    Область обслуживания модели в пользовательском интерфейсе Databricks

Для моделей, зарегистрированных в реестре моделей рабочей области или моделях в CatalogUnity:

  1. В поле "Имя" укажите имя конечной точки.

  2. В разделе "Обслуживаемые сущности "

    1. Щелкните в поле Сущности, чтобы открыть форму Select обслуживаемой сущности.
    2. Select тип модели, которую требуется обслуживать. Форма динамически обновляется на основе выбранного фрагмента.
    3. Select какую версию модели и модели вы хотите обслуживать.
    4. Select процент трафика, который следует направить к обслуживаемой модели.
    5. Select, какой размер вычислительных ресурсов следует использовать. Вы можете использовать вычислительные ресурсы ЦП или GPU для рабочих нагрузок. Дополнительные сведения о доступных вычислительных ресурсах GPU см. в разделе "Типы рабочих нагрузок GPU".
    6. Select, какой размер вычислительных ресурсов следует использовать. Вы можете использовать вычислительные ресурсы ЦП или GPU для рабочих нагрузок. Дополнительные сведения о доступных вычислительных ресурсах GPU см. в разделе "Типы рабочих нагрузок GPU".
    7. В разделе Горизонтальное масштабирование вычислений, select размер масштабирования вычислений, который соответствует количеству запросов, которые эта обслуживаемая модель может обрабатывать одновременно. Это число должно быть примерно равно времени выполнения модели QPS x.
      1. Доступные размеры: небольшие для 0-4 запросов, средних 8-16 запросов и больших для 16-64 запросов.
    8. Укажите, следует ли масштабировать конечную точку до нуля, если она не используется.
  3. Нажмите кнопку Создать. Откроется страница "Обслуживание конечных точек" с состоянием конечной точки обслуживания, отображаемой как "Не готово".

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

REST API

Конечные точки можно создать с помощью REST API. См. POST /api/2.0/обслуживающие конечные точки для конфигурации обслуживающих конечных точек parameters.

В следующем примере создается конечная точка, которая служит первой версией модели ads1, зарегистрированной в реестре моделей Unity Catalog. Чтобы указать модель из CatalogUnity, укажите полное имя модели, включая родительские catalog и schema, например, catalog.schema.example-model.


POST /api/2.0/serving-endpoints

{
  "name": "uc-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "name": "ads-entity"
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      },
      {
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "4",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      }
    ],
    "traffic_config":
    {
      "routes": [
        {
          "served_model_name": "my-ads-model-3",
          "traffic_percentage": 100
        },
        {
          "served_model_name": "my-ads-model-4",
          "traffic_percentage": 20
        }
      ]
    }
  },
  "tags": [
    {
      "key": "team",
      "value": "data science"
    }
  ]
}

Далее представлен пример ответа. Состояние конечной точки config_updateNOT_UPDATING это состояние, и обслуживаемая READY модель находится в состоянии.

{
  "name": "uc-model-endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1700089637000,
  "last_updated_timestamp": 1700089760000,
  "state": {
    "ready": "READY",
    "config_update": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "ads-entity",
        "entity_name": "catalog.schema.my-ads-model-3",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true,
        "workload_type": "CPU",
      "state": {
        "deployment": "DEPLOYMENT_READY",
        "deployment_state_message": ""
      },
      "creator": "user@email.com",
      "creation_timestamp": 1700089760000
      }
    ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "catalog.schema.my-ads-model-3",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "data science"
    }
  ],
  "id": "e3bd3e471d6045d6b75f384279e4b6ab",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

Пакет SDK для развертываний MLflow

развертывания MLflow предоставляет API для создания, update и удаления задач. API для этих задач принимают те же parameters, что и REST API для обслуживания конечных точек. См. POST /api/2.0/обслуживающие конечные точки для конфигурации обслуживающих конечных точек parameters.

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


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="unity-catalog-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity"
                "entity_name": "catalog.schema.my-ads-model",
                "entity_version": "3",
                "workload_size": "Small",
                "scale_to_zero_enabled": true
            }
        ],
        "traffic_config": {
            "routes": [
                {
                    "served_model_name": "my-ads-model-3",
                    "traffic_percentage": 100
                }
            ]
        }
    }
)

Кроме того, вы можете сделать следующее:

Типы рабочих нагрузок GPU

Развертывание GPU совместимо со следующими версиями пакетов:

  • Pytorch 1.13.0 - 2.0.1
  • TensorFlow 2.5.0 - 2.13.0
  • MLflow 2.4.0 и более поздних версий

Чтобы развернуть модели с помощью gpu, включите поле workload_type в конфигурацию конечной точки во время создания конечной точки или в качестве конфигурации конечной точки update с помощью API. Чтобы настроить конечную точку для рабочих нагрузок GPU с помощью пользовательского интерфейса обслуживания, требуемый тип GPU из раскрывающегося списка типа вычислений .

{
  "served_entities": [{
    "entity_name": "catalog.schema.ads1",
    "entity_version": "2",
    "workload_type": "GPU_LARGE",
    "workload_size": "Small",
    "scale_to_zero_enabled": false,
  }]
}

В следующем table перечислены поддерживаемые типы рабочих нагрузок GPU.

Тип рабочей нагрузки GPU Экземпляр GPU Память GPU
GPU_SMALL 1xT4 16 ГБ
GPU_LARGE 1xA100 80ГБ
GPU_LARGE_2 2xA100 160ГБ

Изменение конечной точки пользовательской модели

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

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

Обслуживающий пользовательский интерфейс

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

Доступны следующие действия:

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

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

REST API

Ниже приведен пример конфигурации конечной точки update с помощью REST API. См. раздел PUT /api/2.0/serving-endpoints/{name}/config.


PUT /api/2.0/serving-endpoints/{name}/config

{
  "name": "unity-catalog-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "5",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      }
    ],
    "traffic_config":
    {
      "routes": [
        {
          "served_model_name": "my-ads-model-5",
          "traffic_percentage": 100
        }
      ]
    }
  }
}

Пакет SDK для развертываний MLflow

Пакет SDK для развёртывания MLflow использует тот же parameters, что и REST API; см. PUT /api/2.0/serving-endpoints/{name}/config, чтобы ознакомиться с деталями запроса и ответа schema.

В следующем примере кода используется модель из реестра моделей Unity Catalog:

import mlflow
from mlflow.deployments import get_deploy_client

mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")

endpoint = client.create_endpoint(
  name=f"{endpointname}",
  config={
    "served_entities": [
        {
            "entity_name": f"{catalog}.{schema}.{model_name}",
            "entity_version": "1",
            "workload_size": "Small",
            "scale_to_zero_enabled": True
        }
    ],
    "traffic_config": {
        "routes": [
            {
                "served_model_name": f"{model_name}-1",
                "traffic_percentage": 100
            }
        ]
    }
  }
)

Оценка конечной точки модели

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

Дополнительные ресурсы

Примеры записных книжек

Следующие записные книжки включают различные зарегистрированные модели Databricks, которые можно использовать для get и запуска с конечными точками обслуживания моделей. Дополнительные примеры см. в руководстве по . Развертывание и запрос пользовательской модели.

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

Обучение и регистрация модели scikit-learn для записной книжки обслуживания модели

Get записная книжка

Обучение и регистрация модели HuggingFace для модели, обслуживающей записную книжку

Get записная книжка