Внедрение моделей в производство - дело сложное

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

Вступление

Первым шагом в определении того, как развернуть модель, является понимание системы с помощью следующих вопросов:

  1. как конечный пользователь взаимодействует с прогнозами модели.
  2. как часто вы должны делать прогнозы.
  3. следует ли создавать прогнозы для одного экземпляра или для группы экземпляров за раз.
  4. какое количество приложений будет обращаться к этой модели.
  5. каковы требования к задержке этих приложений.

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

  • Databricks имеет MLFlow
  • У Google есть TensorFlow Extended (TFX)
  • У Uber есть Микеланджело
  • В Facebook есть FBLearner Flow
  • У Microsoft есть лаборатория искусственного интеллекта
  • У Amazon есть Amazon ML
  • AirBnb имеет BigHead
  • JPMC имеет Omni AI

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

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

2. Тестирование системы машинного обучения включает проверку модели, обучение модели и т. Д. В дополнение к тестам программного обеспечения, таким как модульное тестирование и интеграционное тестирование.

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

Переносимость модели (от разработки модели до производства)

Написание кода для прогнозирования / оценки данных чаще всего выполняется в записных книжках Jupyter или в среде IDE. Для переноса этого кода разработки модели в производственную среду требуется преобразовать код конкретного языка в некоторый формат обмена (сжатый и сериализованный), который не зависит от языка и является легковесным. Следовательно, мобильность модели также является ключевым требованием.

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

1. Pickle - файл pickle - это двоичная версия объекта Python, которая используется для сериализации и десериализации структуры объекта Python. Преобразование иерархии объектов Python в поток байтов называется «травлением». Когда поток байтов преобразуется обратно в иерархию объектов, эта операция называется «распаковкой».

2. ONNX (Open Neural Network Exchange) - ONNX - это формат с открытым исходным кодом для моделей машинного обучения. ONNX имеет общий набор операторов и формат файлов для использования с моделями на различных платформах и инструментах.

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

4. PFA (Portable Format for Analytics) - PFA - это развивающийся стандарт для статистических моделей и механизмов преобразования данных. PFA легко переносится между различными системами и моделями, функции предварительной и последующей обработки могут быть объединены в цепочки и встроены в сложные рабочие процессы. PFA может быть простым преобразованием необработанных данных или сложным набором параллельных моделей интеллектуального анализа данных с файлом конфигурации JSON или YAML.

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

Также существуют некоторые форматы, специфичные для платформы, например - Spark MLWritable (для Spark) и POJO / MOJO (для H2O.ai).

CI / CD в машинном обучении

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

Таким образом, в отличие от традиционного DevOps, у MLOps есть еще 2 шага при каждом запуске CI / CD.

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

В системе ML есть еще один термин для MLOps, называемый CT (непрерывное обучение), который используется, если вам нужно автоматизировать процесс обучения.

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

Новые инструменты, такие как Gradient и MLflow, становятся популярными для создания надежных конвейеров CI / CD в системах машинного обучения. Такие инструменты, как Quilt, Pachyderm открывают путь для перспективных рабочих процессов в области науки о данных / машинного обучения, но они еще не получили широкого распространения. Некоторые другие альтернативы включают dat, DVC и gitLFS; но пространство все еще новое и относительно неизведанное.

Стратегии развертывания

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

Пакетное прогнозирование

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

Реализация

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

  • Самый простой способ - написать программу на Python и запланировать ее с помощью Cron, но это требует дополнительных усилий для внедрения функций для проверки, аудита и мониторинга. Однако в настоящее время у нас есть много инструментов / подходов, которые могут упростить эту задачу.
  • Написание пакетного задания Spark и его планирование в пряжи, а также ведение журнала для мониторинга и повторных попыток.
  • Использование таких инструментов, как Perfect и Airflow, которые предоставляют возможности пользовательского интерфейса для планирования, мониторинга и оповещения в случае сбоев.
  • Такие платформы, как Kubeflow, MLFlow и Amazon Sagemaker также предоставляют возможности пакетного развертывания и планирования.

Веб-служба

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

Реализация

  • Чтобы реализовать прогнозы в виде веб-службы, самый простой способ - написать службу и поместить ее в контейнер докеров для интеграции с существующими продуктами. Хотя это не самое сексуальное решение, но, вероятно, самое дешевое.
  • Наиболее распространенным фреймворком для реализации модели машинного обучения как услуги является Flask. Затем вы можете развернуть свое приложение Flask на Heroku, Azure, AWS или Google Cloud или просто развернуть с помощью PythonAnywhere.
  • Другой распространенный способ реализации модели машинного обучения как услуги - использование приложения Django и его развертывание с использованием платформ Heroku / AWS / Azure / Google Cloud.
  • В этой области есть несколько новых опций, таких как Сокол, Старлетт, Саник, FastAPI и Торнадо. FastAPI вместе с сервером Uvicorn в наши дни приобретает известность из-за минимальных требований к коду и автоматически создает документацию OpenAPI (Swagger) и ReDoc.

Почему прогнозы в Интернете и в реальном времени?

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

1. Настройка производительности большого объема для пакетного разбиения.

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

Ответ на вышеуказанные проблемы заключается в следующих двух подходах.

Аналитика потоковой передачи в реальном времени

За последние несколько лет мир программного обеспечения перешел от сервисов Restful к API потоковой передачи, как и мир машинного обучения.

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

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

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

Реализация

  • Для реализации системы машинного обучения с использованием этой стратегии наиболее распространенным способом является использование Apache Spark или Apache Flink (оба предоставляют Python API). Оба позволяют легко интегрировать модели машинного обучения, написанные с использованием Scikit-Learn или Tensorflow, отличных от Spark MLlib или Flink ML.
  • Если вам не нравится Python или уже существует конвейер данных, написанный на Java или Scala, вы можете использовать Tensorflow Java API или сторонние библиотеки, такие как MLeap или JPMML.

Автоматизированное машинное обучение

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

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

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

Для создания модели машинного обучения, которая обучается онлайн, требуется много инженерных работ, но наиболее важным фактором является архитектура / развертывание модели. Поскольку модель может и будет меняться каждую секунду, вы не можете создать несколько экземпляров. Кроме того, он не масштабируется по горизонтали, и вы вынуждены иметь один экземпляр модели, который поглощает новые данные так быстро, как только может, выплевывая наборы изученных параметров за API. Самая важная часть процесса (модель) масштабируется только по вертикали. Может даже оказаться невозможным распределить между потоками.

Примеры этой стратегии в режиме реального времени: оценка доставки Uber Eats, предложения по подключению к LinkedIn, поисковые системы Airbnb, дополненная реальность, виртуальная реальность, человеко-компьютерные интерфейсы, беспилотные автомобили.

Реализация

  • В библиотеке Sklearn есть несколько алгоритмов, которые поддерживают инкрементное обучение онлайн с использованием метода partial_fit, например SGDClassifier, SGDRegressor, MultinomialNB, MiniBatchKMeans, MiniBatchDictionaryLearning.
  • Spark MLlib не поддерживает онлайн-обучение и имеет 2 алгоритма машинного обучения для поддержки онлайн-обучения - StreamingLinearRegressionWithSGD и StreamingKMeans.
  • Creme также имеет хорошие API для онлайн-обучения.

Проблемы

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

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

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

Другие варианты стратегий развертывания

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

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

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

Модель Drift

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

Устойчивость модели

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

Петли отрицательной обратной связи

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

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

Заключение

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

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

Спасибо за прочтение. Надеюсь, статья вам понравилась !! Как всегда, обращайтесь за любыми вопросами / комментариями / отзывами.