CI/CD для ML: чем отличается

Обычный CI проверяет код; ML-конвейер должен проверять ещё данные и саму модель.

CI/CD для ML — это конвейер непрерывной интеграции и доставки, расширенный валидацией данных, тестами модели и непрерывным обучением (CT).

Почему обычного CI/CD мало

В классическом софте артефакт один — код. Прошли тесты, собрали, выкатили. В ML артефактов три (код, данные, модель), и два из них динамические. Поэтому ML-конвейер должен отвечать не только на «не сломал ли я код», но и на «хороши ли данные» и «достаточно ли хороша обученная модель, чтобы выехать в прод».

Три буквы: CI, CD, CT

CIинтеграция: тесты кода + тесты данных + тесты модели
CDдоставка: выкат не просто сервиса, а пайплайна обучения / модели
CTcontinuous training: автоматическое переобучение по триггеру/расписанию

CT — то, чего нет в DevOps. Это автоматическая выработка нового артефакта-модели без участия человека, когда приходят свежие данные.

Что происходит в ML-конвейере

push кода / новые данные
        |
        v
+--------------------+
| CI: lint + unit    |
|   + тесты данных   |
|   + smoke-обучение |
+---------+----------+
          v
+--------------------+
| Обучение (CT)      |
|  на свежих данных  |
+---------+----------+
          v
+--------------------+
| Валидация модели   |
|  метрики vs порог  |
|  vs текущий прод   |
+---------+----------+
          | прошла?
          v
+--------------------+
| CD: упаковка +     |
|  деплой (канарейка)|
+--------------------+

Гейт качества

Ключевое отличие — model validation gate: новая модель выезжает, только если её метрика выше порога И не хуже текущей прод-модели на одном валидационном наборе. Это автоматическое «не навреди»: даже при зелёном CI плохая модель не пройдёт.

# фрагмент шага CI (GitHub Actions)
- name: Validate model
  run: |
    python validate.py       --min-f1 0.90       --baseline models/prod.pkl       --candidate models/candidate.pkl

Тесты в ML-конвейере

  • Тесты кода — обычные unit-тесты функций препроцессинга.
  • Тесты данных — схема, диапазоны, доля пропусков (см. следующий урок).
  • Тесты модели — метрика выше порога, отсутствие провалов на срезах, поведение на инвариантах.

Как работает под капотом

ML-конвейер — это обычный CI-раннер (GitHub Actions, GitLab CI), который оркеструет шаги: подтянуть данные через dvc pull, прогнать тесты, запустить обучение, сравнить метрики, и при успехе зарегистрировать модель в реестре и инициировать деплой. Триггером служит либо push кода, либо событие «появились новые данные» (через расписание или вебхук), что и реализует CT.

Частые ошибки

  • Гонять CI без тестов данных. Зелёный код при битых данных всё равно даст плохую модель.
  • Деплой без гейта качества. Тогда регрессия модели уедет в прод автоматически.
  • Путать CT с CD. CT производит модель, CD её доставляет — это разные стадии.

Итог

  • CI/CD для ML добавляет к обычному конвейеру валидацию данных, тесты модели и непрерывное обучение (CT).
  • Гейт качества пускает в прод только модель, которая лучше порога и не хуже текущей прод-версии.
  • Триггером может быть и push кода, и приход новых данных — последнее реализует CT.
Проверьте себя
1. Что обозначает CT в контексте ML-конвейера?
AContinuous testing — непрерывное тестирование кода
BContinuous training — автоматическое переобучение по триггеру или расписанию
CCode transfer — перенос кода
DContainer tagging
2. Что делает model validation gate?
AУскоряет обучение
BПропускает в прод только модель лучше порога и не хуже текущей прод-версии
CУдаляет старые модели
DШифрует артефакт
3. Почему в ML-конвейер добавляют тесты данных?
AДля красоты лога
BПотому что зелёный код при битых данных всё равно даст плохую модель
CЧтобы заменить unit-тесты
DЭто требование Docker