- BrainTools - https://www.braintools.ru -

Работа с AI-ML-нагрузками в Kubernetes: плагин Headlamp для Kubeflow

Работа с AI-ML-нагрузками в Kubernetes: плагин Headlamp для Kubeflow - 1

Kubernetes незаметно стал платформой по умолчанию для ИИ и машинного обучения [1]. Запускаете ли вы серверы notebook-ов для дата-сайентистов, планируете распределённые задачи обучения, настраиваете гиперпараметры или оркестрируете многоэтапные ML-пайплайны. Эти нагрузки всё чаще оказываются в кластере Kubernetes. Kubeflow [2] — один из самых популярных способов собрать этот стек, причём Kubernetes-нативным путём: каждая возможность описана как CRD (Custom Resource Definition, описание пользовательского типа ресурса Kubernetes).

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

Команда VK Cloud [3] перевела статью о плагине Headlamp Kubeflow, который закрывает этот разрыв и выводит пользовательские ресурсы Kubeflow прямо внутри универсального Kubernetes UI. Это проработанный пример паттерна, которому может следовать любая насыщенная CRD платформа: встречать операторов там, где они уже работают, и показывать им истину на уровне кластера.

Сам Headlamp это расширяемый веб-UI для Kubernetes, поддерживаемый в рамках Kubernetes SIG UI [4] и лицензированный под Apache 2.0. Он работает как десктопное приложение или внутри кластера, а через систему плагинов кто угодно может добавить полноценные представления для пользовательских ресурсов.

Почему операторам нужно другое представление

Специализированные ML-дашборды помогают дата-сайентистам отправлять эксперименты, пайплайны и notebook. Операторы кластера и SRE устраняют неполадки в лежащих под ними ресурсах Kubernetes и задают другие вопросы:

  • Почему notebook завис? Это ImagePullBackOff, OOMKilled или Pod, ожидающий PersistentVolumeClaim?

  • Какие ресурсы Run недавно упали в разных пространствах имён (namespace)?

  • Какой набор параметров Katib Experiment сообщает как оптимальный?

  • Ссылаются ли ресурсы TrainJob на ожидаемые ресурсы TrainingRuntime?

  • Какие batch-нагрузки выполняются и в каком состоянии их сообщает Kubernetes?

Плагин Headlamp Kubeflow помогает ответить на эти вопросы, читая напрямую из API-сервера Kubernetes. Он показывает условия Pod, причины сбоев Kubernetes и ресурсы из разных namespace, не требуя промежуточного ML-сервиса или базы данных.

Что покрывает плагин

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

Плагин поддерживает следующие семейства компонентов и API-ресурсы:

Компонент

Назначение

API-ресурсы

Notebooks

Предоставляет среды разработки, например Jupyter, VS Code и RStudio

Notebook, Profile, PodDefault

Pipelines

Определяет и отслеживает пайплайны, версии, эксперименты, запуски и расписания

Pipeline, PipelineVersion, Run, RecurringRun, Experiment

Katib

Автоматизирует настройку гиперпараметров и поиск нейросетевой архитектуры

Experiment, Trial, Suggestion

Training

Запускает распределённые нагрузки обучения, например задачи PyTorch и TensorFlow

TrainJob, TrainingRuntime, ClusterTrainingRuntime

Spark

Запускает крупномасштабную обработку данных с Apache Spark

SparkApplication, ScheduledSparkApplication

Что вы можете увидеть

Разбор Pod-ов notebook-серверов

Представление деталей Notebook показывает условия Pod и их поля reason и message. Оно также показывает запросы и лимиты CPU, memory и GPU; монтирования томов и их базовые типы: PersistentVolumeClaim, ConfigMap, Secret или emptyDir; переменные окружения со ссылками на объекты Secret или ConfigMap; sidecar-контейнеры; tolerations (допуски) узлов. Это представление консолидирует информацию, которая иначе потребовала бы нескольких команд kubectl describe.

Разбор настройки гиперпараметров

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

Разбор состояния пайплайна без базы данных бэкенда

Представления Pipelines читают ресурсы API Kubernetes напрямую и не запрашивают API-сервис Kubeflow Pipelines или базу данных бэкенда. Сохранённое состояние пайплайна можно смотреть, даже когда этот сервис недоступен. Представление деталей Pipeline сравнивает спецификации последней и предыдущей PipelineVersion в параллельном YAML-диффе. Представления Run показывают состояние и длительность, представления RecurringRun показывают расписания в человекочитаемом виде, а представление артефактов агрегирует значения pipelineRoot из недавних ресурсов Run.

Карта ML-ресурсов

Плагин регистрирует источник карты Headlamp [5], который рендерит ресурсы Notebook, Profile, PodDefault, Experiment, Pipeline, SparkApplication и TrainJob как узлы графа. Он рисует рёбра между поддерживаемыми ресурсами на основе .metadata.ownerReferences. Headlamp также показывает встроенные сводки для этих типов ресурсов при наведении курсора.

Попробуйте

headlamp-k8s plugins [6] объясняет установку и настройку локального кластера, включая лёгкий путь только с CRD для оценки. Плагин обнаруживает установленные API-группы, поэтому его можно использовать с существующей модульной установкой Kubeflow или создать оценочный кластер только с CRD и примерами ресурсов.

Примените паттерн к другим платформам

Kubeflow иллюстрирует более широкий паттерн. Платформы часто моделируют доменно-специфичные рабочие процессы с помощью пользовательских ресурсов. Их дашборды сфокусированы на этих процессах, тогда как операторам Kubernetes нужно ещё и состояние лежащих под ними API-ресурсов и Pod-ов. Плагин на основе CRD в универсальном Kubernetes UI выводит это состояние, не заставляя операторов переключаться между несвязанными инструментами.

Плагин использует лицензию Apache 2.0 и разрабатывается в рамках Kubernetes SIG UI. Чтобы сообщить о проблеме или внести улучшение, используйте issue tracker [7] или pull requests [8] репозитория плагинов Headlamp.

Автор: levashove

Источник [9]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/33581

URLs in this post:

[1] обучения: http://www.braintools.ru/article/5125

[2] Kubeflow: https://www.kubeflow.org/

[3] VK Cloud: https://cloud.vk.com/

[4] Kubernetes SIG UI: https://github.com/kubernetes-sigs/headlamp

[5] источник карты Headlamp: https://headlamp.dev/docs/latest/development/plugins/functionality/extending-the-map/

[6] headlamp-k8s plugins: https://github.com/headlamp-k8s/plugins/blob/main/kubeflow/README.md

[7] issue tracker: https://github.com/headlamp-k8s/plugins/issues

[8] pull requests: https://github.com/headlamp-k8s/plugins/pulls

[9] Источник: https://habr.com/ru/companies/vktech/articles/1062726/?utm_campaign=1062726&utm_source=habrahabr&utm_medium=rss

www.BrainTools.ru

Rambler's Top100