Перейти к содержанию
Публикация AiManual

Разворачиваем эмбеддинг-модели на Amazon SageMaker с новым Hugging Face Embedding Container: гайд и сравнение CPU и GPU

Разверните эмбеддинг-модели Snowflake Arctic, BGE и MiniLM на Amazon SageMaker за 15 минут. Пошаговый код, сравнение CPU и GPU: 5 против 130 запросов в секунду,

Коротко

Что будет в материале

  1. 01

    Что такое Hugging Face Embedding Container и зачем он нужен

  2. 02

    Пошаговый гайд: развертывание эмбеддинг-модели на SageMaker

  3. 03

    Сравнение производительности: CPU vs GPU

  4. 04

    Практические примеры использования эмбеддингов

Что такое Hugging Face Embedding Container и зачем он нужен

Hugging Face выпустила Embedding Container для Amazon SageMaker в статусе GA. Решение построено на движке Text Embedding Inference (TEI) и закрывает главную боль ML-инженеров: развертывание эмбеддинг-моделей больше не требует ручной настройки зависимостей, компиляции кастомных образов и отладки серверного кода. Вы указываете модель, выбираете инстанс и получаете рабочий эндпоинт с HTTP API.

Контейнер ориентирован на задачи, где нужны векторные представления текста: retrieval-augmented generation (RAG), семантический поиск, кластеризация, классификация. Поддерживаются открытые модели Snowflake Arctic, BGE, MiniLM и другие совместимые с TEI архитектуры. Для команд, которые уже используют SageMaker как основную платформу инференса, это прямой путь к сокращению времени деплоя с часов до минут.

Отдельный плюс: контейнер предварительно оптимизирован. TEI включает динамическое пакетирование, поддержку fp16/bf16 на GPU, эффективную токенизацию и нативные оптимизации под популярные архитектуры. Вам не нужно писать обвязку для батчинга или вручную настраивать torchserve. Всё уже внутри.

Ключевые особенности и преимущества

  • Предварительно настроенный контейнер: минимум конфигурации, максимум совместимости с SageMaker SDK.
  • Оптимизированный TEI: высокая пропускная способность и низкая латентность на GPU, адекватная работа на CPU.
  • Поддержка открытых моделей: Snowflake Arctic, BGE, MiniLM и другие.
  • Безопасность: контейнер проходит стандартные проверки AWS, работает в изолированной VPC, совместим с IAM-политиками.
  • Интеграция с SageMaker: создание модели и эндпоинта через Python SDK без ручного управления инфраструктурой.

Если вы уже работали с партнёрством Hugging Face и AWS, то знаете: SageMaker остаётся основной площадкой для запуска open-source моделей. Embedding Container продолжает эту линию, но фокусируется на компактных и быстрых моделях эмбеддингов, а не на генеративных LLM.

Пошаговый гайд: развертывание эмбеддинг-модели на SageMaker

Ниже - рабочий сценарий деплоя модели BGE или Snowflake Arctic через SageMaker Python SDK. Весь процесс занимает 10–15 минут без учёта времени на старт инстанса.

Настройка окружения и prerequisites

Потребуется AWS-аккаунт с правами на создание IAM-ролей, SageMaker-ресурсов и доступ к ECR. Установите SageMaker SDK:

pip install sagemaker boto3

Инициализируйте сессию и определите роль:

import sagemaker
from sagemaker import get_execution_role

sagemaker_session = sagemaker.Session()
role = get_execution_role()
region = sagemaker_session.boto_region_name

IAM-роль должна включать политики AmazonSageMakerFullAccess и доступ к ECR для загрузки образа контейнера. Если вы работаете в SageMaker Studio или ноутбуке, роль по умолчанию уже содержит нужные разрешения.

Выбор инстанса: CPU или GPU?

Ключевая развилка. CPU-инстанс дешевле, но медленнее. GPU-инстанс A10G быстрее на порядок, но стоит дороже. Ориентировочные цифры из тестов:

  • CPU-инстанс ($0.204/час): около 5 запросов в секунду, латентность около 2 секунд при 10 конкурентных запросах.
  • GPU-инстанс A10G: около 130 запросов в секунду, латентность около 4 мс.

Для прототипа, разовой индексации документов или низкой нагрузки CPU достаточно. Для production с реальными пользователями и жёсткими требованиями к задержке берите GPU. Разница в скорости - примерно 26 раз по пропускной способности и 500 раз по латентности. Это не погрешность, это смена класса решения.

Загрузка контейнера и создание эндпоинта

Контейнер доступен в ECR. Укажите image URI, затем создайте модель и разверните эндпоинт. Пример для модели BGE на GPU:

from sagemaker.huggingface import HuggingFaceModel

image_uri = f"763104351884.dkr.ecr.{region}.amazonaws.com/huggingface-pytorch-tei:2.0.0"

model = HuggingFaceModel(
    image_uri=image_uri,
    role=role,
    env={
        "HF_MODEL_ID": "BAAI/bge-base-en-v1.5",
        "HF_TASK": "feature-extraction"
    }
)

predictor = model.deploy(
    initial_instance_count=1,
    instance_type="ml.g5.xlarge",
    endpoint_name="bge-embedding-endpoint"
)

Для CPU замените instance_type на ml.c5.xlarge или ml.m5.xlarge. Модель Snowflake Arctic указывается как Snowflake/snowflake-arctic-embed-m, MiniLM - sentence-transformers/all-MiniLM-L6-v2. После старта эндпоинта можно отправлять запросы.

Если вы раньше разворачивали генеративные модели на SageMaker, процесс покажется знакомым. Подробный разбор оптимизации инференса с новым Python SDK есть в отдельном руководстве.

Сравнение производительности: CPU vs GPU

Цифры ниже получены на модели BGE-base с батчем из 10 конкурентных запросов. Нагрузка генерировалась последовательно, измерялись пропускная способность и латентность ответа.

Методика тестирования

Использовалась модель BAAI/bge-base-en-v1.5. Запросы отправлялись через boto3 клиент к развёрнутому эндпоинту SageMaker. Конкурентность 10 запросов имитировала одновременную работу нескольких пользователей. Замерялись средняя латентность и количество успешных запросов в секунду.

Результаты и анализ

ИнстансСтоимость, $/часПропускная способность, req/sЛатентностьСтоимость на 1000 запросов, $
CPU (c5.xlarge)0.204~5~2 сек~0.0113
GPU (A10G, g5.xlarge)~1.0~130~4 мс~0.0021

GPU выигрывает по всем метрикам, кроме цены за час. Но стоимость на 1000 запросов у GPU ниже в 5 раз, потому что он обрабатывает на порядок больше запросов за то же время. Для высоконагруженных систем GPU оправдан экономически. Для прототипов и редких вызовов CPU остаётся разумным выбором: вы платите только за время работы эндпоинта.

Если сравнивать с Hugging Face Inference Endpoints, где задержка на CPU-эндпоинте снизилась с 200 мс до 80 мс, SageMaker с TEI на GPU даёт ещё более агрессивные показатели. Для задач с жёсткими SLO по латентности это принципиально.

Практические примеры использования эмбеддингов

Развёрнутый эндпоинт отдаёт векторные представления текста. Дальше они работают в вашем пайплайне: поиск, кластеризация, классификация, RAG.

Интеграция с RAG

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

import boto3
import json

client = boto3.client("sagemaker-runtime", region_name=region)

response = client.invoke_endpoint(
    EndpointName="bge-embedding-endpoint",
    ContentType="application/json",
    Body=json.dumps({"inputs": "Как настроить IAM-роль для SageMaker?"})
)

embedding = json.loads(response["Body"].read())
print(embedding[0][:5])  # первые 5 значений вектора

Для индексации документов используйте тот же вызов в цикле. Размерность вектора зависит от модели: у BGE-base это 768, у Snowflake Arctic - 1024. Проверяйте размерность перед созданием индекса в векторной базе.

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

Ограничения и соображения

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

Производительность зависит от выбранного инстанса и модели. Цифры из тестов нельзя переносить на все сценарии: модель большего размера на том же CPU даст меньшую пропускную способность. Проводите собственные замеры перед запуском в production.

Следите за затратами. Эндпоинт, забытый после тестирования, продолжает списывать деньги. Используйте таймеры остановки или удаляйте эндпоинты после завершения экспериментов. Контейнер находится в GA, но Hugging Face может выпускать обновления: проверяйте актуальную версию image URI в документации.

Заключение

Hugging Face Embedding Container упрощает развертывание эмбеддинг-моделей на SageMaker до нескольких строк кода. GPU-инстанс A10G даёт 130 запросов в секунду с латентностью 4 мс, CPU-инстанс - 5 запросов в секунду с латентностью 2 секунды. Выбор между ними определяется требованиями к скорости и бюджетом.

Начните с CPU для прототипа, замерьте реальную нагрузку, затем переходите на GPU при необходимости. Код из статьи готов к использованию: замените модель, выберите инстанс и разверните эндпоинт. Для более глубокого погружения в тему оптимизации инференса на SageMaker изучите руководство по новому Python SDK.

Подписаться на канал