Цели автoscaling для TTS на SageMaker выводят из Q_max и T_total, а не с потолка

Цель автоскейлинга в консоли SageMaker может выглядеть нормальной, пока в пик очередь не уводит задержку за SLO — и отдельного алерта при этом нет. В разборе Kokoro-82M на Amazon SageMaker AI AWS заменила «цифру с потолка» двумя замерами по живому endpoint: Q_max — сколько одновременных запросов держит один инстанс внутри SLO, T_total — сколько длится полный scale-out. Пороги масштабирования и паузы между срабатываниями получают из этих значений арифметикой.
Почему не метрики «как у LLM»
TTS держит соединение секундами, но без цикла генерации по токенам — типичный «токенов в секунду» тут не привяжешь. Kokoro-82M — 82-миллионная модель без авторегрессии (ветка StyleTTS2): фраза синтезируется одним проходом, а не по токену.
Масштабирование в примере завязано на ConcurrentRequestsPerModel — метрику, которую SageMaker публикует сам, без своих эмиттеров в контейнере. В CloudWatch это Maximum за 10 секунд; бенчмарк снимает и её, и in-flight у клиента на каждой ступени лестницы и переводит порог в единицы CloudWatch. В прогоне из поста коэффициент везде 1.0 — числа совпали без поправки.
Замеры на ml.g5.xlarge
Q_max ищут лестницей нагрузки: фиксируют конкуренцию N и поднимают N, пока p95 задержки до первого байта аудио не пробьёт SLO в 3000 ms. При 50 параллельных запросах p95 — 2805.7 ms (ещё в норме), при 60 — 3374.8 ms (уже нет), отсюда Q_max = 50. Без очереди среднее — 61.3 ms, p95 — 66.1 ms.
T_total при принудительном scale-out — 260.2 s; больше половины съедает этап от desired_set до появления инстанса в логах — 180.8 s (56.5%). uv run tts-bench ttotal берёт артефакт после qmax и не запускается на другом транспорте, чем лестница.
Деплой и порядок команд
- Три стека AWS CDK: SpeechFoundationStack (IAM, S3 под веса), SpeechModelCacheStack (синк Hugging Face в бакет), SpeechEndpointStack (образ в ECR и endpoint).
- Автоскейлинг в третьем стеке синтезируется только если scaling_enabled и на диске есть реальный plan-артефакт — иначе «угадайка» не доезжает до продакшена молча.
- Перед платными прогонами:
uv run tts-bench drift; при заморозке после сорванного qmax/ttotal —uv run tts-bench thaw --endpoint speech-kokoro-82m. - Деплой одной командой:
uv run speech-infra deploy kokoro-82m; живой qmax — около 36 минут, на время пинуют один инстанс.
Контейнер поддерживает response streaming и bidirectional streaming — выбор транспорта влияет на сопоставимость замеров. В образе зафиксирован PyTorch с известным advisory PYSEC-2026-2286; для чего-то кроме PoV авторы просят обновить pin до torch 2.10.0.
Источник: Stop guessing auto scaling targets for TTS on Amazon SageMaker AI.