Вы обучили новую 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 под ваш проект — мы гарантируем качество и прозрачность каждого этапа.







