MidТеория2 min

ML в System Design

Когда нужен ML, ML pipeline, MLOps и интеграция машинного обучения в архитектуру систем

Когда нужен Machine Learning

Machine Learning -- не универсальное решение. Прежде чем добавлять ML в систему, нужно ответить на ключевой вопрос: можно ли решить задачу правилами?

Дерево принятия решений

Задача определена?
├── Можно написать правила вручную?
│   ├── Да → Правила работают хорошо?
│   │   ├── Да → ML НЕ НУЖЕН (используй правила)
│   │   └── Нет → Попробуй ML
│   └── Нет → ML может помочь
├── Есть достаточно данных?
│   ├── Да (>10K примеров) → ML возможен
│   └── Нет → Сначала собери данные
└── Результат можно измерить?
    ├── Да → ML подходит
    └── Нет → Определи метрики

Когда ML оправдан

Сценарий Пример Почему ML
Паттерны в данных сложные Распознавание изображений Невозможно описать правилами
Правила постоянно меняются Спам-фильтр Спамеры адаптируются
Персонализация Рекомендации Уникальные предпочтения каждого пользователя
Масштаб данных огромный Fraud detection Человек не может просмотреть миллионы транзакций
Прогнозирование Demand forecasting Множество факторов влияют на результат

Когда ML НЕ нужен

Сценарий Лучшая альтернатива
Простая бизнес-логика if/else правила
Детерминированные вычисления Формулы, алгоритмы
Мало данных (<100 примеров) Ручная разметка, правила
Требуется 100% точность Формальная верификация
Нет обратной связи Невозможно обучить модель

ML Pipeline

ML pipeline -- это последовательность этапов от данных до работающей модели в production.

Общая архитектура

┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐
│  Data   │──▶│Feature  │──▶│ Model   │──▶│ Model   │──▶│  Model  │
│Ingestion│   │Engineer.│   │Training │   │ Serving │   │Monitoring│
└─────────┘   └─────────┘   └─────────┘   └─────────┘   └─────────┘
     │              │              │              │              │
     ▼              ▼              ▼              ▼              ▼
 Raw Data      Features      Artifacts     Predictions     Metrics
 Storage       Store         Registry      API/Batch       Dashboard

Этап 1: Data Ingestion

Сбор и хранение данных -- фундамент любого ML-проекта.

Задача Инструменты Ключевые аспекты
Сбор Kafka, Flink, Airflow Батч vs стриминг
Хранение S3, Data Lake, BigQuery Формат: Parquet, Avro
Качество Great Expectations, Deequ Валидация, мониторинг
Версионирование DVC, LakeFS Воспроизводимость

Этап 2: Feature Engineering

Feature engineering -- преобразование сырых данных в признаки для модели.

Raw Data                    Features
─────────                   ────────
user_registered: 2023-01-15 → account_age_days: 760
purchase_history: [...]     → avg_order_value: 45.2
                            → purchase_frequency: 3.2/month
                            → days_since_last_purchase: 12
page_views: [...]           → session_duration_avg: 4.5min
                            → pages_per_session: 7.3

Этап 3: Model Training

Компонент Описание
Experiment tracking MLflow, W&B -- логирование гиперпараметров и метрик
Distributed training Horovod, Ray -- обучение на кластере GPU
AutoML Auto-sklearn, H2O -- автоматический подбор модели
Hyperparameter tuning Optuna, Ray Tune -- оптимизация параметров

Этап 4: Model Serving

                    ┌──────────────────┐
                    │   API Gateway    │
                    └────────┬─────────┘
                             │
              ┌──────────────┼──────────────┐
              ▼              ▼              ▼
      ┌──────────┐   ┌──────────┐   ┌──────────┐
      │ Online   │   │  Batch   │   │ Streaming│
      │ Serving  │   │ Serving  │   │ Serving  │
      │ (<100ms) │   │ (hourly) │   │ (real-   │
      │          │   │          │   │  time)   │
      └──────────┘   └──────────┘   └──────────┘
      REST/gRPC      Spark/Airflow  Flink/Kafka
Тип Latency Примеры
Online <100 мс Рекомендации, поиск
Batch минуты-часы Email-кампании, отчёты
Streaming <1 сек Fraud detection, alerts

Этап 5: Model Monitoring

Метрика Что отслеживать
Data drift Распределение входных данных изменилось
Concept drift Связь между фичами и таргетом изменилась
Performance Accuracy, latency, throughput деградируют
Bias Модель дискриминирует подгруппы пользователей

MLOps

MLOps -- практики DevOps, адаптированные для ML-систем.

Уровни зрелости MLOps

Level 0: Manual         Level 1: ML Pipeline    Level 2: CI/CD + CT
─────────────────       ──────────────────      ──────────────────
- Jupyter notebooks     - Автоматический        - Автоматический
- Ручной деплой           pipeline                CI/CD pipeline
- Нет мониторинга       - Experiment tracking   - Continuous Training
- Нет версионирования   - Model registry        - A/B testing
                        - Базовый мониторинг    - Feature store
                                                - Полный мониторинг

Компоненты MLOps

Компонент Назначение Инструменты
Feature Store Переиспользование фичей Feast, Tecton
Model Registry Версионирование моделей MLflow, Vertex AI
Experiment Tracking Логирование экспериментов W&B, MLflow
Pipeline Orchestration Автоматизация pipeline Kubeflow, Airflow
Model Serving Inference в production TFServing, Triton
Monitoring Отслеживание качества Evidently, WhyLabs

CI/CD для ML

Code Change          Data Change          Schedule
    │                    │                    │
    ▼                    ▼                    ▼
┌────────┐         ┌─────────┐         ┌─────────┐
│Unit    │         │Data     │         │Retrain  │
│Tests   │         │Validation│        │Trigger  │
└───┬────┘         └────┬────┘         └────┬────┘
    │                   │                   │
    └───────────────────┼───────────────────┘
                        ▼
                ┌──────────────┐
                │   Training   │
                │   Pipeline   │
                └──────┬───────┘
                       ▼
                ┌──────────────┐
                │   Model      │
                │   Validation │
                └──────┬───────┘
                       ▼
              ┌────────────────┐
              │ A/B Test /     │
              │ Canary Deploy  │
              └────────────────┘

Архитектурные паттерны ML-систем

Паттерн: Embedding Service

┌───────────┐     ┌──────────────┐     ┌──────────┐
│  Request  │────▶│  Embedding   │────▶│  Vector  │
│           │     │  Service     │     │  DB      │
└───────────┘     └──────────────┘     └──────────┘
                        │                    │
                        ▼                    ▼
                  ┌──────────┐        ┌──────────┐
                  │ Feature  │        │ Nearest  │
                  │ Vector   │        │ Neighbor │
                  └──────────┘        │ Search   │
                                      └──────────┘

Паттерн: Two-Phase Prediction

Phase 1: Candidate Generation (быстро, грубо)
    1000 кандидатов → 100 кандидатов

Phase 2: Ranking (медленно, точно)
    100 кандидатов → 10 результатов

Пример: YouTube Recommendations
    Millions of videos → Candidate Gen (ANN) → 1000
    1000 → Ranking Model (deep NN) → 36 videos

Итоги

Концепция Суть
ML Pipeline Data → Features → Train → Serve → Monitor
Feature Store Централизованное хранение и переиспользование фичей
MLOps DevOps для ML: автоматизация, мониторинг, воспроизводимость
Online vs Batch Serving Компромисс между latency и throughput
Data/Concept Drift Главная причина деградации модели в production

Главное правило: ML-система -- это прежде всего система данных. 80% работы -- это данные, 20% -- модели. Начинай с данных.

Проверь себя

Чем отличается Data Drift от Concept Drift?

Какой этап ML pipeline обычно занимает 80% времени?

Какой паттерн ML-serving подходит для fraud detection в реальном времени?

Что такое Feature Store в контексте MLOps?

Когда машинное обучение НЕ является хорошим выбором?