MLOps Path

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: preprocesstrainevaluate. Каждый 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.

Что сделать после занятия

Официальные материалы

Открыть интерактивную версию