Production CV
~30 мин

CV System Design

Проектирование CV-пайплайнов: видеоаналитика, edge deployment, модели на мобильных устройствах.

CV System Design — проектирование production CV-систем

На senior+ собеседованиях спрашивают не "обучите ResNet", а "спроектируйте систему видеонаблюдения на 10K камер" или "как запустить детекцию на 1M изображений в день?". CV System Design — это архитектура, масштабирование, мониторинг и trade-offs реальных CV-систем.

Типичная архитектура CV-пайплайна

Большинство production CV-систем следуют паттерну:

  • Data Ingestion — приём изображений/видеопотоков. Kafka/RabbitMQ для очередей. S3/MinIO для хранения.
  • Preprocessing — resize, normalization, crop. Часто на CPU. Может быть bottleneck при больших объёмах.
  • Model Inference — GPU сервер(ы). TensorRT/ONNX Runtime. Batching для throughput. Triton для multi-model.
  • Postprocessing — NMS, threshold filtering, бизнес-логика. CPU.
  • Storage & API — результаты в БД (PostgreSQL, Elasticsearch). REST/gRPC API для потребителей.
  • Monitoring — latency, throughput, model drift, error rate. Prometheus + Grafana.

Edge vs Cloud deployment

  • Cloud — централизованная обработка на мощных GPU. Плюсы: легко масштабировать, обновлять модели. Минусы: latency, bandwidth для видеопотоков, зависимость от сети.
  • Edge — инференс на устройстве (NVIDIA Jetson, мобильный телефон, FPGA). Плюсы: низкая latency, работа offline, privacy. Минусы: ограниченные ресурсы, сложное обновление.
  • Hybrid — edge для первичной фильтрации ("есть ли объект?"), cloud для сложного анализа. Оптимальный подход для видеонаблюдения.
  • Mobile — MobileNet, EfficientNet-Lite, Core ML (Apple), TFLite (Android). INT8 quantization обязательна.

Масштабирование

  • Horizontal scaling — больше GPU серверов за load balancer. Kubernetes + GPU operator.
  • Batching — собрать несколько запросов в один batch. Dynamic batching в Triton: latency ↑ на 5ms, throughput ↑ в 4x.
  • Model parallelism — большая модель на нескольких GPU. Для ViT-Huge и подобных.
  • Cascade/Early exit — лёгкая модель фильтрует 90% "простых" случаев, тяжёлая обрабатывает оставшиеся 10%. Пример: MobileNet → ResNet → ViT.
  • Caching — если одно изображение обрабатывается несколько раз (например, разными моделями), кеширование features экономит compute.

Типичные задачи на system design

  • "Спроектируйте систему visual search" — embedding model → vector DB (Faiss/Milvus) → approximate nearest neighbor. Индексирование offline, поиск online.
  • "Видеонаблюдение на 1K камер" — edge detection (YOLO на Jetson) → фильтрация → cloud tracking/ReID. Kafka для потоков. Elasticsearch для поиска.
  • "Модерация контента (NSFW/violence)" — classification pipeline. Cascade: lightweight → heavyweight. Human-in-the-loop для пограничных случаев. Latency < 1s.
  • "Face recognition в офисе" — embedding model (ArcFace) → enrollment DB → real-time matching. 1:N search через Faiss. Anti-spoofing модуль.
  • "Автоматический контроль качества на производстве" — edge camera + detection model. Real-time. False positive rate < 0.1% (иначе забракуют хорошие детали).

Мониторинг CV-моделей

  • Data drift — распределение входных изображений меняется (новая камера, сезон, освещение). Мониторинг через embedding distribution shift.
  • Model drift — accuracy падает со временем. Периодическая оценка на свежих данных.
  • Latency monitoring — P50, P95, P99. Важно для real-time систем. Alerts при P95 > SLA.
  • Error analysis — логирование false positives/negatives. Регулярный human review. Active learning для самых "непонятных" примеров.

🎯 На собеседовании

Как отвечать на system design

1) Clarify requirements — QPS, latency SLA, accuracy requirements, budget. 2) High-level architecture — нарисовать блоки: ingestion → preprocessing → inference → postprocessing → storage. 3) Model choice — почему именно этот backbone? Trade-offs speed vs accuracy. 4) Optimization — TensorRT, batching, quantization. Конкретные цифры latency. 5) Scaling — как обработать 10x больше запросов? Horizontal scaling, caching, cascade. 6) Monitoring — как узнать, что модель деградировала? Data drift, periodic evaluation.