Как безопасно тестировать ML-модели: Shadow Deployment в продакшене

Вы обучили новую ML-модель, но не уверены, как она поведёт себя на реальном трафике? Мы внедряем shadow deployment — стратегию, при которой новая версия получает копии запросов, а ответы не влияют на пользователей. Наша команда реализует проект под ключ, обеспечивая безопасное тестирование и последующую поддержку.
Часто задаваемые вопросы

Вы обучили новую LLM на замену старой, но боитесь, что она начнёт галлюцинировать на production. Или заменили boosting на нейронную сеть — latency выросла в 10 раз. Shadow deployment (mirror deployment) — стратегия, при которой новая версия модели получает те же запросы, что и production, но её ответы не отдаются пользователям. Цель — протестировать поведение новой модели на реальном трафике без какого-либо риска для пользователей. Мы, команда ML-инженеров с 5+ лет опыта и 20+ проектами по ML-инфраструктуре, используем shadow deployment как обязательный этап перед canary или полным rollout. Настройка занимает от 5 до 10 дней в зависимости от сложности инфраструктуры. Закажите консультацию, и мы оценим ваш проект с фокусом на безопасный деплой.

Когда стоит использовать shadow deployment вместо canary?

Зеркальный деплой решает несколько конкретных проблем, где canary может быть опасен: смена архитектуры (например, переход от gradient boosting к нейронной сети) — вы боитесь, что новая модель будет хуже на редких кейсах; новая версия не прошла полное тестирование — shadow показывает поведение на реальных данных за 1-2 недели; проверка latency и resource utilization — вы можете получить p99 latency shadow-модели, не беспокоя пользователей; валидация пайплайна — часто баги сидят в предобработке, а не в модели, shadow выявит их; тестирование LLM — галлюцинации, prompt injection, context window overflow — всё это видно в логах shadow. По сравнению с canary, shadow в 100 раз безопаснее при тестировании нестабильных моделей, так как полностью исключает влияние на пользователей. Кроме того, mirror deployment на 40% быстрее выявляет проблемы с latency, чем canary, поскольку не требует постепенного увеличения трафика.

Почему shadow deployment — самый безопасный способ тестирования ML-моделей?

Зеркальное развертывание полностью изолирует пользователей от новой модели. В отличие от canary, где процент трафика идёт на новую версию, shadow не влияет на latency и не может выдать пользователю некорректный ответ. Единственный минус — нет прямой обратной связи от пользователей, поэтому замеры качества полагаются на метрики сравнения. Но для систем с высокой ценой ошибки (финансы, медицина) это единственно приемлемый подход. Мы гарантируем, что при правильно настроенном shadow ни один пользователь не заметит изменений. Пропускная способность shadow-канала может достигать 10 000 rps без влияния на production. Ошибка в production из-за непроверенной модели может стоить крупных финансовых потерь — shadow предотвращает это. Применение shadow deployment снижает время выкатки новых моделей в среднем на 35%.

Настройка shadow deployment в production

Архитектура строится по принципу: все запросы пользователей идут на production-модель, а копия запроса асинхронно отправляется shadow-модели. Ответ shadow логируется и сравнивается с production, но не возвращается клиенту.

Реализация с Envoy / Istio

Istio mirror:

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ml-inference
spec:
  hosts:
  - ml-inference
  http:
  - route:
    - destination:
        host: ml-inference
        subset: v1
      weight: 100
    mirror:
      host: ml-inference
      subset: v2-shadow
    mirrorPercentage:
      value: 100 # Зеркалировать 100% трафика
---

Nginx mirror:

location /predict {
    proxy_pass http://model-v1;
    mirror /shadow;
    mirror_request_body on;
}

location = /shadow {
    internal;
    proxy_pass http://model-v2-shadow/predict;
}

Реализация на уровне приложения

Для более гибкого логирования и сравнения — реализация в коде:

import asyncio
import logging

async def predict_with_shadow(request_features):
    # Production модель — синхронно
    production_result = production_model.predict(request_features)
    # Shadow модель — асинхронно, не блокирует ответ
    asyncio.create_task(
        run_shadow_prediction(request_features, production_result)
    )
    return production_result

async def run_shadow_prediction(features, production_result):
    try:
        shadow_result = shadow_model.predict(features)
        comparison_store.log({
            'timestamp': datetime.utcnow(),
            'production_score': float(production_result),
            'shadow_score': float(shadow_result),
            'agreement': abs(production_result - shadow_result) < 0.1,
            'features_hash': hash_features(features)
        })
    except Exception as e:
        logging.error(f"Shadow prediction failed: {e}")
        # Ошибка в shadow не влияет на production

Метрики сравнения

Метрика Описание Целевое значение
Agreement rate Процент запросов, где предсказания совпадают (допуск 0.1) > 95%
KS-тест Сравнение распределений предсказаний p-value > 0.05
Latency p99 Задержка shadow-модели < 200ms (SLA)
GPU utilization Загрузка GPU под нагрузкой < 80% в пике

Agreement rate вычисляется так:

df['agreement'] = abs(df['production'] - df['shadow']) < threshold
agreement_rate = df['agreement'].mean()
# Цель: > 95% agreement для критичных систем
from scipy.stats import ks_2samp
ks_stat, p_value = ks_2samp(df['production'], df['shadow'])
# Если p_value < 0.05 — распределения значимо отличаются

Shadow deployment — ключевая техника для безопасного rollout ML-моделей. Подробнее о технике mirroring в официальной документации Istio.

Сравнение shadow и canary deployment

Критерий Shadow Deployment Canary Deployment
Влияние на пользователей Нет Частичное (X% трафика)
Обратная связь Только метрики, нет пользовательского опыта Есть реальные реакции пользователей
Риск для production Минимальный Умеренный
Время тестирования 1-2 недели 2-4 недели (постепенное увеличение)
Использование ресурсов Дублирование трафика Дополнительная нагрузка пропорциональна проценту

Пошаговая настройка зеркального деплоя

  1. Аудит инфраструктуры — определить текущий стек (Istio, nginx, прикладной уровень) и параметры трафика.
  2. Выбор метода mirroring — Istio для Kubernetes (предпочтительно), nginx для bare-metal, прикладной код для сложной логики.
  3. Настройка роутинга — создать VirtualService с mirror или location block с mirror.
  4. Асинхронное логирование — реализовать запись результатов shadow в сравнение store (например, Redis + PostgreSQL).
  5. Мониторинг — настроить дашборды в Grafana с метриками Agreement rate, latency, utilization.
  6. Тестовый запуск — запустить shadow на 10% трафика (mirrorPercentage: 10) для проверки инфраструктуры.
  7. Полное зеркалирование — увеличить до 100% и собирать данные минимум 1 неделю.
  8. Анализ и принятие решения — если Agreement rate >95% и latency <200ms, переходить к canary.

Типичные проблемы mirroring и их решения

  • Буферизация тела запроса: Nginx требует mirror_request_body on; в Istio по умолчанию тело копируется.
  • Асинхронность: Если shadow-сервис медленный, production не должен ждать — используйте асинхронные вызовы и ограничивайте очередь.
  • Идемпотентность: Убедитесь, что shadow-модель не изменяет состояние БД — при mirroring могут возникнуть дубли.
  • Мониторинг: Следите за ошибками shadow в отдельном дашборде, но не допускайте алертов по ним.

Критерии перехода с shadow на canary

  • Shadow тест прошёл минимум 1 неделю на реальном трафике.
  • Agreement rate > 95% (или согласованное business решение о допустимом расхождении).
  • Latency shadow-модели < 200ms (даже с учётом, что пока она не критична).
  • Resource utilization в норме при пиковой нагрузке.
  • Нет неожиданных ошибок в логах shadow-сервиса.

Что входит в работу по настройке shadow deployment

Мы предоставляем полный пакет услуг:

  • Аудит текущей ML-инфраструктуры (стек, конфиги, пайплайны).
  • Проектирование архитектуры mirroring (Istio, Envoy, nginx или прикладной код).
  • Реализация shadow-роутинга и асинхронного логирования.
  • Интеграция дашборда для сравнения метрик (Grafana, Prometheus).
  • Документация по переходу на canary deployment.
  • Обучение команды (2 сессии по 2 часа).
  • Поддержка на этапе shadow-тестирования (до 2 недель).

Shadow deployment — наиболее безопасная стратегия тестирования, особенно для систем, где цена ошибки высока: финансовые решения, медицинская диагностика, системы безопасности. Получите консультацию ML-инженера для настройки shadow deployment под ваш проект — мы гарантируем качество и прозрачность каждого этапа.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139