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

Как специалисты по данным, наши основные обязанности заключаются в обработке данных, разработке и улучшении моделей машинного обучения. Распространено мнение, что обработка данных - это самый трудоемкий этап всего проекта, а точность модели - ключ к успеху информационного продукта. Однако, когда отрасль находится на переходном этапе от эпохи открытий к эпохе внедрения (Сверхдержавы ИИ: Китай, Кремниевая долина и Новый мировой порядок - Кай-Фу Ли), картина стала намного шире, и акцент сместился с построения модели на обслуживание модели для пользователей и с эффективности модели на бизнес-ценности. Одним из хорошо известных примеров является то, что Netflix никогда не использовал модели победителей своего приза в 1 миллион долларов, несмотря на значительное повышение производительности, которое обеспечивают эти механизмы рекомендаций (Netflix никогда не использовал свой алгоритм в 1 миллион долларов из-за инженерных затрат - WIRED).

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

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

Из Докера

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

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

Итак, вопрос: «Почему Докер?»

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



Когда я впервые начал свою работу в банковской компании, мне поручили проект, связанный с данными, и ожидалось, что я предоставлю первый MVP (минимально жизнеспособный продукт) в течение одного месяца. Это звучит напряженно, но мы используем методологию Agile в процессе разработки всех основных продуктов в команде, и основная цель этого первого MVP - проверить предположение об удобстве использования и эффективности продукта (вы можете найти дополнительную информацию об Agile методологии в книге Эрика Райса Экономичный стартап). Мой менеджер хотел, чтобы я провел демонстрацию продукта на его ноутбуке, что также включает запуск модели машинного обучения и использование этой модели для прогнозирования чего-либо.

Если вы думаете обо всех шагах, которые я должен сделать, чтобы подготовить его ноутбук к запуску моего проекта, тогда у вас может возникнуть много вопросов, например:

  • На какой ОС он будет запускать демонстрацию, если он использует Macbook и ThinkPad? Я мог бы спросить его, но предположим, что мой босс был тогда мерзким и не хотел сообщать мне об этом. (Это предположение сделано для того, чтобы помочь вам осознать проблему зависимости ОС, и мой босс, кстати, действительно хорош: D)
  • Второй вопрос: «Установлен ли у него Python?». Если да, то какая у него версия, версия 2 или версия 3? Это 2.6, 2.7 или 3.7?
  • Как насчет всех необходимых пакетов, таких как scikit-learn, pandas и numpy? Есть ли у него такая же версия, что и у мины на моей машине разработки?

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

Install Python
Install all the packages
Setup environment variables
Copy the code into machine
Run the code with required parameters

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

Теперь, если у вас уже был установлен и запущен Docker на вашем ноутбуке, вы можете попробовать открыть терминал и выполнить следующую команду:

docker run --rm -p 5000:5000 datascienceexplorer/classifier

Через пару минут вы должны увидеть на своем терминале что-то вроде этого:

* Serving Flask app "main" (lazy loading)
* Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

Затем откройте свой любимый браузер и перейдите по этому URL-адресу:

http://localhost:5000/apidocs/

Нажмите на строку API «прогнозировать», а затем кнопку «попробовать» справа, у вас будет такой интерфейс:

Помните классический набор данных Iris, с которым вы играли? Это небольшое приложение, которое помогает прогнозировать виды цветов на основе информации о некоторых измерениях с использованием классификационной модели. На самом деле вы используете мою модель машинного обучения в качестве услуги, и пока что вы установили только Docker, и мне не нужно устанавливать Python или какой-либо пакет на ваш компьютер.

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

DevOps Data Science

Я надеюсь, что теперь вы достаточно мотивированы, чтобы продолжить чтение, и если вы просто хотите пропустить эти сеансы, чтобы сразу перейти к коду, тогда это тоже нормально, потому что это может означать, что вы хотите контейнеризовать свою модель машинного обучения с помощью Docker и использовать ее как сервис. Однако давайте сделаем небольшую паузу и отложим в сторону все детали машинного обучения / Docker, чтобы подумать о DevOps Data Science и о том, зачем нам это нужно.

Что такое DevOps BTW?

Из Википедии

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

Цель разработчиков программного обеспечения - вовремя доставить код со всеми необходимыми функциями, в то время как удобство использования, надежность, масштабируемость, сеть, брандмауэр, инфраструктура и т. Д. Часто являются проблемами со стороны эксплуатации. Из-за различий в конечных целях и, вероятно, KPI эти команды обычно не живут счастливо под одной крышей. Таким образом, специалист по DevOps может сыграть связующую роль, помогая этим командам работать вместе, или даже взять на себя ответственность обеих сторон, чтобы только одна команда работала от начала до конца. В конце концов, вы не можете просто доставить свою машину клиенту, хотя код на ней работает без сбоев.

Но я доволен своим ноутбуком Jupyter !!!

То же самое и со специалистами по данным, когда вы не можете просто доставить свой ноутбук с запущенным Jupyter Notebook и позволить клиенту использовать его. Нам нужен способ реализации вашей модели, чтобы она могла обслуживать большее количество пользователей в любое время и в любом месте и восстанавливаться после сбоев с минимальным временем простоя (удобство использования, надежность, масштабируемость).

По этой причине компании ищут специалистов по данным с навыками DevOps, которые могут развертывать и внедрять свои модели машинного обучения в производственной среде и возвращать бизнес-ценности компании вместо того, чтобы просто создавать доказательство концепции или сосредоточиться в основном на повышении точности модели. Таких людей иногда называют «единорогами».

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

Сохранение обученной модели

В университете мы узнали, что проект Data Science может быть представлен в шесть этапов, как показано слева. Если наша конечная цель - автоматизация или внедрение модели в производство, как мы можем «отправить» модель на этап развертывания?

Самый простой способ, который мы можем придумать, - это скопировать все из нашей записной книжки, затем вставить все это в файл .py и запустить его. Однако нам придется запускать этот файл снова или заново обучать модель с теми же данными каждый раз, когда мы хотим что-то предсказать. Хотя этот подход возможен для простых моделей с небольшим набором обучающих данных, он не будет эффективным для более сложных моделей и размещения в них большего количества данных (подумайте, сколько времени потребуется, когда вы обучаете модель ИНС или CNN). Здесь имеется в виду тот факт, что когда пользователь отправляет запрос на прогнозирование модели, ему или ей, возможно, придется подождать от нескольких минут до нескольких часов, чтобы получить результат из-за времени ожидания этапа обучения модели!

Как сохранить модель сразу после ее обучения?

В большинстве случаев модель машинного обучения в Python будет храниться как объект Python в памяти во время выполнения кода, а затем удаляться при выходе из программы. Если бы мы могли сохранить этот объект на жесткий диск сразу после его обучения, то в следующий раз, когда нам понадобится выполнить прогноз, мы могли бы просто загрузить эту готовую для прогнозирования модель в память, не выполняя инициализацию и обучение. снова шаги. В информатике процесс преобразования объекта в поток байтов для целей хранения называется «сериализацией». В Python это можно легко реализовать с помощью пакета с именем «pickle», который изначально поддерживается Python. Разработчики Python также называют процесс сериализации объекта с помощью pickle термином «pickling».

В записной книжке Jupyter вы можете легко сохранить объект модели (в моем случае это «knn») в файл pkl, расположенный в том же каталоге, что и этот код:

Я рекомендую вам использовать мой блокнот здесь (блокнот из моего универсала: P), чтобы мы могли получить аналогичные результаты на следующих этапах. В противном случае вы можете использовать свою модель, но убедитесь, что у вас есть необходимые пакеты, а также необходимые входные данные для модели.

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

Перейти к Части 2