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

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 |
Представление деталей 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.
Плагин регистрирует источник карты 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
Нажмите здесь для печати.