Узнайте, как развернуть веб-приложение 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-показателя. В этом методе параметры стоимости динамически вычисляются во время обучения.
Вы также сможете увидеть абзацы контекста статьи, на которые ссылается чат-бот. Вот как вы используете приложение:
- Добавить документы в базу данных: вставьте строку URL-адресов PDF, разделенных запятыми, в верхнюю текстовую область и нажмите Добавить документы в базу данных, чтобы создать векторную базу данных FAISS с использованием указанной модели встраивания.
- Сбросить базу данных. Нажмите «Сбросить базу данных», чтобы удалить все загруженные документы и базу данных FAISS.
- Опросный лист. Введите свой вопрос в текстовую область над кнопкой «Опросный лист». Нажмите кнопку, чтобы получить соответствующий контекст из базы данных векторов и ответить на свой вопрос на основе полученного контекста.
- Настройка параметров. На левой боковой панели можно настроить такие параметры, как температура, максимальное количество маркеров ответа и количество совпадений контекста. Вы также можете пропустить контекст, чтобы увидеть, к чему относится ответ модели.
Развертывание
Чтобы протестировать приложение, я рекомендую сначала запустить его локально с помощью 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. Вот краткий обзор архитектуры:
Пошаговое руководство
- Зарегистрируйте свой домен: зарегистрируйте свой домен в Route53, следуя официальной документации.
- Запросить и проверить SSL-сертификат. Запросите SSL-сертификат для домена вашего приложения в AWS Certificate Manager в соответствии с официальной документацией. Подтвердите свой запрос сертификата SSL.
- Создайте секрет для ключа API OpenAI. Создайте секрет с именем
paperqa_openai_api_key
с ключом API OpenAI для использования в приложении в диспетчере секретов AWS в соответствии с официальной документацией. - Настройка Terraform. В файле
terraform/vars.tf
задайте все переменные, такие как регион AWS, доменное имя и ARN сертификата SSL. - Инициализировать и применить Terraform. Запустите
terraform init
иterraform apply
в каталогеterraform
. Подтвердите «да», чтобы создать необходимые ресурсы AWS. - Создание и отправка образа Docker. Запустите скрипт
push_to_ecr.sh
, чтобы создать контейнер и отправить его в реестр Amazon Elastic Container Registry (ECR). Не забудьте настроить переменныеDOCKER_REGISTRY
иIMAGE_VERSION
в скрипте. - Обновите службу ECS. Запустите сценарий
update_ecs.sh
, чтобы обновить службу Amazon Elastic Container Service (ECS) новой версией образа. - Добавить пользователя в свой пул пользователей Cognito. Следуйте официальной документации, чтобы добавить пользователя в свой пул пользователей Cognito. Не забудьте установить флажок Отправить приглашение по электронной почте.
- Доступ к развернутому приложению. После выполнения всех шагов вы сможете получить доступ к своему веб-приложению Streamlit, используя личный домен, который вы настроили в Route53.
Заключение
Я надеюсь, что вы найдете эту запись в блоге и репозиторий GitHub полезными для развертывания вашего веб-приложения Streamlit на AWS с аутентификацией с помощью AWS Cognito. Не стесняйтесь изучить пример проекта и использовать предоставленный Terraform IAC для плавного развертывания вашего приложения. Если у вас есть какие-либо вопросы, предложения или деловые запросы, пожалуйста, не стесняйтесь обращаться ко мне по адресу [email protected].
Удачного кодирования!