Какие подходы вы используете для CI/CD в проектах с компьютерным зрением?

В проектах компьютерного зрения (CV) реализация полноценного CI/CD (Continuous Integration / Continuous Delivery) пайплайна требует адаптации под особенности моделей машинного обучения, работу с изображениями и объемными артефактами (веса моделей, датасеты). В отличие от классического CI/CD для веб-приложений, где основной фокус на сборке, тестировании и выкладке кода, в ML-CV проектах добавляются этапы: обучение, валидация, тестирование моделей, регистрация артефактов, мониторинг и катастрофический откат.

Ниже приведён детальный обзор используемых подходов, инструментов и этапов.

1. Общая структура CI/CD для CV

Пайплайн можно условно разбить на следующие этапы:

1\. Data Versioning  2. Training  3. Evaluation
4\. Model Validation  5. Packaging  6. Deployment
7\. Post-Deployment Monitoring

Каждый шаг автоматизируется с помощью CI/CD-систем (GitHub Actions, GitLab CI, Jenkins, etc.) и MLops-фреймворков (MLflow, DVC, Kubeflow, Airflow, etc.).

2. Data Versioning и подготовка данных

  • Хранение данных в DVC (Data Version Control), LakeFS или Delta Lake

  • Разделение данных на:

    • raw/ (немодифицированные данные)

    • processed/ (аугментированные, очищенные)

    • labeled/ (с разметкой)

  • Автоматическая проверка входных данных:

    • структура (размеры, формат, каналы)

    • статистики (mean, std, histograms)

    • outlier detection

  • Метаданные фиксируются: дата, источник, кто обновил

Инструменты:

  • DVC + Git

  • Weights & Biases Artifacts

  • Pachyderm для data-lineage

3. CI: тесты, проверки, контроль кода

  • Юнит-тесты на даталоадеры, модели, loss-функции

  • Проверка совместимости версий фреймворков

  • Статический анализ (flake8, pylint, black)

  • Проверка конвертации моделей (ONNX export, TorchScript)

  • Проверка инференса dummy-данных

Пример GitHub Actions:

\- name: Run unit tests
run: |
pytest tests/
python test_export.py --format onnx

4. Обучение модели (training pipeline)

  • Обучение запускается через скрипт или workflow (Airflow, Kubeflow)

  • Используется config.yaml с гиперпараметрами

  • Логгирование метрик: loss, accuracy, mAP, IoU

  • Использование трекинга экспериментов:

    • MLflow

    • W&B

    • Neptune.ai

  • Выгрузка артефактов: веса модели, логгинг, графики

Training можно выносить в отдельный pipeline (asynchronous CI), чтобы не перегружать основную CI/CD систему.

5. Evaluation / validation

  • Тестирование модели на holdout-наборе (Golden Set)

  • Сравнение с предыдущей версией модели:

    • Δ Precision, Recall, IoU

    • A/B-сравнение

    • Grad-CAM + overlay

  • Алерт, если метрики деградировали

  • Отчет в PDF/HTML с графиками, confusion matrix

Пример автоматической проверки:

python evaluate.py --model model_v3.pth --test_set golden_set.json

6. Регистрация модели

  • Регистрируются:

    • веса (.pth, .onnx, .engine)

    • метаданные (классы, размер входа, dependencies)

    • метрики

  • Используются реестры:

    • MLflow Model Registry

    • Sagemaker Model Registry

    • TorchServe Model Zoo

  • Поддержка stage-тегов: staging, production, archived

7. Packaging и контейнеризация

  • Сборка Docker-образа с моделью + API-интерфейсом:

    • FastAPI / Flask / TorchServe

    • Инференс в /predict, /health, /metrics

  • Requirements.txt или Conda environment

  • Выкладка в Docker Registry (GHCR, ECR, DockerHub)

Пример Dockerfile:

FROM pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime
COPY model.pt /app/
COPY app.py /app/
CMD \["python", "[app.py](http://app.py)"\]

8. Deployment: выкладка модели

  • Типы выкладки:

    • REST API (на сервере)

    • gRPC (низкая задержка)

    • Edge-устройства (Jetson, Coral)

    • Mobile: TFLite / CoreML / ONNX Runtime Mobile

  • Инструменты:

    • KServe (на Kubernetes)

    • Triton Inference Server

    • TorchServe

    • BentoML

  • Поддержка Canary Deploy / Blue-Green Deploy:

    • Выкладывается модель только на часть трафика

    • Метрики сравниваются до полного переключения

9. CD: автоматическая доставка

  • Обновление модели при повышении в реестре (MLflow staging → production)

  • CI-система запускает CD (например, GitLab CI → deploy stage)

  • Helm chart / Terraform / Ansible для конфигурации

  • Хранение версии модели и API как часть GitOps-репозитория

10. Мониторинг после деплоя

  • Latency, throughput, ошибки → Prometheus + Grafana

  • Отслеживание качества модели:

    • распределение предсказаний

    • confidence-дрифт

    • частота вызова API

  • Обратная связь от пользователей:

    • ручная проверка предсказаний

    • активация active learning

  • Shadow-тестирование:

    • новая модель работает в фоне, сравнивается с основной

11. Автоматическая откатка (rollback)

  • Настраивается по условиям:

    • падение precision > 5%

    • время ответа > 500 мс

    • высокая доля ошибок (status code != 200)

  • Используется Helm rollback, Git revert, MLflow stage downgrade

  • В критических задачах — двойной контроль + ручное одобрение

12. CI/CD для edge-инференса

  • Модель конвертируется в TFLite / ONNX / TensorRT

  • Контейнер для edge (на базе JetPack SDK или Yocto)

  • OTA (Over The Air) обновление:

    • получение модели с центрального сервера

    • валидация, тест, активация

  • Локальные метрики и логи передаются через MQTT, gRPC или REST

13. Инструменты и стек

Назначение Инструменты
CI/CD GitHub Actions, GitLab CI, Jenkins, CircleCI
--- ---
MLops MLflow, W&B, DVC, Kubeflow, SageMaker Pipelines
--- ---
Контейнеризация Docker, Podman, BuildKit
--- ---
Serving TorchServe, Triton, BentoML, KServe, FastAPI
--- ---
Мониторинг Prometheus, Grafana, Sentry, Loki
--- ---
Deployment control Helm, ArgoCD, Terraform, Ansible
--- ---
Explainability Captum, TorchCAM, tf-explain, Grad-CAM, SHAP
--- ---

14. Пример пайплайна (GitHub Actions)

name: CV CI/CD Pipeline
on:
push:
branches: \[main\]
jobs:
test:
runs-on: ubuntu-latest
steps:
\- uses: actions/checkout@v3
\- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.9
\- run: pip install -r requirements.txt
\- run: pytest tests/
train:
needs: test
runs-on: ubuntu-latest
steps:
\- run: python train.py --config config.yaml
evaluate:
needs: train
runs-on: ubuntu-latest
steps:
\- run: python evaluate.py --model model.pth
\- name: Register Model
run: python register.py
deploy:
needs: evaluate
if: success()
runs-on: ubuntu-latest
steps:
\- run: docker build -t cvmodel .
\- run: docker push ghcr.io/user/cvmodel
\- run: helm upgrade --install cvservice ./helm

Эффективный CI/CD для CV позволяет выпускать модели быстрее, безопаснее и с отслеживаемым качеством. Он поддерживает воспроизводимость, прозрачность, возможность быстрого rollback и позволяет команде сосредоточиться на улучшении моделей, а не на ручных выкладках.