Узнайте, как развернуть веб-приложение Streamlit на AWS с проверкой подлинности с помощью AWS Cognito, и просмотрите работающий пример на GitHub!

Введение

Всем привет! Я внештатный инженер по машинному обучению, и сегодня я хочу поделиться с вами руководством по развертыванию веб-приложения Streamlit на AWS, включая аутентификацию с помощью AWS Cognito. Мне пришлось реализовать такое решение самостоятельно, и я обнаружил, что в Интернете недостаточно документации и примеров, которые отвечали бы на все мои вопросы и включали работающие примеры. Вот почему я создал единый репозиторий GitHub, где вы можете найти исчерпывающий пример и необходимую инфраструктуру Terraform как код (IAC) для простого развертывания: https://github.com/EikeKohl/paperqa-web-app/

В этой записи блога я расскажу вам о процессе развертывания веб-приложения Streamlit на AWS, включая настройку аутентификации с помощью AWS Cognito, и предоставлю подробное пошаговое руководство.

PaperQA

Пример проекта, PaperQA, демонстрирует веб-приложение Streamlit, которое запускает конвейер ответов на вопросы Haystack для документов Arxiv с использованием OpenAI. Цель этого приложения — продемонстрировать, как можно выполнять поиск информации на основе определенной базы данных документов.

Вы можете задать такие вопросы, как:

Что такое динамически взвешенное условное случайное поле?

и на основе, например. по содержанию документа https://arxiv.org/pdf/1603.03627.pdf, он ответит на ваш вопрос:

Динамически взвешенное условное случайное поле (dWCRF) — это чувствительный к затратам метод обучения для классификации несбалансированных мультиклассовых данных в реальном времени на основе взвешенных условных случайных полей (WCRF), где процесс оптимизации основан на максимизации ожидаемого общего F-показателя. В этом методе параметры стоимости динамически вычисляются во время обучения.

Вы также сможете увидеть абзацы контекста статьи, на которые ссылается чат-бот. Вот как вы используете приложение:

  1. Добавить документы в базу данных: вставьте строку URL-адресов PDF, разделенных запятыми, в верхнюю текстовую область и нажмите Добавить документы в базу данных, чтобы создать векторную базу данных FAISS с использованием указанной модели встраивания.
  2. Сбросить базу данных. Нажмите «Сбросить базу данных», чтобы удалить все загруженные документы и базу данных FAISS.
  3. Опросный лист. Введите свой вопрос в текстовую область над кнопкой «Опросный лист». Нажмите кнопку, чтобы получить соответствующий контекст из базы данных векторов и ответить на свой вопрос на основе полученного контекста.
  4. Настройка параметров. На левой боковой панели можно настроить такие параметры, как температура, максимальное количество маркеров ответа и количество совпадений контекста. Вы также можете пропустить контекст, чтобы увидеть, к чему относится ответ модели.

Развертывание

Чтобы протестировать приложение, я рекомендую сначала запустить его локально с помощью docker.

Местный

Чтобы создать образ докера, выполните следующую команду:

docker build -t paperqa .

Для локального запуска контейнера вам необходимо установить «OPENAI_API_KEY» в качестве переменной среды.

Linux/MacOS

docker run -p 8501:8501 -it \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
paperqa

Windows

docker run -p 8501:8501 -it `
-e OPENAI_API_KEY=$env:OPENAI_API_KEY `
paperqa

Приложение будет доступно по адресу http://localhost:8501/.

Развертывание на AWS

Чтобы упростить вам процесс развертывания, я включил Terraform Infrastructure as Code (IAC) в репозиторий GitHub. Этот IAC охватывает все аспекты развертывания приложения на AWS, такие как Сеть, Балансировка нагрузки приложений, Аутентификация AWS Cognito, Домен Route53. Управление, Ведение журнала Cloudwatch и Контейнерное развертывание ECS. Вот краткий обзор архитектуры:

Пошаговое руководство

  1. Зарегистрируйте свой домен: зарегистрируйте свой домен в Route53, следуя официальной документации.
  2. Запросить и проверить SSL-сертификат. Запросите SSL-сертификат для домена вашего приложения в AWS Certificate Manager в соответствии с официальной документацией. Подтвердите свой запрос сертификата SSL.
  3. Создайте секрет для ключа API OpenAI. Создайте секрет с именем paperqa_openai_api_key с ключом API OpenAI для использования в приложении в диспетчере секретов AWS в соответствии с официальной документацией.
  4. Настройка Terraform. В файле terraform/vars.tf задайте все переменные, такие как регион AWS, доменное имя и ARN сертификата SSL.
  5. Инициализировать и применить Terraform. Запустите terraform init и terraform apply в каталоге terraform. Подтвердите «да», чтобы создать необходимые ресурсы AWS.
  6. Создание и отправка образа Docker. Запустите скрипт push_to_ecr.sh, чтобы создать контейнер и отправить его в реестр Amazon Elastic Container Registry (ECR). Не забудьте настроить переменные DOCKER_REGISTRY и IMAGE_VERSION в скрипте.
  7. Обновите службу ECS. Запустите сценарий update_ecs.sh, чтобы обновить службу Amazon Elastic Container Service (ECS) новой версией образа.
  8. Добавить пользователя в свой пул пользователей Cognito. Следуйте официальной документации, чтобы добавить пользователя в свой пул пользователей Cognito. Не забудьте установить флажок Отправить приглашение по электронной почте.
  9. Доступ к развернутому приложению. После выполнения всех шагов вы сможете получить доступ к своему веб-приложению Streamlit, используя личный домен, который вы настроили в Route53.

Заключение

Я надеюсь, что вы найдете эту запись в блоге и репозиторий GitHub полезными для развертывания вашего веб-приложения Streamlit на AWS с аутентификацией с помощью AWS Cognito. Не стесняйтесь изучить пример проекта и использовать предоставленный Terraform IAC для плавного развертывания вашего приложения. Если у вас есть какие-либо вопросы, предложения или деловые запросы, пожалуйста, не стесняйтесь обращаться ко мне по адресу [email protected].

Удачного кодирования!