Развертывание моделей машинного обучения на Heroku
Опубликовано: 2021-01-05Машинное обучение — это непрерывный процесс, который включает в себя извлечение данных, очистку, выбор важных функций, построение модели, проверку и развертывание для проверки модели на невидимых данных.
В то время как начальный этап разработки данных и построения модели является довольно утомительным процессом и требует много времени для работы с данными, развертывание модели может показаться простым, но это критический процесс, зависящий от варианта использования, на который вы хотите ориентироваться. Вы можете обслуживать модель для мобильных пользователей, веб-сайтов, интеллектуальных устройств или через любое другое устройство IoT.
Можно интегрировать модель в основное приложение, включить ее в SDLC или в облако. Существуют различные стратегии развертывания и запуска модели на облачной платформе, что в большинстве случаев кажется лучшим вариантом из-за доступности таких инструментов, как Google Cloud Platform, Azure, Amazon Web Services и Heroku.
Несмотря на то, что вы можете предоставить модель через Pub/Sub, API (интерфейс прикладного программирования) или оболочка REST чаще используются для развертывания модели в рабочей среде. По мере увеличения сложности модели разные команды назначаются для обработки таких ситуаций, широко известных как инженеры по машинному обучению. После такого большого введения давайте посмотрим, как развернуть модель машинного обучения в виде API на платформе Heroku.
Оглавление
Что такое Героку?
Heroku — это платформа как сервисный инструмент, который позволяет разработчикам размещать свой бессерверный код. Это означает, что можно разработать сценарии для использования того или другого для определенных целей. Сама платформа Heroku размещена на AWS (Amazon Web Services), которая представляет собой инфраструктуру как сервисный инструмент.
Heroku — бесплатная платформа, но ее время безотказной работы ограничено 500 часами. Приложения размещены как динамометр, который после 30 минут бездействия переходит в спящий режим. Это гарантирует, что ваше приложение не будет потреблять все свободное время во время бездействия. Платформа поддерживает Ruby, Java, PHP, Python, Node, Go, Scala. Большинство начинающих специалистов по науке о данных обращаются к этой платформе, чтобы получить опыт запуска и развертывания модели в облаке.

Подготовка модели
Теперь, когда вы знакомы с этой платформой, давайте подготовим для нее модель. При обучении модели машинного обучения соответствующие параметры сохраняются в самой памяти. Эту модель необходимо экспортировать в отдельный файл, чтобы мы могли напрямую загрузить эту модель, передать невидимые данные и получить выходные данные.
Обычно используются различные форматы моделей, такие как Pickle, job-lib, который преобразует объектную модель Python в битовый поток, ONNX, PMML или MOJO, который является форматом экспорта H20.ai и предлагает модель для интеграции в Java-приложения. Для простоты предположим, что мы хотим экспортировать модель через pickle, тогда вы можете сделать это:
импортный рассол
Pkl_Filename = «model.pkl»
с открытым (Pkl_Filename, 'wb') в качестве файла:
pickle.dump(имя_модели, файл)
Теперь модель хранится в отдельном файле и готова к использованию в составе API.
Логика сервера
Для предоставления доступа к этой модели для прогнозов нам нужен серверный код, который может перенаправлять и обрабатывать все запросы на стороне клиента. Python поддерживает фреймворки для веб-разработки, наиболее известным из которых является Flask.
Это минималистичный фреймворк, который позволяет настроить сервер с помощью нескольких строк кода. Поскольку это минимальный пакет, многие функции, такие как аутентификация и RESTful, явно не поддерживаются. Их можно интегрировать с расширениями.
Другой вариант — выбрать недавно выпущенный фреймворк FastAPI. Он намного быстрее, масштабируемее, хорошо документирован и поставляется с множеством интегрированных пакетов. А пока давайте продолжим работу с флягой, чтобы настроить простой маршрут прогнозирования.
из фляги импорт фляги
импортный рассол
приложение = фляга (__имя__)
с открытым (имя файла, 'rb') в качестве файла:
модель = pickle.load(файл)
@app.route('/predict', методы = ['GET', 'POST'])

защита пред():
# реализуем логику для получения параметров либо через запрос, либо через полезную нагрузку
прогноз = model.predict([полученные параметры])
вернуть {'результат': прогноз}
Это грубый код, показывающий, как работать с серверной логикой. Существуют различные стратегии, которые вы можете выбрать для лучшей реализации.
Изучите: руководство по развертыванию моделей машинного обучения с помощью Streamlit
Настройка файлов развертывания
Heroku требует список всех зависимостей, требуемых нашим приложением. Это называется файлом требований. Это текстовый файл со списком всех внешних библиотек, которые использует приложение. В этом примере содержимое файла будет содержать:
колба
склерн
пустой </p>
панды
оружейный рог
Последняя библиотека, gunicorn, позволяет нам настроить реализацию сервера WSGI, которая формирует интерфейс для клиента и сервера, обрабатывающего HTTP-трафик. Heroku также требует другой файл, известный как Procfile, который используется для указания точки входа приложения. Учтите, что файл логики сервера сохранен под именем main.py, тогда команда, которую нужно поместить в этот файл:
веб-сайт: gunicorn main:app

«web» — это тип dyno, который мы развертываем, «gunicorn» действует как посредник для передачи запроса коду сервера «main» и поиска «app» в «main». Приложение обрабатывает все маршруты здесь.
Окончательное развертывание
Все приготовления сделаны, и теперь пришло время запустить приложение в облаке. Создайте учетную запись, если не на Heroku, нажмите «Создать приложение», выберите любой регион. После этого подключите свою учетную запись GitHub и выберите репозиторий, содержащий следующие файлы: код сервера, model.pkl, requirements.txt и Procfile.
После этого просто нажмите развернуть ветку! В случае успеха перейдите по сгенерированной ссылке, и ваше приложение должно быть запущено. Теперь вы можете делать запросы к маршруту appname.herokuapp.com/predict, и он должен выдавать прогнозы. Узнайте больше о моделях машинного обучения.
Заключение
Это было введение в то, что такое Heroku, зачем оно нужно и как развернуть модель с помощью Flask. Существует множество хостинговых платформ, которые предлагают более продвинутые функции, такие как конвейеры данных, потоковая передача, но бесплатная платформа Heroku по-прежнему является хорошим выбором для новичков, которые просто хотят попробовать развертывание.
Если вам интересно узнать больше о машинном обучении, ознакомьтесь с дипломом PG IIIT-B и upGrad в области машинного обучения и искусственного интеллекта, который предназначен для работающих профессионалов и предлагает более 450 часов тщательного обучения, более 30 тематических исследований и заданий, IIIT- Статус B Alumni, более 5 практических практических проектов и помощь в трудоустройстве в ведущих фирмах.
Каковы недостатки использования платформы Heroku?
Heroku не идеален для крупных предприятий, поскольку документация платформы невелика. Еще одной проблемой является файловая система, доступная только для чтения, что затрудняет загрузку объемных файлов, таких как фильмы или фотографии с высоким разрешением. Heroku — это поставщик платформы как услуги с ограниченным количеством настроек. Heroku принимает платежи только в долларах США, а не в других валютах, таких как евро. Для владельцев бизнеса, которые предпочитают платить в своей валюте, это может быть небольшим неудобством. Более того, в рамках CRE (Common Runtime Environment) Heroku не предоставляет статические IP-адреса.
Чем Heroku отличается от AWS?
Процедура развёртывания в AWS непростая, и как следствие, не особо удобная с точки зрения сложности. Heroku предоставляет готовую к использованию среду, простую в эксплуатации. Heroku дороже, чем AWS, поскольку требует меньшего вмешательства человека. AWS может справиться с высокими или очень высокими вычислительными потребностями, тогда как Heroku может справиться с умеренными вычислительными потребностями. Heroku, в отличие от AWS, не требует регулярного обслуживания инфраструктуры. AWS и Heroku молниеносно быстры в развертывании.
Как долго я могу использовать Heroku бесплатно?
У учетных записей Heroku есть пул бесплатных часов динамометрии, которые можно использовать в бесплатных приложениях. Это заменяет 18-часовой лимит на бесплатные программы, позволяя им работать 24 часа в сутки, если это необходимо. Новые учетные записи получают 550 бесплатных часов динамометрии и дополнительные 450 часов, если вы подтвердите свою личность с помощью кредитной карты. Heroku предоставляет бесплатный план, который поможет вам изучить технологию и начать работу. Многие надстройки Heroku предоставляют бесплатный план, как и Heroku Buttons и Buildpacks.