Введение

В последнее время меня интересуют машинное обучение и искусственный интеллект. С быстрым развитием новых инструментов, таких как ChatGPT и Google BARD, мне стало любопытно, как на самом деле создаются эти технологии. Хотя мой опыт в основном связан с веб-разработкой с полным стеком, я исследую увлекательный мир машинного обучения и искусственного интеллекта. По мере того, как я узнавал больше, мой интерес продолжал расти, и я решил применить свои новые знания на практике, создав API для анализа настроений.

В этом сообщении блога я расскажу вам о своем опыте разработки API с использованием Python, Flask, библиотеки Hugging Face Transformers, Docker и ее развертывания на AWS. Я также поделюсь проблемами, с которыми я столкнулся, и уроками, которые я извлек на этом пути, в надежде, что мой опыт поможет вам в ваших будущих проектах.

Демо

Примечание. Моя основная цель при развертывании заключалась в том, чтобы просто получить опыт развертывания API (а не их обслуживания), поэтому URL-адрес, показанный в видео, скорее всего, будет отключен.

Процесс развития

1. Выбор модели и библиотек

Я начал с изучения предварительно обученных моделей и библиотек для анализа настроений. Я выбрал библиотеку Трансформатор Hugging Face и модель finiteautomata/bertweet-base-sentiment-analysis. Эта модель основана на BERT и оптимизирована для задач анализа настроений.

Посмотреть код логики модели можно здесь.

2. Создание приложения Flask

Затем я создал простое приложение Flask в качестве API. Я создал конечную точку, которая принимает текстовый ввод, токенизирует его с помощью токенизатора из библиотеки Hugging Face, а затем предсказывает настроение с помощью предварительно обученной модели.

Вы можете просмотреть код приложения Flask здесь.

3. Контейнеризация приложения с помощью Docker

Чтобы упростить развертывание и управление приложением, я поместил его в контейнер с помощью Docker. Я написал Dockerfile, в котором указал среду выполнения Python, установил необходимые пакеты, загрузил модель и настроил Gunicorn в качестве точки входа.

Посмотреть Dockerfile можно здесь.

4. Развертывание приложения в AWS ECS

После локального тестирования приложения я развернул его на AWS с помощью Elastic Container Service (ECS). Я прошел процесс создания определения задачи, кластера и службы. Однако я столкнулся с проблемой, когда контейнер не работал на ECS, что, как оказалось, было связано с выбором неправильной архитектуры! После выбора правильной инфраструктуры ARM контейнер успешно запустился.

5. Настройка балансировщика нагрузки

Чтобы сделать API доступным для всего мира, я настроил балансировщик нагрузки для своего сервиса. Первоначально я столкнулся с некоторыми проблемами с зависанием балансировщика нагрузки, но я решил проблему, настроив входящее правило группы безопасности, чтобы принимать весь трафик отовсюду.

Вот как я настроил балансировщик нагрузки:

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

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

Основные выводы и извлеченные уроки

Я многому научился в ходе разработки этого проекта и получил ценный опыт. Вот некоторые ключевые выводы:

  1. Не торопитесь, исследуя и выбирая правильную предварительно обученную модель и библиотеку для ваших нужд. Это может сэкономить много времени и усилий. Вначале я использовал модель, которая не была настроена для анализа настроений, но я не осознавал этого, что стоило мне много времени.
  2. Контейнеризация приложения с помощью Docker упрощает развертывание и делает его более управляемым, но убедитесь, что вы обращаете внимание на инфраструктуру и архитектуру на вашем локальном компьютере и на сервис, в который вы развертываете!
  3. Если вы создаете образы Docker на Mac M1, вам необходимо использовать архитектуру ARM в ECS.
  4. Правила группы безопасности играют решающую роль в управлении доступом к балансировщику нагрузки и API.
  5. Если запросы «зависают», вы можете потратить некоторое время на проверку правильности правил вашей группы безопасности.
  6. Балансировщики нагрузки помогают распределять трафик, делая ваш API более доступным и масштабируемым.

Заключение

Создание этого API анализа настроений было очень увлекательным. От выбора правильной модели до развертывания приложения на AWS я столкнулся с различными проблемами и узнал много новых технологий и концепций. Поскольку инструменты искусственного интеллекта и машинного обучения, такие как чат-боты и генерация изображений, становятся все более популярными, я считаю важным иметь базовое понимание того, как они работают. Я взволнован и оптимистично смотрю в будущее и не могу дождаться, чтобы глубже погрузиться в мир машинного обучения и искусственного интеллекта. Я надеюсь, что мое путешествие вдохновит вас на создание собственных API и участие в подобных проектах. Желаем удачи и счастливого программирования!