Зачем это нужно
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.
task = Task.init(project_name=..., task_name=...)task.connect_configuration(config_dict)— hyperparameters.Training loop →
Logger.report_scalar(...).task.upload_artifact('model', artifact_object=path).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).