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

https://github.com/Cornerstone-OnDemand/modelkit

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

Контекст нашей команды

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

  • Мы – опытная команда по работе с данными: 10 опытных специалистов, работающих над моделями машинного обучения, со всеми навыками, необходимыми для развертывания их в рабочей среде
  • Мы работаем над сложным НЛП с глубокими технологиями: в настоящее время у нас развернуто около 200 моделей и алгоритмов машинного обучения. Эти 200 взаимосвязаны (одна модель может вызвать 10 других во время своего логического вывода).
  • Мы лишь частично используем стандартизированные библиотеки машинного обучения (sklearn, tensorflow и т. д.), так как большая часть нашей логики представляет собой пользовательский код или оболочку Python.
  • Мы сосредоточены на производительности и масштабируемости: у нас более 10 миллионов вызовов в день и частая пакетная обработка, выполняемая параллельно сотнями рабочих.

Основные принципы, повлиявшие на наш проект:

  • Мы считаем, что производственный вывод должен быть отделен от процесса обучения. Хотя это верно не для каждой команды, нам не нужны онлайн-обучения или частые обновления моделей. Нам нравится тщательно и вручную выбирать алгоритмы, которые мы хотим запустить в производство, и оптимизировать их. Поэтому мы считаем, что обновление модели требует изменения git и повторного развертывания службы.
  • Мы считаем, что логика модели должна быть отделена от обработки ETL (Airflow, Spark, …). Вывод модели должен быть апатридом, и одна обработка никогда не должна занимать больше секунды.
  • Мы почти не используем блокноты. Хотя они полезны при исследовании данных, большинство членов команды не используют их. В частности, ни один код не выпускается в производство без экспертной оценки в git.
  • Мы хотим, чтобы все конфигурации и процессы разработки моделей находились в git, а не в пользовательском интерфейсе, не в блокнотах и ​​не в базе данных конкретной платформы. MLOps должны следовать логике «Конфигурация как код», а не «без кода».

Где мы чувствовали, что нам нужно оборудовать себя

Мы создали фреймворк Python, ориентированный на «вывод модели». Его ключевые цели:

  1. чтобы структурировать, как мы пишем наш код Python для всех взаимозависимых моделей и алгоритмов ML
  2. чтобы сделать его надежным и легким для оптимизации
  3. чтобы упростить развертывание в любой производственной среде
  4. чтобы сделать его легко доступным для членов команды или команд

Почему большинство решений/фреймворков на рынке не соответствовали нашим потребностям:

  • Большинство платформ машинного обучения ориентировано на незрелые команды,особенно в отношении навыков развертывания (обычная демонстрация «jupyter для развертывания»)
  • Большинство платформ машинного обучения сосредоточено на этапе «обучения», что не соответствует потребностям нашей команды. (исследование набора данных, тестирование и сравнение моделей, быстрое и грязное развертывание модели, повторное развертывание старых моделей для сравнения и т. д.)
  • Большинство платформ машинного обучения ориентированы на конкретные популярные библиотеки, а не на бесплатный код Python. (обслуживает любую модель sklearn, tensorflow или h20)
  • Большинство платформ обслуживания машинного обучения ориентированы на проверку концепции(ср. обычную 5-минутную демонстрацию модели sklearn на AWS), но не могут быть адаптированы к конкретным ограничениям большинства реальных производственных процессов (многооблачная среда, многопользовательская среда, настраиваемая инфраструктура и т. д.), процессов обеспечения безопасности и оптимизации затрат на инфраструктуру.
  • Большинство фреймворков охватывают множество процессов MLOps, а не минимальные. Руководствуясь своей бизнес-моделью, большинство фреймворков разрастаются и становятся слишком сложными, чтобы их можно было использовать простым и прозрачным способом.
  • Большинство фреймворков требуют интенсивного пользовательского интерфейса, тогда как нам нужна только библиотека Python.

Что мы строим: моделькит

modelkit — это минималистичная библиотека MLOps для Python, созданная для людей, которые хотят развернуть модели машинного обучения в рабочей среде.

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

Оборачивая код прогноза в modelkit, вы мгновенно получаете доступ ко всем функциям:

  • быстро. Предсказания модели можно группировать для ускорения (вы сами определяете логику пакетной обработки) с минимальными затратами.
  • компонуемый: модели могут зависеть от других моделей и оценивать их так, как вам нужно.
  • расширяемость: модели могут полагаться на произвольные вспомогательные файлы конфигурации, называемые assets, размещенные в локальных или облачных хранилищах объектов (в настоящее время мы поддерживаем AWS, GCP и Azure).
  • безопасность типов: входные и выходные данные моделей могут быть проверены с помощью pydantic, вы получаете аннотации типов для своих прогнозов и можете обнаруживать ошибки с помощью инструментов статического анализа типов во время разработки.
  • асинхронный: модели поддерживают асинхронные и синхронные функции прогнозирования. modelkit поддерживает вызов асинхронного кода из кода синхронизации, поэтому вам не придется страдать от частично асинхронного кода.
  • testable: модели содержат свои собственные сценарии модульного тестирования, а инструменты модульного тестирования доступны для pytest или любой другой среды тестирования.
  • быстрое развертывание: модели можно обслуживать в одном вызове CLI с использованием fastapi.

Кроме того, вы обнаружите, что modelkit это:

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

Установить с помощью pip:

pip install modelkit

Переход на открытый исходный код

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

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

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

Мы ждем отзывов, свяжитесь со мной или присоединитесь к дискорду https://discord.gg/ayj5wdAArV

Спасибо ;-)