CI/CD для ML: чем отличается
Обычный CI проверяет код; ML-конвейер должен проверять ещё данные и саму модель.
CI/CD для ML — это конвейер непрерывной интеграции и доставки, расширенный валидацией данных, тестами модели и непрерывным обучением (CT).
Почему обычного CI/CD мало
В классическом софте артефакт один — код. Прошли тесты, собрали, выкатили. В ML артефактов три (код, данные, модель), и два из них динамические. Поэтому ML-конвейер должен отвечать не только на «не сломал ли я код», но и на «хороши ли данные» и «достаточно ли хороша обученная модель, чтобы выехать в прод».
Три буквы: CI, CD, CT
| CI | интеграция: тесты кода + тесты данных + тесты модели |
| CD | доставка: выкат не просто сервиса, а пайплайна обучения / модели |
| CT | continuous 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.