В статье представлен Kfops, инструмент поверх Kubeflow, который можно подключить к жизненному циклу MLOps.

Что такое Кфопс?

Основная цель проекта — упростить и стандартизировать компиляцию конвейера Kubeflow, выполнение конвейера и развертывание модели.
Он состоит из двух «компонентов» — специального пакета Python и команд chatops. Пакет Python используется на этапе разработки/экспериментирования, а команды chatops находятся непосредственно в комментариях к запросу на слияние.

Как это вписывается в жизненный цикл MLOps?
Давайте рассмотрим пример. Код вашей модели машинного обучения хранится в репозитории Github. Ваша команда использует выпуски Github для обсуждения функций, улучшений и исправлений ошибок модели машинного обучения и конвейера (Kubeflow).
В одном из выпусков команда планирует улучшить этап предварительной обработки конвейера. Ваша задача — проверить, как изменения повлияют на модель.
В качестве первого шага вы хотите поэкспериментировать в своей среде разработки. Вы вносите изменения в код и используете Kfops CLI (команда kfc build-run) для выполнения конвейера непосредственно в Kubeflow. Kfops выводит ссылку на ваш конвейер.
Вы вносите дополнительные изменения, пока результаты не будут готовы для совместной работы.
Вы отправляете изменения в репозиторий и создаете запрос на слияние. В запросе на вытягивание вы снова запускаете конвейер с помощью команды /build_run chatops. Kfops запускает конвейер и печатает результаты прямо в PR. Теперь вы можете поделиться результатами с командой, сославшись на свой PR в проблеме.
Команда довольна результатами и решает, что ее следует развернуть в рабочей среде. Вы возвращаетесь к PR и отдаете команду /deploy.

Что вы сделали?

  • Вы создали воспроизводимый эксперимент, в котором изменился только этап предварительной обработки, а все остальное осталось нетронутым.
  • Благодаря этому вы можете легко измерить улучшение, вызванное вашими изменениями.
  • Эксперимент был легко «задокументирован» в Issue и PR и связан с конкретным запуском конвейера Kubeflow и его результатами.
  • Ваши улучшения уже в производстве!

Вот визуальное представление процесса (см. полноэкранное изображение здесь):

Вам может потребоваться некоторое время, чтобы переварить эту цифру. Вот основные выводы:

  • Обе команды kfc и «chatops» нацелены на то, чтобы скрыть основную сложность Kubeflow.
  • Как специалист по данным/инженер, вы ожидаете простой, гибкой и масштабируемой фазы экспериментов/разработки. Им управляет уже упомянутая команда kfc. В зависимости от вашей настройки команду можно запустить непосредственно в кластере (например, в блокноте Jupyter с предустановленным Kubeflow или в любом другом модуле Kubernetes, сконфигурированном для доступа к конвейерам Kubeflow) или из локальной среды (вне вашего кластера Kubernetes), подключенной к удаленному экземпляру Kubeflow.
  • Развертывание модели не допускается с помощью команды kfc, поскольку она не записывает, когда и кто ее выполнил.
  • Развертывание модели намеренно удалено из конвейера Kubeflow. Вместо этого вы должны использовать /deploy для публикации только тех моделей, которые соответствуют вашим «производственным» требованиям.
  • Такие команды, как /build_run (или /build и /run), /deploy (или /staging_deploy) выполняются в контексте запроса на вытягивание.
  • Команда использует проблемы и запросы на вытягивание репозитория для обсуждения запланированных экспериментов, улучшений, исправлений и т. д. Команды, выполняемые в запросах на слияние, связывают это обсуждение с результатами эксперимента в пользовательском интерфейсе Kubeflow Pipeline.
  • Pipeline run (/build_run or /run) выводит значения входных параметров Kubeflow Pipelines непосредственно в комментарии PR.
  • На данный момент Kfops может развернуть модель ML только в том же кластере Kubernetes, где был установлен ваш Kubeflow с Kfops.
  • Не все изменения, внесенные в репозиторий, связаны с моделью ML. Обучение модели может быть трудоемким или дорогостоящим. Поэтому при создании или обновлении PR Kubeflow Pipeline не запускается автоматически. Его нужно запустить вручную с помощью команды «Выполнить».

Из соображений краткости на рисунке скрыты такие детали, как конструктор образов контейнеров и т. д. Больше рисунков и подробностей смотрите в документации.

Основной файл конфигурации

Еще одной важной особенностью Kfops является основной файл конфигурации. Он централизует конвейер проекта, конструктор образов контейнеров и параметры развертывания.
Вы можете переопределить настройки, связанные с pipeline, во время разработки с помощью команды kfc. Параметры можно переопределить с помощью флага --set kfc и/или отдельного файла переопределения (например, kfc build_run --config-override override.yaml).
Обратите внимание: поскольку файл конфигурации является частью репозитория, вы можете легко отслеживать все изменения, внесенные в него в прошлом.

Обратитесь к Документации по конфигурационному файлу для более подробной информации.

Соглашения, ограничения и другие функции

Полный список вы можете найти в документации; вот самые важные:

  • Соглашения (например, централизованная конфигурация) обеспечивают стандартизацию всех ваших проектов машинного обучения.
  • Допускается только одна модель машинного обучения для каждого репозитория.
  • Kfops можно подключить к любой системе SCM (хотя в настоящее время поддерживается только Github).
  • Во время /deploy по умолчанию выполняется «канареечный» этап, за которым следует необязательная проверка конечной точки вывода (код возврата HTTP 200).
    Если модель машинного обучения успешно развернута, Kfops пометит PR (например, Deployed-to-production), объединит с HEAD и закройте PR.
    Все сбои регистрируются как комментарии PR.
  • Если ваш репозиторий модели машинного обучения открыт для общедоступных дополнений, вы можете ограничить круг лиц, которые могут выполнять команды чата (функция в разработке).
  • Выводы различных предупреждений и ошибок «логируются» непосредственно в контексте PR:

Что дальше?

Несмотря на то, что проект полностью функционален, он все еще находится на ранней стадии разработки. Его долгосрочная цель – предоставить варианты для компаний, находящихся на разных стадиях зрелости MLOps.
Подробности см. в разделе Документация.