Как развернуть модели Hugging Face на Amazon SageMaker: пошаговое руководство

Как развернуть модели Hugging Face на Amazon SageMaker: пошаговое руководство

Разверните любую из 10 000+ моделей Hugging Face на Amazon SageMaker одной строкой кода. Пошаговое руководство с примерами: от выбора модели до первого инференса за 5 минут. Без глубоких знаний DevOps.

Введение: что изменилось с партнерством Hugging Face и Amazon SageMaker

Партнерство Hugging Face и Amazon SageMaker изменило способ запуска ML-моделей в продакшн. Раньше развертывание требовало написания кода для предобработки, постобработки, настройки сервера и контейнеризации. Теперь это делается одной строкой кода. Инструмент, который сделал это возможным, - Inference Toolkit. Это готовая обвязка на основе pipelines transformers, которая автоматически обрабатывает входные данные и форматирует выходные.

Статья - практическое руководство. Мы покажем два основных способа: развертывание уже обученной модели из S3 и загрузку любой из 10 000+ публичных моделей с Hugging Face Model Hub прямо в SageMaker. Вы узнаете, как запустить модель анализа тональности за пять минут, даже если у вас нет глубоких знаний DevOps. Если вы хотите понять, как ускорить внедрение AI-решений в компании, этот разбор - для вас.

Ранее мы рассказывали, как Hugging Face ускорил трансформерный вывод в 100 раз. Теперь фокус - на простоте развертывания.

Что такое Inference Toolkit и почему он важен

Inference Toolkit - это компонент, который Hugging Face и Amazon SageMaker разработали совместно. Он встроен в образ Docker-контейнера для инференса. Его задача - взять на себя всю рутину: загрузку модели, токенизацию, прогон через pipeline и форматирование ответа. Разработчику больше не нужно писать эти шаги вручную.

Toolkit совместим с популярными архитектурами: BERT, GPT, T5, RoBERTa, DistilBERT и другими. Он автоматически определяет задачу по конфигурации модели и подбирает нужный pipeline. Для модели классификации текста Toolkit сам токенизирует входную строку и возвращает JSON с метками и вероятностями. Для генерации текста - принимает промпт и отдает сгенерированную последовательность.

Как Toolkit упрощает жизнь разработчику

Сравним два подхода. Раньше для развертывания модели требовалось: написать скрипт загрузки модели из хранилища, код для токенизации входных данных, вызов модели, декодирование ответа, постобработку и упаковку в HTTP-ответ. Это десятки строк кода и часы отладки. С Inference Toolkit весь процесс сводится к указанию пути к модели и запуску endpoint. SageMaker сам поднимает контейнер, Toolkit внутри контейнера загружает модель и настраивает pipeline. Вы отправляете запрос с текстом - получаете готовый результат.

Это снижает порог входа. Команды без выделенных DevOps-инженеров могут запускать модели в облаке. Стартапы экономят недели разработки. Enterprise-компании ускоряют эксперименты с AI.

Два способа развертывания: из S3 и из Model Hub

Inference Toolkit поддерживает два сценария. Выбор зависит от того, есть ли у вас собственная обученная модель или вы хотите использовать готовую.

Развертывание своей модели из S3

Этот способ подходит, если вы уже обучили модель в формате Hugging Face и сохранили ее в Amazon S3. Процесс состоит из четырех шагов.

Первый шаг - убедиться, что модель сохранена корректно. В директории должны быть файлы config.json, tokenizer.json или tokenizer_config.json, pytorch_model.bin или tf_model.h5. Эту директорию нужно загрузить в S3-бакет.

Второй шаг - создать SageMaker модель. В консоли SageMaker или через Python SDK вы указываете путь к S3 и образ контейнера с Inference Toolkit. Образ предоставляется Hugging Face и доступен в ECR. Пример кода:

from sagemaker.huggingface import HuggingFaceModel

model = HuggingFaceModel(
    model_data='s3://my-bucket/my-model/model.tar.gz',
    role='SageMakerRole',
    transformers_version='4.26',
    pytorch_version='1.13',
    py_version='py39'
)

Третий шаг - создать endpoint-конфигурацию и endpoint. Это делается одной командой:

predictor = model.deploy(
    initial_instance_count=1,
    instance_type='ml.g4dn.xlarge'
)

Четвертый шаг - отправить тестовый запрос. Метод predict принимает словарь с ключом inputs:

result = predictor.predict({
    'inputs': 'Этот сервис работает отлично!'
})
print(result)

Endpoint возвращает JSON с результатом инференса. Для задачи классификации это будет список меток с вероятностями.

Развертывание модели из Hugging Face Model Hub

Этот способ - для тех, кто хочет использовать готовую модель без предварительного обучения. На Model Hub доступно более 10 000 моделей: от анализа тональности до генерации кода.

Первый шаг - выбрать модель на Hugging Face Hub. Например, distilbert-base-uncased-finetuned-sst-2-english для анализа тональности английского текста. Запомните полное имя модели.

Второй шаг - создать SageMaker модель без указания model_data. Вместо этого передается имя модели из Hub через переменные окружения:

model = HuggingFaceModel(
    env={
        'HF_MODEL_ID': 'distilbert-base-uncased-finetuned-sst-2-english',
        'HF_TASK': 'text-classification'
    },
    role='SageMakerRole',
    transformers_version='4.26',
    pytorch_version='1.13',
    py_version='py39'
)

Третий шаг - развернуть endpoint той же командой deploy. Четвертый - отправить запрос. Код идентичен предыдущему примеру. Разница только в том, что модель загружается с Hub автоматически при старте контейнера.

Оба способа одинаково просты. Выбор зависит от того, где находится ваша модель - в S3 или на Hub.

Практический пример: развертываем модель анализа тональности за 5 минут

Проведем сквозной пример. Задача - запустить модель, которая определяет, положительный отзыв или отрицательный. Используем модель distilbert-base-uncased-finetuned-sst-2-english из Model Hub.

Полный код на Python с использованием SageMaker SDK:

from sagemaker.huggingface import HuggingFaceModel
import sagemaker

# Создаем сессию SageMaker
session = sagemaker.Session()
role = sagemaker.get_execution_role()

# Создаем модель с указанием имени из Hub
model = HuggingFaceModel(
    env={
        'HF_MODEL_ID': 'distilbert-base-uncased-finetuned-sst-2-english',
        'HF_TASK': 'text-classification'
    },
    role=role,
    transformers_version='4.26',
    pytorch_version='1.13',
    py_version='py39'
)

# Развертываем endpoint
predictor = model.deploy(
    initial_instance_count=1,
    instance_type='ml.g4dn.xlarge'
)

# Отправляем запрос
result = predictor.predict({
    'inputs': 'I really enjoyed this movie, it was fantastic!'
})
print(result)

Ответ будет выглядеть так:

[{'label': 'POSITIVE', 'score': 0.9998}]

Модель вернула метку POSITIVE с вероятностью 99,98%. Интерпретация простая: поле label содержит класс, поле score - уверенность модели от 0 до 1.

Весь процесс - от написания кода до получения результата - занимает около пяти минут. Основное время уходит на создание endpoint (обычно 3-4 минуты). Сам код - семь строк.

Кому это нужно: сценарии использования в реальном бизнесе

Inference Toolkit решает конкретные бизнес-задачи. Рассмотрим три типовых сценария.

Стартап разрабатывает продукт с AI-фичей - например, чат-бот для поддержки клиентов. Команда из трех разработчиков не имеет опыта в MLOps. Раньше им пришлось бы нанимать DevOps-инженера или тратить недели на настройку инфраструктуры. С Inference Toolkit они выбирают модель на Hub, развертывают endpoint одной командой и интегрируют его в продукт через REST API. Время вывода фичи на рынок сокращается с месяцев до дней.

Средняя компания автоматизирует обработку обращений клиентов. Ежемесячно приходят тысячи писем, их нужно классифицировать по темам и приоритетам. Команда обучает свою модель на исторических данных, сохраняет ее в S3 и развертывает через Toolkit. Без написания кода предобработки и постобработки. Результат - снижение времени обработки обращений на 60%.

Крупное предприятие строит внутреннюю платформу для ML-экспериментов. Разные отделы хотят тестировать модели: финансисты - для анализа отчетов, HR - для скрининга резюме, маркетинг - для генерации текстов. Inference Toolkit дает единый интерфейс развертывания. Любая команда может запустить модель из Hub или из S3, не привлекая центральную IT-команду. Это ускоряет цикл экспериментов и снижает нагрузку на инфраструктурных инженеров.

Если вы работаете с генеративными моделями, обратите внимание на интеграцию NVIDIA и Hugging Face для дообучения генеративных моделей. А для тех, кто хочет кастомизировать модели под бизнес-задачи, будет полезна статья про мультимодальную модель Inkling с открытыми весами.

Заключение: что дальше?

Развертывание моделей Hugging Face на Amazon SageMaker стало простым благодаря Inference Toolkit. Два способа - из S3 и из Model Hub - покрывают большинство потребностей: от запуска собственных обученных моделей до использования готовых решений из каталога в 10 000+ позиций. Порог входа снижен: для старта не нужны глубокие знания DevOps, достаточно базового Python и понимания задачи.

Попробуйте самостоятельно. Выберите модель на Hugging Face Hub, выполните семь строк кода из примера выше и получите первый результат через пять минут. Документация доступна на сайтах Hugging Face и Amazon SageMaker.

Есть вопрос или заметили неточность? Напишите нам.

Отправить тому, кому пригодится

Ссылка сохранит весь материал без сокращений.

По почте

Заметили неточность? Сообщить редакции