В статье представлен 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
по умолчанию выполняется «канареечный» этап, за которым следует необязательная проверка конечной точки вывода (код возврата HTTP200
).
Если модель машинного обучения успешно развернута, Kfops пометит PR (например,Deployed-to-production
), объединит с HEAD и закройте PR.
Все сбои регистрируются как комментарии PR. - Если ваш репозиторий модели машинного обучения открыт для общедоступных дополнений, вы можете ограничить круг лиц, которые могут выполнять команды чата (функция в разработке).
- Выводы различных предупреждений и ошибок «логируются» непосредственно в контексте PR:
Что дальше?
Несмотря на то, что проект полностью функционален, он все еще находится на ранней стадии разработки. Его долгосрочная цель – предоставить варианты для компаний, находящихся на разных стадиях зрелости MLOps.
Подробности см. в разделе Документация.