Сделайте свое приложение для машинного обучения доступным для всего мира без головной боли!

Введение

В дополнение к разработке моделей машинного обучения очень ценным навыком является возможность сделать их доступными для внешнего мира. Попытка помочь вам приобрести такой навык является основной целью этой статьи. Основное внимание уделяется использованию DagsHub, DVC и EC2instance для плавной индустриализации вашего приложения машинного обучения.

Сначала вы сможете создать свое Streamlitapp, а затем понять пошаговый подход к его развертыванию в рабочей среде.

Задача машинного обучения — напоминание

Приложение, которое мы будем развертывать, является производным от проекта Многоязычная классификация. Цель состояла в том, чтобы предсказать основные полярности данного текста на одном из следующих 5 языков: английский, французский, немецкий, русский и испанский. Пожалуйста, обратитесь к ссылке выше для более подробной информации.

Приложение Streamlit — процесс сборки

Цель этого раздела — сосредоточиться на создании двух основных функций приложения Streamlit и его запуске на нашем локальном компьютере.

Примечание. Вы также можете найти полный исходный код приложения в конце статьи.

Первые основные функции — первая часть приложения

Эта первая часть связана с отображением глобальных показателей модели (показатель F1 и точность) для каждого из 5 языков. Но перед этим мы также рассмотрим реализацию разделов логотипа и описания.

  • Разделы с логотипом, описанием и показателями

Отображение изображения очень просто с подсветкой st.image. Также st.markdown позволяет отображать тексты в формате Markdown.

Используя st.selectbox, мы можем выбирать между оценкой F1 и точностью. По умолчанию оценка F1 модели отображается автоматически. Но у пользователя есть возможность изменить его на точность.

Пользовательский ввод и прогнозы модели — вторая часть приложения

Этот раздел больше относится к интеллектуальной части приложения. Он предсказывает лежащие в основе полярности настроений предложения, предоставленного пользователем. Для этого предусмотрены два варианта, как показано ниже.

  • Раздел описания

Этот раздел выполняет два действия: показывает 🚀 описание и варианты взаимодействия (варианты 1 и 2), доступные пользователю. Каждое действие выполняется простым st.markdown

  • Раскрывающийся список и разделы с произвольным текстом

Пользователь может выбрать одно из 5 предложений из выпадающего списка, каждое на другом языке. С другой стороны, он/она может предоставить свой собственный текст для предсказания в области произвольного текста. В обоих случаях мы используем потоковую функцию st.form для получения ввода пользователей, затем, наконец, загружаем модель и запускаем прогнозы.

В области произвольного текста выполняется первая проверка, чтобы убедиться, что предложение, предоставленное пользователем, является одним из 5 языков, рассматриваемых моделью. Если это не так, отображается красивое сообщение, информирующее пользователя.

Запустите свое потоковое приложение

После создания приложения вы можете запустить его с помощью команды streamlit run.

streamlit run app.py

Предыдущая команда генерирует следующее сообщение для доступа к приложению с двух URL-адресов.

  • Local URL — это мой локальный хост, только я могу получить к нему доступ на своей машине.
  • Network URL — это URL-адрес, доступный любому пользователю в той же подсети, что и я. Однако никто за пределами этих двух сетей не может получить доступ к моему приложению.

Цель состоит в том, чтобы сделать его доступным для всех на этой планете!🪐 что мы и будем делать в следующем разделе.

Процесс развертывания приложения на AWS

Более естественным шагом будет развертывание приложения в рабочей среде. Это делается следующим образом: настройте экземпляр EC2, отправьте данные модели и метрик в Dagshub с помощью DVC и запустите приложение на EC2.

Выберите, создайте и настройте экземпляр EC2

EC2 расшифровывается как «эластичное вычислительное облако». Это виртуальный сервер для запуска приложений в инфраструктуре Amazon Web Service. В этом разделе мы увидим, как создать экземпляр и выполнить настройки.

Выберите инстанс EC2

После входа в Консоль управления AWS вы можете искать EC2 на вкладке Сервисы. который автоматически отображает вторую страницу для выбора фактической службы EC2.

Затем выберите Экземпляры прямо под опцией Экземпляры. Вы можете видеть, что у меня есть экземпляр t2.xlarge, на котором размещено мое текущее потоковое приложение😉. Эта страница может быть для вас пустой, если вы еще не запускаете ни одного экземпляра.

Создание инстанса EC2 — 6 основных шагов

Выбрав вкладку Запустить экземпляры, вы попадете на следующую страницу со всеми шагами, от выбора образа машины Amazon (AMI) до настройки группы безопасности.

  1. Выберите AMI: это шаблон, содержащий конфигурацию программного обеспечения, такую ​​как операционная система, сервер приложений и приложения. Его можно использовать для запуска одного или нескольких экземпляров в облаке. Давайте выберем первый экземпляр, нажав кнопку Выбрать.

2. Выберите тип экземпляра.тип экземпляра предоставляет определенные вычислительные возможности, память и возможности хранения. Исходя из требований моего приложения, используя большую модель с 2.5 Go, я решил выбрать t2.xlarge. Если вашему приложению не требуется достаточно места для хранения, вы можете выбрать t2.micro, потому что это бесплатно. После выбора нажмите Далее, чтобы перейти к третьему шагу.

3. Настройка сведений об экземпляре:здесь мы можем выбрать количество экземпляров, необходимое для нашего варианта использования, тип сети и т. д., как мы видим, имена говорят сами за себя. Я решил оставить конфигурацию в режиме по умолчанию. Нажмите Далее, чтобы продолжить.

4. Добавить хранилище:значение хранилища по умолчанию — 8 ГБ, но я решил увеличить его до 16 из-за требований моего приложения. Нажмите Далее, чтобы продолжить.

5. Добавьте теги.Согласно описанию, тег состоит из пары ключ-значение с учетом регистра. Можно добавить до 50 тегов. Я пропустил этот шаг для простоты. Нажмите Далее, чтобы перейти к шестому и последнему шагу.

6. Настройка группы безопасности:это набор правил брандмауэра, предназначенных для контроля входящей и исходящей информации для вашего экземпляра EC2. Двойной выбор Добавить создает две новые строки в таблице. Ниже приведены их конфигурации соответственно для первого и второго правила.

  • Тип: Пользовательский порт TCP
  • Протокол: TCP
  • Диапазон портов: 8501, соответствующий порту Streamlit.
  • Источник: везде, что позволяет подключать порт в любом месте. При изменении этого пути автоматически устанавливается адрес 0.0.0.0, ::/0

для второго правила получаем аналогичную конфигурацию, но нужно просто изменить Port Range на 8502, чтобы учесть второй порт streamlit.

Наконец, мы можем нажать Просмотреть и запустить, чтобы проверить настройки. Затем нажмите Запустить, когда вас все устраивает. При этом вам будет предложено создать или предоставить пару ключей, которая потребуется при попытке SSH-подключения к вашему экземпляру EC2.

  • В первом раскрывающемся списке выберите вариант Создать новую пару ключей.
  • Я решил оставить тип пары ключей для RSA.
  • Укажите осмысленное имя в разделе «Имя пары ключей». В моем случае это dagsbub_streamlit_keypair.

Щелкните Загрузить пару ключей, чтобы загрузить пару ключей. Только после этого вы сможете запустить свой экземпляр, выбрав Launch Instances.

Вы получаете сообщение об успешном запуске «Ваши экземпляры теперь работают». На этой странице вы можете получить доступ к своим экземплярам, ​​нажав кнопку Просмотреть экземпляры.

Как видно из изображения ниже, у меня есть только что созданный экземпляр, который находится в состоянии выполнения.

Вуаля, Вы можете гордиться собой за то, что сделали это так далеко!!! Браво👏🏼👏🏼👏🏼

Что дальше???
Это правда, что мы хотим запустить приложение на EC2, но сначала нам нужно иметь возможность SSH-подключения к нашему экземпляру EC2.

Теперь я решил продолжить работу с первым созданным ранее экземпляром, чтобы не переплачивать. 😀

SSH-подключение к экземпляру EC2

Получить переменные соединения

Подключение к нашему экземпляру выполняется со следующей информацией:

  • сгенерированный файл пары ключей
  • Общедоступный IP-адрес экземпляра EC2.
  • Общедоступный DNS-сервер IPv4

Выполняя шаги 1 и 2, вы можете получить публичный адрес и публичный DNS.

Настроить файл ~/.ssh/config

Добавьте следующую информацию в файл конфигурации. Цель этого файла — сделать возможным подключение к экземпляру EC2 с помощью одной команды ssh.

Host streamlit-dagshub
     HostName 18.117.129.66
     User ec2-user
     IdentityFile <PATH TO YOUR KEY PAIR FILE>/<KEY PAIR.pem>
  • Hostможет быть любым именем. В моем случае я выбрал streamlit-dagshub.
  • Hostname — общедоступный IPv4-адрес.
  • Userизменить нельзя, остается пользователь ec2.
  • IdentityFile — это полный путь к файлу пары ключей .pem, который вы скачали.

Затем предоставьте пользователю разрешение на чтение и удалите все остальные разрешения с помощью следующей команды.

chmod 400 <PATH TO YOUR KEY PAIR FILE>/<KEY PAIR.pem>

После этого вы можете подключиться к экземпляру EC2 следующим образом:

ssh streamlit-dagshub

Взаимодействие между DagsHub, DVC и экземпляром EC2

Ниже вы можете найти общий рабочий процесс от отправки исходного кода, модели и данных до запуска приложения в экземпляре EC2.

  • Задача 1: отправить исходный код, модель и данные в DagsHub с помощью DVC.
  • Задача 2: клонируйте исходный код, извлеките модель, затем данные и запустите приложение в EC2.

Задача 1.Выполняется из вашего локального репозитория проекта

Чтобы выполнить эту задачу, вам сначала нужно настроить удаленный DVC, а затем отправить модель и данные в хранилище DagsHub.

Ниже показан формат файла params.yaml, который использовался в предыдущем скрипте.

Задача 2.Выполняется из вашего локального экземпляра EC2

Перед запуском приложения нам нужно получить исходный код приложения и зависимости, а затем извлечь модель и данные из хранилища DagsHub. Из экземпляра EC2:

  • git клонировать исходный код
  • вытащить режим и данные
  • установить зависимости
  • запустить потоковое приложение

Добавьте следующие строки в файл params.yaml.

Наконец, мы можем запустить скрипт prepare_instance из экземпляра EC2, а затем команду streamlit run для запуска приложения.

# Run the script to prepare EC2 instance
python prepare_ec2.py
# Run the streamlit app
streamlit run app.py

В конце процесса мы получаем следующую информацию об URL-адресах от терминала EC2. Затем скопируйте и вставьте внешний URL-адрес в свой любимый браузер.

Большой!!! 🎉🎉🎉 Наше приложение работает на инстансе EC2. Но есть одна проблема. Когда мы выходим из консоли, приложение перестает работать. Эту проблему можно решить, используя tmux.

Приложение Streamlit — заставьте его работать непрерывно

Во-первых, из вашего экземпляра EC2 установите библиотеку tmux.

sudo yum install tmux

Затем создайте сеанс tmux с помощью следующей команды

tmux new -s MultiLanguageSentimentStreamlitAppInstance

Вы можете заменить MultiLanguageSentimentStreamlitAppInstance любым именем, которое вы хотите, если оно имеет смысл. Затем после запуска команды я получаю следующий результат.

В отличие от первого запуска без tmux, на этот раз у нас есть зеленая горизонтальная линия внизу терминала, означающая, что сеанс tmux является одним. Вы можете выйти из терминала с помощью Ctrl+C, и приложение будет продолжать работать, и вы можете отправить ссылку человеку, живущему на другом континенте, он или она получит доступ к тому же приложению.

Что дальше??? Сопоставьте общедоступный адрес с сервером доменных имен, чтобы мы могли использовать, например, my_app.com вместо доступа с общедоступного IP-адреса.

Заключение

Поздравляем! 🎉 🍾 Вы только что узнали, как развернуть приложение Streamlit в экземпляре AWS EC2 с помощью DagsHub. Если вы все еще сомневаетесь в использовании DagsHub, сейчас самое время для вас и ваших товарищей по команде использовать возможности DagsHub.

Если вам нравится читать мои истории и вы хотите поддержать меня, подумайте о том, чтобы стать участником Medium. При этом я получу небольшую комиссию.

Кроме того, не стесняйтесь добавлять меня в LinkedIn и YouTube или подписывайтесь на меня в Twitter. Всегда приятно обсуждать AI, ML, Data Science и NLP!

Дополнительные ресурсы

Документация по AWS EC2

Сайт DagsHub

Часть первая статьи

Исходный код на DagsHub

Ссылка на приложение на AWS EC2

Пока пока 🏃🏾‍♂️