Введение
В последнее время меня интересуют машинное обучение и искусственный интеллект. С быстрым развитием новых инструментов, таких как 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 доступным для всего мира, я настроил балансировщик нагрузки для своего сервиса. Первоначально я столкнулся с некоторыми проблемами с зависанием балансировщика нагрузки, но я решил проблему, настроив входящее правило группы безопасности, чтобы принимать весь трафик отовсюду.
Вот как я настроил балансировщик нагрузки:
- Выбрал вариант создания балансировщика нагрузки приложений, когда создавал службу и кластер ECS. Это создает балансировщик нагрузки, который уже использует правильный VPC, подсети и целевую группу.
- Обновлено входящее правило группы безопасности, чтобы разрешить трафик отовсюду.
После внесения этих изменений API стал доступен через URL-адрес балансировщика нагрузки, и я смог успешно отправлять ему запросы.
Основные выводы и извлеченные уроки
Я многому научился в ходе разработки этого проекта и получил ценный опыт. Вот некоторые ключевые выводы:
- Не торопитесь, исследуя и выбирая правильную предварительно обученную модель и библиотеку для ваших нужд. Это может сэкономить много времени и усилий. Вначале я использовал модель, которая не была настроена для анализа настроений, но я не осознавал этого, что стоило мне много времени.
- Контейнеризация приложения с помощью Docker упрощает развертывание и делает его более управляемым, но убедитесь, что вы обращаете внимание на инфраструктуру и архитектуру на вашем локальном компьютере и на сервис, в который вы развертываете!
- Если вы создаете образы Docker на Mac M1, вам необходимо использовать архитектуру ARM в ECS.
- Правила группы безопасности играют решающую роль в управлении доступом к балансировщику нагрузки и API.
- Если запросы «зависают», вы можете потратить некоторое время на проверку правильности правил вашей группы безопасности.
- Балансировщики нагрузки помогают распределять трафик, делая ваш API более доступным и масштабируемым.
Заключение
Создание этого API анализа настроений было очень увлекательным. От выбора правильной модели до развертывания приложения на AWS я столкнулся с различными проблемами и узнал много новых технологий и концепций. Поскольку инструменты искусственного интеллекта и машинного обучения, такие как чат-боты и генерация изображений, становятся все более популярными, я считаю важным иметь базовое понимание того, как они работают. Я взволнован и оптимистично смотрю в будущее и не могу дождаться, чтобы глубже погрузиться в мир машинного обучения и искусственного интеллекта. Я надеюсь, что мое путешествие вдохновит вас на создание собственных API и участие в подобных проектах. Желаем удачи и счастливого программирования!