04 · MLOps-цикл и реестры4.3–4.4 · ClearML, MMS и E2E-контур4.4.2сложный

Типовые поломки MLOps-контура

Зачем это нужно

E2E-контур длинный — больше звеньев, больше способов сломаться. Не все поломки — «pod crashed». Часть — silent: модель отвечает 200 OK, но predictions nonsense из-за skew или wrong artifact. Этот урок — каталог типовых сбоев и где их ловить gates и observability.

Умение быстро локализовать звено (train vs registry vs deploy vs traffic) сокращает MTTR и учит проектировать pipeline устойчивым с самого начала.

Основные идеи

Классы поломок.

Класс Пример Симптом
Data Schema change upstream NaN scores, default branch в model
Train OOM GPU, failed job Нет нового candidate в ClearML
Artifact Corrupt pickle, wrong sklearn CrashLoop on start, import error
Registry/MMS Promoted wrong task id Version mismatch in /health
CI/CD Broken Jenkinsfile, failed push Старый image в prod
Deploy Helm typo, insufficient memory Pending pods, OOMKilled
Traffic Istio weight 0 on new subset Canary «не работает»
Skew Train features ≠ serving Metrics OK infra, business KPI down

Поломка: «модель не грузится».

  • Логи pod: ModuleNotFoundError: sklearn → образ собран с другим requirements, чем train.

  • Gate: CI test load model + predict в том же Dockerfile, что prod.

  • Fix: pin versions; rebuild image from MMS artifact URI.

Поломка: «ClearML task успешен, но в MMS пусто».

  • Webhook Jenkins не сработал; API key expired.

  • Detect: alert на «candidate tag without MMS record > 24h».

  • Fix: replay promote job с task_id.

Поломка: «Argo CD OutOfSync бесконечно».

  • Manual kubectl edit (drift); invalid Helm template.

  • Fix: enforce GitOps only; helm template in CI; revert drift.

Поломка: «Canary 5%, но ошибок не видно».

  • Istio metrics смотрят только 5% traffic; sample too small.

  • Business dashboard still on old version aggregate.

  • Fix: compare canary subset explicitly; SLO on canary route.

Поломка: «Train pipeline писал в prod bucket».

  • Wrong env var S3_BUCKET=prod in Workflow template.

  • Gate: namespace isolation; policy OPA; separate credentials staging/prod.

Поломка: «Rollback не помог».

  • Откатили image, но feature schema upstream уже новая — старая модель incompatible.

  • Fix: rollback plan includes data contract version; MMS champion + feature flag.

Поломка: «Два champion в MMS».

  • Race двух promote jobs.

  • Gate: MMS transactional promote; optimistic locking on version.

Runbook structure. Для каждого сервиса: symptoms → checks (MMS version, Argo app status, ClearML task) → mitigation → escalation.

Как это выглядит на практике

Инцидент INC-4421: «Churn scores все 0.5 после релиза».

Timeline:

  1. T+0 — Alert: business «conversion model flat» (не infra alert!).

  2. T+15m — On-call: pods healthy, latency OK. /health shows model v1.3.0.

  3. T+30m — Compare MMS champion ClearML task abc118 vs artifact in pod hash — mismatch.

  4. Root cause: Jenkins promote used wrong TASK_ID parameter (typo in manual job).

  5. Mitigation: MMS revert champion v1.2.2; Argo rollback MR merged; Istio 100% old.

  6. Follow-up: promote job only from MMS UI button that passes task_id; delete manual parameter default.

Table «где могли поймать»:

Stage Control
Promote Require task_id from MMS API only
Build Embed task_id in image label; admission check
Deploy Init container verify artifact hash vs MMS
Runtime Log input feature stats; alert on constant output

Связь с блоком 5: infra metrics green ≠ model quality OK — нужен drift dashboard.

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

  • Выберите 3 поломки из урока и напишите «symptom → first check → fix» для вашего контура.

  • Добавьте один quality gate в Jenkins promote, который предотвращает конкретный сценарий.

  • Проведите tabletop exercise: «ClearML OK, prod bad» — ваши шаги расследования.

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