
Kubernetes незаметно стал платформой по умолчанию для ИИ и машинного обучения. Запускаете ли вы серверы notebook-ов для дата-сайентистов, планируете распределённые задачи обучения, настраиваете гиперпараметры или оркестрируете многоэтапные ML-пайплайны. Эти нагрузки всё чаще оказываются в кластере Kubernetes. Kubeflow — один из самых популярных способов собрать этот стек, причём Kubernetes-нативным путём: каждая возможность описана как CRD (Custom Resource Definition, описание пользовательского типа ресурса Kubernetes).
Такая архитектура подарок операторам кластера: ML-нагрузки можно наблюдать и управлять ими теми же примитивами, что и всем остальным в кластере. Но на практике специализированные ML-дашборды, которые поставляются с этими платформами, скрывают лежащий под ними слой Kubernetes. Когда notebook застревает или задача обучения падает, оператор часто вынужден откатываться к kubectl, чтобы выяснить, что на самом деле произошло на уровне Pod.
Команда VK Cloud перевела статью о плагине Headlamp Kubeflow, который закрывает этот разрыв и выводит пользовательские ресурсы Kubeflow прямо внутри универсального Kubernetes UI. Это проработанный пример паттерна, которому может следовать любая насыщенная CRD платформа: встречать операторов там, где они уже работают, и показывать им истину на уровне кластера.
Сам Headlamp это расширяемый веб-UI для Kubernetes, поддерживаемый в рамках Kubernetes SIG UI и лицензированный под 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, который рендерит ресурсы Notebook, Profile, PodDefault, Experiment, Pipeline, SparkApplication и TrainJob как узлы графа. Он рисует рёбра между поддерживаемыми ресурсами на основе .metadata.ownerReferences. Headlamp также показывает встроенные сводки для этих типов ресурсов при наведении курсора.
Попробуйте
headlamp-k8s plugins объясняет установку и настройку локального кластера, включая лёгкий путь только с CRD для оценки. Плагин обнаруживает установленные API-группы, поэтому его можно использовать с существующей модульной установкой Kubeflow или создать оценочный кластер только с CRD и примерами ресурсов.
Примените паттерн к другим платформам
Kubeflow иллюстрирует более широкий паттерн. Платформы часто моделируют доменно-специфичные рабочие процессы с помощью пользовательских ресурсов. Их дашборды сфокусированы на этих процессах, тогда как операторам Kubernetes нужно ещё и состояние лежащих под ними API-ресурсов и Pod-ов. Плагин на основе CRD в универсальном Kubernetes UI выводит это состояние, не заставляя операторов переключаться между несвязанными инструментами.
Плагин использует лицензию Apache 2.0 и разрабатывается в рамках Kubernetes SIG UI. Чтобы сообщить о проблеме или внести улучшение, используйте issue tracker или pull requests репозитория плагинов Headlamp.