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

Прежде чем продолжить, я буду использовать бесплатные сервисы EC2 Amazon AWS для запуска инстанса. Для создания учетной записи AWS вам потребуется действующая дебетовая или кредитная карта.

Приступим !!

На высоком уровне мы будем делать следующее:

1. Написание кода вывода для нашей модели.
2. Создание простого веб-API с помощью Flask.
3. Создание контейнера с помощью Docker.
4. Запуск контейнера Docker на экземпляре EC2.

Если вы никогда раньше не слышали эти термины, ничего страшного. Я попытался объяснить их очень подробно, что, по крайней мере, будет хорошим началом.

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

Конечные результаты:

Проверка с вводом образца.

Это хорошая идея, чтобы увидеть результаты. Мы будем принимать 3 ответа от пользователя и предсказывать, связан ли твит с катастрофой или нет. Обратите внимание на глобальный IP-адрес, к которому можно получить доступ из любого места.

1. Построение модели машинного обучения:

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

Здесь я импортирую кучу библиотек, необходимых для нашей модели.

Для простоты я заполняю недостающие значения пустыми. Теперь в данных у нас есть две категориальные функции и одна текстовая функция. Поэтому я устанавливаю простой векторизатор подсчета для категориальных функций и векторизатор TFIDF для текстовых данных.

Я складываю все функции и подбираю простой алгоритм XGBoost для нашей модели.

Без предварительной обработки и настройки гиперпараметров мы получили точность всего 72%. В настоящее время наша цель - не построить супермодель, а развернуть обученную модель. Следовательно, я не собираюсь сейчас улучшать модель.

Сохраним файлы, которые нужны для вывода

Итак, учитывая файлы рассола, мы можем загрузить файлы рассола и предсказать результат модели, как показано выше, вызвав функцию прогнозирования,

2. Создание Flask API:

Создание простого API:

Прежде чем приступить к созданию вашего API, позвольте мне показать вам пример того, как работает Flask.

Здесь мы создаем наш сервер на порту 3000, который слушает наши HTML-запросы. Если мы получим какой-либо запрос на наш домашний маршрут, мы вернем сообщение «Hello World!».

Теперь перейдите в любую командную строку по вашему выбору, перейдите в каталог текущего проекта и введите

python app.py.

Вы должны увидеть запуск сервера.

Теперь перейдите в браузер и введите следующий IP-адрес: localhost: 3000, и вы получите сообщение «Hello World!».

Создание простой HTML-формы, которая отправляет почтовый запрос с данными формы:

Создайте простую HTML-форму, которая может принимать три поля ввода: местоположение, ключевое слово, сообщение и кнопку отправки. Когда форма была отправлена, она сделает почтовый запрос для маршрута «/ прогнозировать».

Создание маршрутов приложений

  1. Когда пользователь переходит на localhost: 8080 / index, он должен быть перенаправлен на страницу формы
  2. Когда форма была отправлена, мы должны иметь возможность получить данные страницы формы.

Создайте две папки артефактов и шаблонов и поместите файл index.html в шаблоны, а все файлы pickle - в папку артефактов, а также создайте два индекса маршрутов и прогноз в том же файле app.py.

Когда мы перейдем на localhost: 8080 / index, мы загрузим созданный нами файл index.html.

render_template ищет файлы HTML в папке шаблонов, поэтому важно создать папку шаблонов.

Создание функции, которая может принимать входные данные со страниц формы и делать прогнозы

Примечание. В нашем HTML-коде форма отправляется по маршруту «/ прогноз». По умолчанию каждый маршрут во Flask будет иметь метод get. Таким образом, мы должны объявить в декораторе функции, что мы слушаем, чтобы отправить запрос по маршруту «/ прогнозировать».

Это наш последний код веб-API Flask, мы загружаем файлы pickle, которым была обучена наша модель. Применение методов преобразования к каждой из функций, а затем объединение всего вместе. Теперь, учитывая эти данные точки запроса, мы будем прогнозировать эту точку на основе модели, которую мы ранее обучили. Принимая 0,5 в качестве порога, мы вернем простое сообщение на основе значения прогноза.

Давайте запустим наш сервер, перейдем в командную строку и запустим ваш код на Python.

python app.py

Теперь перейдите в свой браузер и введите URL-адрес localhost: 8080 / index, введите все, что хотите, и нажмите «Отправить», и вы получите результат.

Рис: Образец ввода для проверки поведения модели, Вставьте образец данных в соответствующие поля и нажмите «Отправить».

Теперь проблема в том, что он доступен только из нашей локальной системы. Если кто-то хочет делать прогнозы, он / она должен прийти к вам домой, запустить сервер и ввести входные данные, получить результат и вернуться ... Это просто болезненно представить, поэтому мы решим эту проблему, развернув этот код в облаке, поэтому что любой человек из любого места может получить доступ к этой странице.

3. Создание Dockerfile

Что такое докер?

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

Но если мы просто хотим запустить сервер, нужна ли нам вся наша локальная система. Для запуска нашей модели нам вряд ли понадобится 200 МБ ОЗУ или меньше. Получите ли вы в наши дни только систему ОЗУ 200 МБ, которая будет использоваться для работы нашего сервера?

Если вы пытаетесь создать еще одну модель машинного обучения, которая поддерживается в python2.7, а ваша версия Python - 3.0+, как вы справитесь с этой ситуацией? Docker помогает нам в этом очень легко.

В нашем примере для установки нам нужен только python, pip-библиотека (библиотеки Flask, XGBoost, Sklearn и т. Д.). Итак, представьте себе коробку, в которой есть именно эти программные библиотеки, которых нам достаточно для запуска нашей модели. Docker помогает нам создавать эти ящики, эти ящики называются контейнерами. Мы можем создать столько ящиков, сколько захотим, и можем работать одновременно в любой системе.

Достаточно теории, давайте создадим наш первый Dockerfile. создайте файл с тем же именем «Dockerfile» и тестовый файл requirements.txt в каталоге текущего проекта.

Так выглядит наш файл Docker, всего у нас 9 шагов

  • Получите пакет Python 3.5 из репозитория Docker.
  • Установка имени сопровождающего.
  • Установите имя пользователя - root
  • Сделайте рабочий каталог внутри папки app.
  • Добавьте все файлы в нашем текущем каталоге в контейнер докера. (Точкой отмечен каждый файл).
  • Создание сред, необходимых для бесперебойной работы нашего python3.
  • Запустите pip install ‹Имя библиотеки в файле requirements.txt›
  • Точка входа: Итак, когда мы запустим наш контейнер докеров (что мы и сделаем через некоторое время), он запустит следующую команду «python app.py». Итак, когда эта команда будет запущена, она запустит код API Flask и запустит службу. для нас.

3. Создание экземпляра EC2 и вход в него.

  • Войдите в консоль AWS и найдите сервис EC2:

  • Создайте Launch Instance, и вы должны увидеть экран ниже:

  • Выберите инстанс (Amazon Linux 2), имеющий право на бесплатный уровень, чтобы с вас не взимались без надобности.

  • Щелкните универсальный файл t2.micro, нажмите «Обзор и запуск», а затем «Запустить».

  • Выберите создать новую пару ключей и укажите имя пары ключей. Щелкните загрузить пару ключей. В файле пары ключей (MyInstance.pem) будет зашифрован личный пароль. Этот файл необходим нам для входа в экземпляр EC2 позже. Нажмите Запустить экземпляры, вы должны увидеть экран, показанный ниже.

  • Щелкните по идентификатору экземпляра (в моем случае это i-0fb941687a619ef41).

  • Нам нужно настроить группы безопасности для экземпляра. Группы безопасности сообщают, какие пользователи могут получить доступ к какой системе; в настоящее время мы хотим, чтобы все в мире видели нашу модель. Итак, мы сделаем его открытым для мира, добавив некоторые правила.
  • Щелкните группы безопасности в левой строке меню.

  • Дайте любое описание и название. Нажмите "Входящие" - ›Добавить правило.
  • Тип: настраиваемый TCP, диапазон портов: 0–65535, источник где угодно и нажмите «Создать».

  • Выберите экземпляр правой кнопкой мыши - ›нажмите« Сеть »-› Изменить группы безопасности и выберите группу безопасности, которую вы создали.

  • Теперь экземпляр настроен, теперь нам нужно войти в экземпляр и создать наши образы докеров.
  • Нажмите Подключиться к экземпляру, вы увидите команду ssh, скопируйте команду ssh.

  • Откройте любой терминал и запустите следующий код, убедитесь, что вы находитесь в каталоге, где находится файл .pem, который вы загрузили.

  • измените каталог вашего терминала на каталог и выполните скопированную команду.
cd '<Your directory>'
ssh -i "<Name>.pem" ec2-user@<Host IP address>

  • Если вы видите экран, показанный выше, значит, вы успешно вошли в систему.

4. Создание контейнера Docker и его запуск:

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

Перед этим вам нужно установить git в этом случае:

sudo yum install git

Sudo, чтобы дать администратору права на установку git. YUM - это инструмент управления пакетами для операционных систем Linux.

git clone https://github.com/GowthamChowta/Disaster_tweet.git

Он попросит вас ввести учетные данные git, введите свой адрес электронной почты и пароль. Если вы не хотите этого делать, вы можете использовать SCP (безопасное копирование) ваших файлов из локального экземпляра в систему Linux, используя следующую команду.

scp -r -i "myinstance.pem" ./Disaster\ tweet [email protected]​ :~/

После выполнения вышеуказанных шагов вы должны увидеть свою папку в экземпляре Linux. Введите ls, вы должны увидеть папку Disaster_tweet. (LS- Список каталогов)

$ ls
#output: Disaster_tweet

Теперь давайте установим докер (флаг -y говорит «да» на все вопросы «да / нет» во время установки).

sudo yum install -y docker
  • запустить службу докеров
sudo service docker start
  • Информация о докере
docker info
  • когда вы запустите указанную выше команду, вы получите сообщение об ошибке, в котором говорится, что вам нужны права администратора для запуска кода. Каждый раз, когда добавление SUDO к командам докера раздражает, давайте дадим докеру привилегии SUDO.
sudo usermod -a -G docker $USER

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

docker info

Теперь, если вы успешно установили докер, вы увидите много информации о текущей версии Docker и количестве контейнеров, которые у вас есть. Примечание. Если описанное выше по-прежнему не помогло, выйдите из экземпляра и войдите в систему.

  • Перейдите в папку Disaster_tweet и введите ls, чтобы увидеть все файлы.
cd Disaster_tweet/
ls

Ваш результат должен выглядеть так:

Давайте создадим наш первый контейнер, используя приведенный ниже код:

docker build -t disasterapp .

Мы создаем docker-контейнер, флаг -t поможет нам установить имя этого контейнера как diasterapp. Будем надеяться, что наше приложение не выйдет из строя :).

Обратите внимание на точку (.) В конце кода командной строки.

Это создаст контейнер докеров со всеми файлами в нашем текущем каталоге. Во-первых, он ищет Dockerfile и запускает код в Dockerfile. Он имеет 9 шагов, которые мы обсуждали выше, и он будет выполнять их последовательно. В случае успеха вы получите сообщение об успешном построении.

Пришло время запустить наш докер-контейнер:

docker run -p 80:3000 disasterapp

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

Вы получите сообщение, подобное тому, которое мы получили в нашей локальной системе ранее.

Полученные результаты:

Мы сделали!! Поздравляем, давайте проверим результат:

Перейдите к своим экземплярам, ​​скопируйте общедоступный адрес IPV4 и введите свой браузер.

Проверка с вводом образца.

Вы можете найти весь код по этой ссылке на GitHub. Вы также можете связаться со мной в LinkedIn.

Использованная литература:

  1. Курс прикладного ИИ
  2. Академия Linux AWS.

Рад помочь!!.