4.3.2 · блок 4
ClearML: эксперименты, артефакты и pipeline
ClearML: эксперименты, артефакты и pipeline
Зачем это нужно
Experiment tracking на бумаге понятен; на практике нужен конкретный инструмент. В курсе — ClearML: open-source платформа для логирования runs, хранения артефактов, оркестрации pipeline и (опционально) деплоя. Этот урок — не «кликайте все кнопки», а понимание архитектуры ClearML и того, как DS и MLE работают с одной системой.
Основные идеи
Компоненты ClearML.
| Компонент | Назначение |
|-----------|------------|
| **ClearML Server** | API, UI, metadata DB, file server |
| **Agent** | Worker на машине/GPU — выполняет tasks из очереди |
| **SDK (`clearml`)** | Python: `Task.init`, log metrics, upload artifacts |
| **ClearML Data** | Версионирование датасетов (optional) |
| **Pipeline** | DAG из steps, каждый step — task |
Разработчик ставит SDK; Server — центральная точка правды для экспериментов.
Task lifecycle.
1. task = Task.init(project_name=..., task_name=...)
2. task.connect_configuration(config_dict) — hyperparameters.
3. Training loop → Logger.report_scalar(...).
4. task.upload_artifact('model', artifact_object=path).
5. task.close() — run зафиксирован.
Task получает уникальный ID — его цитируют в MMS и Jenkins.
Artifacts. Файлы (model, plots, csv) привязаны к task. URI стабилен — inference job может скачать artifact по ID без «скинь в Slack».
Hyper-Dataset / Data versioning. Для зрелых команд: snapshot данных как first-class object. На старте достаточно логировать path + hash в parameters.
ClearML Agent и очереди. DS пушит task в queue gpu-large; agent на GPU-сервере забирает job. Это разделение: ноутбук не держит 8-hour train, cluster делает.
Pipeline (ClearML Pipeline). Steps: preprocess → train → evaluate. Каждый step — отдельный task с dependency. Параметры pipeline versioned; rerun с новым lr — один CLI/UI action.
Интеграция с Git. task.set_repo(...) или auto-detect commit. Diff кода виден в UI run.
Безопасность. Server в corp VPN; API keys per user; projects с ACL. Не коммитить credentials в clearml.conf.
Как это выглядит на практике
Структура репозитория:
ml-churn/
train.py # Task.init + training
evaluate.py
pipeline.py # ClearML Pipeline definition
clearml.conf # local ignore; server URL from env
Фрагмент train.py (учебный паттерн):
from clearml import Task
task = Task.init(project_name="churn", task_name="lgbm-train")
task.connect_configuration({"lr": 0.05, "max_depth": 6})
# ... обучение ...
task.get_logger().report_scalar("validation", "f1", f1_score, iteration=1)
task.upload_artifact("model", artifact_object="model.joblib")
MLE настраивает Agent в Kubernetes (Helm chart ClearML agent) с GPU nodeSelector. DS из UI: Clone run → изменить max_depth → Enqueue → agent выполняет.
Pipeline nightly: cron в Kubernetes CronJob вызывает pipeline.py --run; утром DS смотрит таблицу runs, champion помечает tag candidate.
Что сделать после занятия
- [ ] Подключите учебный
train.pyк ClearML: parameters + одна metric + один artifact. - [ ] Создайте project и выполните 3 runs с разными hyperparameters; сравните в UI.
- [ ] Выпишите Task ID лучшего run для следующего урока (MMS).