Настройка CI/CD для ML-моделей: автоматическое обучение и деплой
CI/CD для ML принципиально отличается от классического software CI/CD: здесь нужно тестировать не только код, но и данные, метрики модели, производительность инференса. Полноценный ML pipeline включает автоматический запуск переобучения, валидацию качества модели, promotion в staging/production и откат при деградации.
Архитектура ML CI/CD
[Git Push] → [Data Validation] → [Model Training] → [Model Evaluation]
→ [Model Registry] → [Staging Deploy] → [Integration Tests]
→ [Canary Deploy] → [Production Promote] → [Monitoring]
Каждый этап — отдельная задача в пайплайне с явными критериями success/failure.
Инструменты оркестрации
GitHub Actions / GitLab CI — подходят для небольших команд. Достаточно для запуска обучения на self-hosted runners с GPU.
Kubeflow Pipelines — Kubernetes-native оркестратор для ML. Каждый шаг — отдельный контейнер. Поддерживает кэширование промежуточных результатов, визуальный граф пайплайна, версионирование.
MLflow Projects + Prefect/Airflow — менее монолитный подход. Prefect или Airflow оркестрируют, MLflow трекает.
Vertex AI Pipelines / SageMaker Pipelines — managed варианты для соответствующих облаков.
Пример пайплайна на GitHub Actions
name: ML Training Pipeline
on:
schedule:
- cron: '0 2 * * 1' # Еженедельно по понедельникам
push:
paths:
- 'src/train.py'
- 'params.yaml'
jobs:
validate-data:
runs-on: self-hosted
steps:
- uses: actions/checkout@v3
- name: Run Great Expectations
run: python validate_data.py --suite training_data
train-model:
needs: validate-data
runs-on: [self-hosted, gpu]
steps:
- name: Train
run: python train.py --config params.yaml
- name: Evaluate
run: python evaluate.py --threshold 0.92
promote-to-staging:
needs: train-model
runs-on: ubuntu-latest
steps:
- name: Register and promote
run: |
python scripts/promote_model.py \
--stage staging \
--min-f1 0.92
Тестирование модели как часть CI
Data validation (Great Expectations, Pandera): проверка схемы, распределений, наличия выбросов в обучающих данных перед запуском обучения.
Model evaluation gates: модель проходит в следующий этап только если метрики превышают пороговые значения. Важно сравнивать не с абсолютным порогом, а с текущей production-моделью: новая версия должна быть лучше существующей хотя бы на 1-2%.
Inference latency tests: автоматическая проверка p95 latency инференса. Если модель стала точнее, но в 3 раза медленнее — это не прогресс.
Shadow testing: новая модель прогоняет production-трафик параллельно с текущей, результаты сравниваются без влияния на пользователей.
Стратегии деплоя
| Стратегия | Риск | Откат | Use case |
|---|---|---|---|
| Blue-Green | Средний | Мгновенный | Небольшие модели |
| Canary (5% → 25% → 100%) | Низкий | Быстрый | Критичные сервисы |
| Shadow | Минимальный | Не нужен | Тестирование без риска |
| Rolling | Средний | Медленный | Stateless инференс |
Rollback механизм
Автоматический откат должен срабатывать при:
- Business-метрика упала более чем на X% (CTR, конверсия)
- Error rate инференс-сервиса превысил порог
- Latency p99 вышел за SLA
# Мониторинг и автооткат
if current_model_metrics['f1'] < production_model_metrics['f1'] * 0.97:
model_registry.transition_to_stage(current_version, 'Archived')
model_registry.transition_to_stage(previous_version, 'Production')
alert_team("Auto-rollback triggered")
Сроки настройки
Базовый пайплайн (обучение + деплой в staging): 1 неделя. Полноценный pipeline с тестами, canary deployment и автороллбэком: 3-4 недели. Enterprise-вариант с Kubeflow и полной интеграцией в корпоративный CI/CD: 6-8 недель.







