Вы обучили новую 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 недели (постепенное увеличение) |
| Использование ресурсов | Дублирование трафика | Дополнительная нагрузка пропорциональна проценту |
Пошаговая настройка зеркального деплоя
- Аудит инфраструктуры — определить текущий стек (Istio, nginx, прикладной уровень) и параметры трафика.
- Выбор метода mirroring — Istio для Kubernetes (предпочтительно), nginx для bare-metal, прикладной код для сложной логики.
- Настройка роутинга — создать VirtualService с mirror или location block с mirror.
- Асинхронное логирование — реализовать запись результатов shadow в сравнение store (например, Redis + PostgreSQL).
- Мониторинг — настроить дашборды в Grafana с метриками Agreement rate, latency, utilization.
- Тестовый запуск — запустить shadow на 10% трафика (mirrorPercentage: 10) для проверки инфраструктуры.
- Полное зеркалирование — увеличить до 100% и собирать данные минимум 1 неделю.
- Анализ и принятие решения — если 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 под ваш проект — мы гарантируем качество и прозрачность каждого этапа.







