Почему мы переходим на конечные точки вывода Hugging Face и, возможно, вам следует сделать то же самое

Мы переходим на конечные точки вывода Hugging Face, можете и вы сделать то же

Недавно компания Hugging Face запустила Inference Endpoints, который, как они сами говорят, решает проблемы использования трансформеров в производстве. Inference Endpoints – это управляемый сервис, который позволяет вам:

  • Развернуть (почти) любую модель на Hugging Face Hub
  • На любом облачном провайдере (AWS, Azure, GCP в процессе)
  • На различных типах экземпляров (включая GPU)
  • Мы переключаем некоторые из наших моделей машинного обучения (ML), которые выполняют вывод на центральном процессоре, на этот новый сервис. В этой статье речь пойдет о том, почему мы это делаем и почему вам тоже стоит обратить на это внимание.

Что мы делали раньше?

Модели, которые мы перевели на Inference Endpoints, ранее управлялись внутренне и работали на AWS Elastic Container Service (ECS), поддерживаемом AWS Fargate. Это дает вам бессерверный кластер, который может выполнять задачи на основе контейнеров. Наш процесс был следующим:

  • Обучение модели на экземпляре с GPU (предоставленном CML, обученном с использованием transformers)
  • Загрузка в Hugging Face Hub
  • Создание API для обслуживания модели (FastAPI)
  • Упаковка API в контейнер (Docker)
  • Загрузка контейнера в AWS Elastic Container Repository (ECR)
  • Развертывание модели на кластере ECS

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

Что мы делаем сейчас?

С Inference Endpoints наша схема работы выглядит следующим образом:

  • Обучение модели на экземпляре с GPU (предоставленном CML, обученном с использованием transformers)
  • Загрузка в Hugging Face Hub
  • Развертывание с использованием Inference Endpoints от Hugging Face.

Так что это значительно проще. Мы также могли бы использовать другой управляемый сервис, такой как SageMaker, Seldon или Bento ML и т.д., но поскольку мы уже загружаем нашу модель в Hugging Face Hub для использования в качестве реестра моделей, и мы довольно много вкладываемся в другие инструменты Hugging Face (такие как transformers и AutoTrain), использование Inference Endpoints имеет смысл для нас.

Как насчет времени отклика и стабильности?

Перед переходом на Inference Endpoints мы тестировали различные типы конечных точек CPU с использованием ab.

Для ECS мы не проводили столь обширного тестирования, но мы знаем, что у большого контейнера задержка составляла около ~200 мс от экземпляра в том же регионе. Тесты, которые мы проводили для Inference Endpoints, основывались на модели классификации текста, которая была тонко настроена на RoBERTa с использованием следующих параметров тестирования:

  • Регион запросов: eu-east-1
  • Размер экземпляра запроса: t3-medium
  • Регион конечной точки вывода: eu-east-1
  • Количество реплик конечной точки: 1
  • Параллельные соединения: 1
  • Запросы: 1000 (1000 запросов за 1-2 минуты даже с одним соединением представляют очень интенсивное использование для данного приложения)

В следующей таблице показана задержка (мс ± стандартное отклонение и время выполнения теста в секундах) для четырех конечных точек CPU с процессором Intel Ice Lake.

size   |  vCPU (cores) |   Memory (GB)  |  ECS (ms) |  🤗 (ms)
----------------------------------------------------------------------
small  |  1            |  2             |   _       | ~ 296   
VoAGI |  2            |  4             |   _       | 156 ± 51 (158s)  
large  |  4            |   8            |   ~200    | 80 ± 30 (80s)   
xlarge |  8            | 16             |  _        | 43 ± 31 (43s)    

Из этих результатов видно, что приложение, которое будет использовать эти конечные точки, обслуживает запросы в режиме реального времени, поэтому нам необходимо минимальное время отклика. Мы видим, что обычный контейнер Hugging Face работает более чем в два раза быстрее, чем наш специальный контейнер, запущенный на ECS – самый медленный отклик, который мы получили от большой конечной точки вывода, составлял всего 108 мс.

А что насчет стоимости?

Сколько все это стоит? В таблице ниже приведено сравнение стоимости того, что мы делали ранее (ECS + Fargate) и использования Inference Endpoints.

размер  |  vCPU         |   Память (ГБ)  |  ECS      |  🤗       |  % разница
----------------------------------------------------------------------
малый  |  1            |  2             |  $ 33.18  | $ 43.80   |  0.24
VoAGI |  2            |  4             |  $ 60.38  | $ 87.61   |  0.31 
большой  |  4            |  8             |  $ 114.78 | $ 175.22  |  0.34
очень большой |  8            | 16             |  $ 223.59 | $ 350.44  | 0.5 

Мы можем сказать пару вещей об этом. Во-первых, мы хотим управляемое решение для развертывания, у нас еще нет отдельной команды MLOPs, поэтому мы ищем решение, которое поможет нам минимизировать время, которое мы тратим на развертывание моделей, даже если это стоит немного дороже, чем обработка развертывания самостоятельно.

Endpoint’ы для вывода результатов более дорогие, чем то, что мы делали раньше, здесь есть увеличенные затраты между 24% и 50%. На масштабе, на котором мы работаем сейчас, эти дополнительные затраты, разница примерно в $60 в месяц для крупного инстанса CPU, ничто по сравнению с временем и когнитивной нагрузкой, которые мы сохраняем, не беспокоясь о API и контейнерах. Если бы мы развертывали сотни микросервисов ML, мы, вероятно, захотели бы еще раз подумать, но это, вероятно, справедливо для многих подходов к хостингу.

Некоторые замечания и оговорки:

  • Вы можете найти цены на Endpoint’ы для вывода результатов здесь, но при развертывании нового Endpoint’а через графический интерфейс отображается другое число. Я использовал последнее, которое выше.
  • Значения, которые я представляю в таблице для ECS + Fargate, являются недооценкой, но, вероятно, не сильно. Я извлек их со страницы ценообразования Fargate, и они включают только стоимость размещения экземпляра. Я не включаю в них внешний/внутренний трафик данных (скорее всего, самым большим является загрузка модели из Hugging Face Hub), и я не включаю затраты, связанные с ECR.

Другие соображения

Варианты развертывания

В настоящее время вы можете развернуть Endpoint для вывода результатов через графический интерфейс пользователя или с использованием RESTful API. Вы также можете использовать нашу командную строку hugie (о которой будет рассказано в будущем блоге) для запуска Endpoint’ов для вывода результатов в одной строке кода, передавая конфигурацию, это действительно так просто:

hugie endpoint create example/development.json

Для меня отсутствует пользовательский terraform-провайдер. Хорошо и правильно развернуть Endpoint для вывода результатов из действия GitHub с использованием hugie, как мы делаем, но было бы лучше, если бы мы могли использовать потрясающую машину состояний terraform для отслеживания этих процессов. Я уверен, что кто-то (если не Hugging Face) скоро напишет его – если нет, сделаем это мы.

Размещение нескольких моделей на одном Endpoint’е

Филипп Шмид опубликовал очень интересный блог о том, как написать пользовательский класс обработчика Endpoint’а, чтобы вы могли размещать несколько моделей на одном Endpoint’е и, возможно, сэкономить немало денег. Его блог был о выводе результатов с использованием GPU, и единственным ограничением является количество моделей, которые вы можете поместить в память GPU. Я предполагаю, что это также будет работать для экземпляров CPU, хотя я еще не пробовал.

В заключение…

Мы считаем, что Endpoint’ы для вывода результатов Hugging Face – очень простой и удобный способ развертывания моделей transformer (и sklearn) в Endpoint’ы, чтобы их можно было использовать приложением. Хотя они стоят немного дороже, чем предыдущий подход с использованием ECS, это стоит того, потому что они экономят нам время на размышления о развертывании, мы можем сосредоточиться на том, что хотим делать: создавать NLP-решения для наших клиентов и помогать им решать их проблемы.

Если вас интересуют Endpoint’ы для вывода результатов Hugging Face для вашей компании, свяжитесь с нами здесь – наша команда свяжется с вами, чтобы обсудить ваши требования!

Эта статья была опубликована 15 февраля 2023 года в VoAGI.