4.3.4 · блок 4
От ClearML к MMS: склейка эксперимента и prod
От ClearML к MMS: склейка эксперимента и prod
Зачем это нужно
ClearML и MMS решают разные задачи, но prod-релиз требует надёжной связи между ними: task_id → artifact → MMS version → Docker image → Helm values. Разрыв на любом шаге — «в prod не та модель» или «не откатить». Этот урок — практическая склейка для корпоративного контура курса.
Основные идеи
Сквозной идентификатор lineage.
ClearML Task abc118
→ artifact model.joblib (hash sha256:...)
→ MMS churn-lgbm v1.3.0 (clearml_task_id=abc118)
→ Jenkins build image churn-serving:abc118-77
→ deploy-repo values image.tag=abc118-77
→ Helm release revision 42
Каждый hop логируется; rollback идёт в обратном порядке.
Promotion workflow (автоматизируемый minimum).
1. DS помечает run tag promotion-candidate в ClearML.
2. Webhook / Jenkins job: валидация (metrics > threshold, required artifacts present).
3. Создание или update записи MMS (Draft) с auto-fill из ClearML API.
4. Manual approve в MMS UI → status Approved-Staging.
5. CI: download artifact → build inference image → push registry → update MMS deployed_image_tag.
6. Bot MR в deploy-repo → Argo CD staging.
7. После checks → Promote Production в MMS → MR prod values.
ClearML API для MLE. Типовые вызовы:
Task.get_task(task_id)— metadata, parameters.OutputModel/ artifacts download URI.- Export metrics для gate:
val/f1 >= 0.82.
Immutable promotion. Одна task → одна MMS version. Re-promote того же artifact без новой version — запрещено policy (audit).
Конфликт версий. Если два candidate одновременно — MMS serializes: только один Approved-Staging challenger; второй ждёт или идёт в другой experiment name.
Bot vs human. Auto-fill Draft из ClearML — bot; Approve Production — human (или dual control).
Failure handling.
| Сбой | Действие |
|------|----------|
| Artifact missing in ClearML | Block promotion, alert DS |
| Image build fail | MMS stays Staging, no Git MR |
| Argo sync fail | MMS not promoted Prod; rollback image tag |
Документация связи. В README сервиса: «Production model всегда из MMS; ClearML task id в /metadata endpoint inference».
Как это выглядит на практике
Jenkins pipeline promote-churn-model (упрощённо):
| Stage | Действие |
|-------|----------|
| Validate | Input: `CLEARML_TASK_ID`; API check metrics |
| Register | POST MMS `/models/churn/versions` body from ClearML |
| Wait | Manual input: approver clicks Approve in MMS |
| Build | `clearml-agent` or curl download artifact; docker build |
| Push | `registry/churn-serving:${TASK_ID}-${BUILD}` |
| Update MMS | PATCH `deployed_image_tag` |
| Deploy | MR deploy-repo bump tag; Argo sync |
Inference pod env:
env:
- name: MODEL_VERSION
value: "1.3.0"
- name: CLEARML_TASK_ID
value: "abc118"
/health возвращает version — SRE сверяет с MMS при инциденте.
Урок 4.4.1 соберёт это в полный E2E с Argo Workflows для train.
Что сделать после занятия
- [ ] Нарисуйте sequence diagram: ClearML → Jenkins → MMS → Git → Argo CD.
- [ ] Опишите 3 validation gates перед созданием записи в MMS.
- [ ] Добавьте в учебный сервис endpoint или env с
MODEL_VERSIONдля observability.