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

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

Note

Экспресс-развертывания ранее назывались бессерверными оптимизированными развертываниями.

Что такое экспресс-развертывания?

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

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

Стандартные и экспресс-развертывания

В следующей таблице сравнивается стандартное развертывание и экспресс-развертывание.

Аспект Стандартное развертывание Экспресс-развертывание
При построении среды Образ контейнера создается во время развертывания. Артефакты и среда упаковываются при регистрации модели.
Обучение и обслуживание среды Среда обслуживания может не соответствовать учебной среде. Среда развертывания идентична среде ноутбука, которую вы использовали для регистрации.
Скорость развертывания Медленнее. Развертывание ожидает завершения сборки образа контейнера. Повышенное быстродействие. При развертывании пропускается сборка образа контейнера.
Скорость регистрации Стандартный. На упаковку требуется от нескольких секунд до минуты в зависимости от размера модели и среды.
Журнал событий развертывания Показывает события создания образов контейнеров. Не отображает события создания образа контейнера.

Экспресс-развертывания переносят одноразовую операцию упаковки на этап регистрации модели, что добавляет от нескольких секунд до минуты к вызову register_model в зависимости от размера модели и среды. Взамен развертывание выполняется значительно быстрее: полностью минуя этап сборки образа контейнера. Эта сборка также часто становится причиной сбоев при развертывании (например, при разрешении зависимостей и сборке образа), поэтому её пропуск устраняет целый класс проблем. Журнал событий развертывания для экспресс-модели не содержит событий сборки контейнера.

Requirements

Конечные точки экспресс-развертывания имеют те же требования, что и конечная точка обслуживания модели. См. раздел Требования.

Дополнительно:

  • Модель должна быть пользовательской моделью
  • Модель должна быть задокументирована и зарегистрирована в Serverless Notebook с использованием версии 3 или более поздней.
  • Модель должна быть занесена в журнал и зарегистрирована в mlflow>=3.12 и databricks-sdk>=0.102.0
  • Модель должна быть зарегистрирована в каталоге Unity. Вычислительные ресурсы для обслуживания должны совпадать с теми вычислительными ресурсами, на которых была зарегистрирована модель. Можно выполнить регистрацию из обычного бессерверного блокнота для развертывания на CPU или из бессерверных GPU-вычислений для развертывания на GPU.
  • Максимальный размер среды модели составляет 200 ГБ

Note

Сведения о обслуживании пользовательского LLM на вычислительных ресурсах GPU с помощью экспресс-развертываний см. в статье "Обслуживание пользовательских LLM с помощью пользовательской службы моделей".

Развернуть реранкер на GPU

В этом пошаговом руководстве описывается развертывание BAAI/bge-reranker-base, реранкера на основе кросс-энкодера, который оценивает, насколько хорошо документ отвечает на запрос. Настраивается среда, включается логирование и выполняется регистрация модели с использованием экспресс-упаковки, развертывается конечная точка, и к ней выполняются запросы.

Развертывания GPU часто завершаются сбоем из-за конфликтов версий зависимостей, например torch и CUDA. Экспресс-развертывания решают это двумя способами:

  • Фиксированный опубликованный набор библиотек, предустановленный в каждой версии бессерверной GPU-среды, при обслуживании запросов доступен в точности в том же виде, что и в ноутбуке, — та же версия среды, те же версии библиотек. Эти библиотеки не перепакуются.
  • Все дополнительные зависимости, которые вы устанавливаете в сеансе блокнота (например, с помощью %pip install), упаковываются при регистрации и восстанавливаются при обслуживании.

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

Шаг 1. Настройте бессерверный GPU-блокнот

Создайте ноутбук на бессерверных GPU-вычислениях с графическим процессором A10 и выберите версию среды 5, среду ИИ. Среда ИИ включает PyTorch и общие библиотеки машинного обучения (torchи transformersдругие). Точные закреплённые версии см. в Бессерверная среда GPU версии 5 (предварительная версия).

Установите пакеты, необходимые для экспресс-развертывания:

# Express deployment requires recent MLflow and Databricks SDK versions.
%pip install "mlflow>=3.12" "databricks-sdk>=0.102.0"
# Install the libraries your model needs. transformers is preinstalled in the
# v5 AI environment; install it explicitly because this model depends on it.
%pip install transformers
%restart_python

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

Поскольку эта модель развертывается на GPU, необходимо зафиксировать и зарегистрировать ее в бессерверной среде выполнения с GPU. Если вы случайно логируете из бессерверных CPU-вычислений, модель упаковывается с CPU-зависимостями, и конечная точка обслуживания на GPU не сможет запуститься. Добавьте следующую проверку, чтобы сразу завершаться с ошибкой, если ноутбук запущен не в среде выполнения с GPU:

import os

# This model is intended to be served on GPU, so we must log and register from a Serverless GPU runtime.
if not os.environ.get("DATABRICKS_ACCELERATOR"):
    raise RuntimeError(
        "This model MUST be logged+registered from a serverless GPU runtime, otherwise the correct dependencies will not be packaged for serving."
    )

Note

Эта проверка необходима только из-за того, что реранкер обслуживается на GPU. Модель ЦП не нуждается в ней.

Шаг 2. Регистрация модели с помощью MLflow

Загрузите реранкер в виде конвейера text-classification и зарегистрируйте его с использованием собственного flavor mlflow.transformers. Встроенный flavor автоматически фиксирует pip-зависимости модели и выполняется на GPU. Вам не нужно задавать pip_requirements, task или точку входа.

import mlflow
from transformers import pipeline

# BAAI/bge-reranker-base is a cross-encoder reranker: it scores how well a document answers a query.
pipe = pipeline("text-classification", model="BAAI/bge-reranker-base")

model_info = mlflow.transformers.log_model(
    transformers_model=pipe,
    name="bge_reranker",
    input_example={
        "text": "What is Databricks?",
        "text_pair": "Databricks is a data and AI company.",
    },
)

Important

Не регистрируйте модель с помощью аргумента registered_model_name в log_model. Этот аргумент не принимает env_pack, поэтому он регистрирует неразрывную модель. Чтобы включить экспресс-развертывание, зарегистрируйтесь отдельным шагом с помощью register_model (шаг 3), принимающего env_pack.

Шаг 3. Регистрация модели в каталоге Unity с помощью экспресс-упаковки

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

import mlflow
from mlflow.utils.env_pack import EnvPackConfig

mlflow.set_registry_uri("databricks-uc")

model_version = mlflow.register_model(
    model_uri=model_info.model_uri,
    name="main.default.bge_reranker",
    env_pack=EnvPackConfig(name="databricks_model_serving"),
)

Вместо EnvPackConfig(name="databricks_model_serving") можно использовать сокращённую форму строки env_pack="databricks_model_serving". Для рабочих областей без доступа к интернету или с пользовательскими библиотеками установите install_dependencies=False (см. параметр env_pack).

Для регистрации требуется databricks-sdk>=0.102.0. В более ранних версиях при загрузке больших артефактов модели может истечь время ожидания.

Шаг 4. Создание конечной точки обслуживания

Разверните зарегистрированную модель с помощью пакета SDK для Azure Databricks. Этот шаг развертывания совпадает с любой пользовательской моделью— только шаг регистрации (шаг 3) отличается для express.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import (
    EndpointCoreConfigInput,
    ServedEntityInput,
    ServingModelWorkloadType,
)

ENDPOINT_NAME = "bge-reranker-endpoint"

w = WorkspaceClient()
w.serving_endpoints.create_and_wait(
    name=ENDPOINT_NAME,
    config=EndpointCoreConfigInput(
        name=ENDPOINT_NAME,
        served_entities=[
            ServedEntityInput(
                name="bge-reranker",
                entity_name=model_version.name,
                entity_version=model_version.version,
                workload_type=ServingModelWorkloadType.GPU_SMALL,
                workload_size="Small",
                scale_to_zero_enabled=False,
            )
        ],
    ),
)

create_and_wait блокирует до тех пор, пока конечная точка не будет готова. GPU_SMALL достаточно для этого переранжировщика. Так как служба повторно использует ту же версию среды и восстанавливает зависимости, добавленные в записную книжку, обслуживаемая модель выполняется в тех же версиях библиотек, которые вы разработали, независимо от типа GPU.

Во время развертывания конечной точки откройте вкладку "События конечной точки" в пользовательском интерфейсе обслуживания. Так как это экспресс-развертывание, журнал событий не отображает события создания образа контейнера (стандартное развертывание показано Container image creation initiated ниже Container image creation finished successfully). Когда конечная точка будет готова, её состояние будет отображаться как Готово.

Шаг 5. Запрос конечной точки

Кросс-энкодер оценивает соответствие запроса документу, поэтому отправьте поля text и text_pair. Выполняйте запросы программно с помощью SDK Databricks или curl.

Databricks SDK

w.serving_endpoints.query(
    name=ENDPOINT_NAME,
    dataframe_records=[
        {"text": "What is Databricks?", "text_pair": "Databricks is a data and AI company."},
    ],
)

curl

curl -X POST \
  -u "token:$DATABRICKS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"dataframe_records":[{"text":"What is Databricks?","text_pair":"Databricks is a data and AI company."}]}' \
  https://<workspace-url>/serving-endpoints/bge-reranker-endpoint/invocations

Конечная точка возвращает оценку релевантности для каждой пары документов запроса; Более высокие оценки указывают на лучшее совпадение. Используйте эти оценки, чтобы переранжировать документы-кандидаты.

Пример записной книжки

Импортируйте следующий блокнот, чтобы выполнить это пошаговое руководство от начала до конца.

Стартовый блокнот для переранжирования Express

Получите ноутбук

Параметр env_pack

В приведенном выше руководстве по быстрому запуску показано быстрое развертывание GPU-модели. Экспресс-развертывания также поддерживаются для моделей на CPU. В каждом случае можно включить экспресс-развертывание путем передачи env_pack в register_model:

import mlflow
from mlflow.utils.env_pack import EnvPackConfig

mlflow.register_model(
    model_info.model_uri,
    model_name,
    env_pack=EnvPackConfig(name="databricks_model_serving"),
)

env_pack упаковывает и подготавливает артефакты модели и зависимости, которые вы добавили в сеанс notebook на этапе регистрации, поэтому регистрация занимает больше времени, чем вызов без env_pack.

EnvPackConfig принимает параметр install_dependencies (True по умолчанию). Когда True, зависимости модели устанавливаются в текущую среду, чтобы подтвердить, что среда корректна.

Note

Регистрация может не выполниться в рабочих областях без доступа к Интернету или если модель зависит от настраиваемых библиотек, когда install_dependencies имеет значение True. В таких случаях задайте значение install_dependenciesFalse.

Вы можете использовать строку "databricks_model_serving" вместо EnvPackConfig(...) в качестве сокращённой записи. Это эквивалентно EnvPackConfig(name="databricks_model_serving", install_dependencies=True).