← КейсыML-платформа
ML-платформа на Kubeflow для 1000+ пользователей
Десятки команд дата-сайентистов и аналитиков, тысячи сотрудников с доступом к ML. Вместо DevBox у каждого и нескольких юнит-платформ собрали одну платформу, где GPU делятся между командами.
Цифры
Было
- DevBox: у каждого дата-сайентиста своя машина с GPU и SSH. Лучшая платформа для одного человека и худшая для компании: GPU простаивают, кто чем занят, не видно.
- Юнит-платформы: одна команда строит на Kubeflow, другая на Airflow. Люди держат в голове оба инструмента, онбординг затягивается, железо закупают наперегонки.
- Пайплайны падают молча: причину ошибки пользователь не видит и идёт к дежурным.
Стало
- Одна точка входа для ~1000 активных пользователей в месяц: JupyterLab, Pipelines, Model Registry и распределённое обучение.
- GPU делятся через Kueue: утилизация выросла примерно с 15% до 60%.
- ~70 тыс. ранов пайплайнов и до 3 тыс. запусков распределённого обучения в месяц.
- Патчи Kubeflow Pipelines в 2 раза сократили расход ресурсов Kubernetes на пайплайны, ошибки подов видны в UI.
- Одна настройка Istio Sidecar сэкономила около терабайта оперативной памяти на нодах.
Что сделали
Одна точка входа. Kubeflow Central Dashboard с JupyterLab, Pipelines, Model Registry, отчётами и распределённым обучением. Платформа встроена в контекст компании: LDAP/SSO, Vault, observability, S3, Trino, Data Lake.
Команды и доступы через YAML и pull request. Плагин на Go к профилям Kubeflow: профиль команды равен namespace, внутри личные namespace пользователей, люди подтягиваются из LDAP-групп.
Шеринг GPU на Kueue вместо своего шедулера. Флейворы по типам железа (CPU, A100, H100, HGX H100, MIG-слайсы), своя когорта с гарантиями на каждую команду, очереди prod и regular. Регулярная задача может занять чужой простаивающий GPU, а когда владельцу нужны его ресурсы, её вытесняют с чекпоинтом. Для HGX H100 включили topology-aware scheduling по InfiniBand. Всё декларативно, в GitOps.
JupyterLab с удалёнными кернелами. Каждая ячейка поднимает кернел в кластере. Простоял около часа: ресурсы вместе с GPU освобождаются. Креды из Vault и подключения к базам доступны сразу.
Доработали Kubeflow Pipelines и отправили изменения в апстрим. Ошибки подов видны в UI, появились метрики и SLA, стало меньше запросов в MySQL, central driver заменил пару driver-подов на каждый ран.
Обвязка под тысячи namespace. Istio Sidecar урезает конфиг Envoy при 3000+ namespace, секреты приходят через Vault Injection, распределённое обучение идёт через Kubeflow Trainer. Свой Model Registry на S3 и MySQL и Model Delivery: нажал «Доставить», и модель подменилась в работающем инференсе без перезапуска.
Стек
KubeflowKubeflow PipelinesArgo WorkflowsKueueKubeflow TrainerJupyterLabIstioVaultLDAP/SSOMySQLS3Grafana
Моя роль
MLOps-инженер в команде ML-платформы. Моя зона: утилизация GPU, Kueue для батч-задач, интеграция Vault.