Машинное обучение, DevOps

Развертывание приложений машинного обучения с помощью Chef

Обзор развертывания модели с помощью Chef - инструмента управления конфигурацией

Как специалист по данным, вы могли столкнуться с проблемами зависимостей, незнанием сред или с проблемами настройки инфраструктуры и версий с помощью таких инструментов, как TensorFlow. Я столкнулся с той же проблемой при попытке запустить обученную модель на других хостах. Тогда мир был достаточно любезен, чтобы познакомить меня с Chef - инструментом управления конфигурацией, который выполняет за нас громоздкую задачу. Позвольте мне объяснить вам шаги и инструменты, которые мы используем, с самого начала. Так зачем ждать? Давайте начнем!

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

Фон

Я использовал Flask, VADER Sentiment Analysis, Google Compute Engine, Chef - инструмент управления конфигурацией и балансировщик нагрузки для выполнения этой задачи. Вы взволнованы? Давайте углубимся, пока не поздно!

Модель машинного обучения для анализа настроений

В этом проекте я использовал анализатор настроений VADER, чтобы определить процент удовлетворенности инициативами, предпринимаемыми государством и центральным правительством. VADER (Valence Aware Dictionary и sEntiment Reasoner) - это основанный на правилах инструмент анализа настроений, который специально адаптирован к настроениям, выраженным в социальных сетях, и хорошо работает с текстами из разных областей.

Веб сервер

Веб-сервер может быть программным приложением или аппаратным обеспечением, которое берет на себя работу серверной части при запуске задачи. Доступны различные типы веб-серверов, которые вы можете использовать в зависимости от приложения. Для этого приложения я использовал Flask - микро-веб-фреймворк, написанный на Python. Приведенный ниже фрагмент кода показывает, как мы берем ввод от пользователя и рендерим его на наш флеш-сервер.

Мы запустим Flask Server как службу. Сервис помогает запускать определенную программу в фоновом режиме, автоматически позволяя ей запускаться и останавливаться при включении и выключении системы.

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

Демонстрация жизни без управления конфигурациями

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

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

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

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

Итак, SCM (Управление конфигурацией программного обеспечения) - это потрясающе, понятно! Но как это сделать и использовать все возможности в наших интересах? Как видите, это не так уж и сложно, у нас снова есть много инструментов для реализации SCM, среди которых есть Ansible, Puppet, Juju, SaltStack и Chef. В нашем приложении используется Chef, так что давайте изучим историю Chef!

Повар

  • Chef - это компания и название инструмента управления конфигурацией, написанного на Ruby и Erlang. Честно говоря, имя Chef очень соответствует тому, чем он занимается. Шеф-повар обычно пишет рецепт, берет все ингредиенты и начинает готовить блюдо. Аналогичным образом, в случае нашего инструмента управления конфигурацией программного обеспечения - Chef, делается то же самое, но с другими условиями и результатами. Он состоит из трех жизненно важных частей, а именно Workstation, Chef Server и Nodes.

  • Существует также что-то, известное как chef-client, которое действует как агент, который запускается локально на каждом узле (вы скоро поймете этот термин) и находится под управлением Chef. Когда chef-client запущен, он выполнит все шаги, необходимые для приведения узла в ожидаемое состояние. Теперь, когда шеф-клиенты настроены на узлах, давайте разберемся, что делают три важных фрагмента.

Повар - Рабочее место

  • Это склад, базовая станция, закулисье, комната подготовки или как бы вы это ни называли. Полный код нашего приложения разработан и протестирован здесь с последующей настройкой с помощью командных инструментов Chef (Chef Development Kit). Все запросы, полученные шеф-сервером, обрабатываются (удовлетворяются / отклоняются / изменяются) рабочей станцией.
  • То, что мы разрабатываем на рабочем месте, известно как Рецепты. Таким образом, рецепты - это способ управления «системными компонентами» (также известными как ресурсы) путем установки пакетов, запуска программ и создания, редактирования или удаления файлов, когда возникает необходимость.
  • После завершения загрузки и разработки вся связка кодов и файлов упорядочивается в желаемом порядке и сохраняется в Поваренных книгах.
  • Когда рецепты в кулинарной книге готовы, проводится тестирование с помощью инструмента Кухня, чтобы убедиться, что все на месте. Когда все устраивает, мы загружаем кулинарные книги, содержащие ресурсы и рецепты, а также поддерживаемые компоненты на сервер Chef с помощью Knife.

Повар - Сервер

Chef Server действует как центр информации. Chef предоставляет нам собственный размещенный сервер, который легко доступен для использования. Серверы Chef точно перекрывают разрыв между рабочей станцией и всеми узлами. Мы получаем кулинарные книги, рецепты, политики и другие полезные компоненты с рабочей станции, а chef-server будет распространять наши кулинарные книги на любые управляемые узлы, подключенные к нему.

Повар - Узлы

  • Узел - это любая машина, которой управляет Chef, это может быть физическое, виртуальное или облачное сетевое устройство. Как упоминалось выше, узел использует службу chef-client для извлечения и применения кулинарных книг с chef-сервера, этот процесс известен как Конвергенция. Когда узел сходится, он синхронизируется с сервером и при каждом запуске извлекает обновления для любой политики. Чтобы это произошло, нам сначала нужно развернуть узлы (создать виртуальные машины). Я использовал Google Compute Engine из Google Cloud Platform (GCP) для создания узлов / виртуальной машины в облаке. Узлами также могут быть любые общедоступные компьютеры, а не только облако.
  • Чтобы установить успешную связь между Chef-сервером и узлами, необходимо выполнить начальную загрузку. Чтобы добавить эти учетные данные и все требования, мы просто загружаем этот узел, чтобы установить все компоненты, используя следующую единственную команду.
knife bootstrap FQDN -x user -P password — sudo -N nodename -r “recipe[cookbookname]”

Балансировщик нагрузки

Если в один и тот же экземпляр передается слишком много запросов, модели машинного обучения может потребоваться некоторое время, чтобы выдать результат. Нам часто показывают сообщение «сервер занят». Чтобы избежать таких обстоятельств, мы используем балансировщик нагрузки. Несколько серверов создаются в соответствии с потребностями, и балансировщик нагрузки помогает перенаправлять трафик на менее плотные серверы или узлы. Картинка ниже поможет вам лучше изобразить это.

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

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

Заключение

Чтобы избежать проблем с управлением версиями различных инструментов / пакетов машинного обучения и потратить некоторое время на разработку модели, рекомендуется вести поваренную книгу Chef. В первый раз это может занять время, но позже вы можете использовать ту же книгу рецептов для любого другого приложения. Надеюсь, я смогу дать вам четкое представление о Chef и его цели в успешном развертывании модели машинного обучения. Я скоро снова увижу вас с таким интересным объяснением другой технологии!
Если вы хотите связаться, свяжитесь со мной в LinkedIn.