Amazon SageMaker Inference добавил prefix-aware routing — стратегию, которая смотрит на начало каждого запроса и последовательно отправляет запросы с одинаковым началом на один и тот же инстанс. Это решает проблему, знакомую тем, кто запускает LLM в продакшене: при масштабировании на несколько машин стандартная балансировка размазывает одинаковые префиксы по разным инстансам, и кэш не успевает накапливаться.
Промпт в типичном приложении состоит из двух частей. Фиксированная часть задаёт контекст — инструкции, справочные документы, историю диалога. Переменная часть содержит ввод пользователя. В примере из блога AWS бот поддержки получает 3000 токенов инструкций и 50 токенов вопроса клиента. Без оптимизации модель обрабатывает эти 3000 токенов заново на каждом запросе. Фреймворки вроде vLLM и TensorRT-LLM решают это через prefix caching: они кэшируют вычисленные пары ключ-значение (KV) для уже встречавшихся префиксов и переиспользуют их. Но на одном инстансе кэш работает, а на флоте машин — нет: тот же префикс попадает на инстанс A, потом на B, потом на C, и ни один не видит его достаточно часто.
| Метрика | Длинные контексты (8000 токенов, 1 час) | Короткие контексты (ShareGPT, 30 минут) |
|---|---|---|
| P90 TTFT | снижение на 33–37% | снижение на 24–37% |
| P50 TTFT | снижение на 71–77% | снижение на 13–16% |
| Hit rate KV-кэша | с ~25% до 82% | с ~30% до 80% |
| Пропускная способность | рост на 15–16% | рост на 1,7–2,0% |
Prefix-aware routing меняет логику маршрутизации. Когда запрос приходит на эндпоинт, SageMaker смотрит на начало payload и по нему выбирает инстанс. Одинаковые начала идут на одну машину, разные — распределяются. Если 10 запросов делят префикс, все 10 попадут на один инстанс, и его кэш останется горячим. Тегировать запросы или управлять affinity вручную не нужно — эндпоинт делает это сам по содержимому запроса.
В бенчмарках на Llama 3.1 70B Instruct с 7 инстансами ml.p5.48xlarge и vLLM с включённым prefix caching результаты такие. На длинных контекстах с общим префиксом 8000 токенов и нагрузкой в течение часа P90 TTFT снизился на 33–37%, P50 TTFT — на 71–77%, hit rate KV-кэша вырос примерно с 25% до 82%, пропускная способность — на 15–16%. На коротких контекстах в стиле ShareGPT за 30 минут P90 TTFT упал на 24–37%, P50 — на 13–16%, hit rate — с 30% до 80%, throughput — на 1,7–2,0%. Чем длиннее общий префикс, тем больше выигрыш: на каждом попадании в кэш пропускается больше вычислений.
Накладные расходы маршрутизации составили 1,3–1,9 мс на запрос. Для сравнения, TTFT модели в этих тестах был 63–280 мс, так что стоимость маршрутизации мала. Распределение трафика осталось ровным: каждый из 7 инстансов получил 13,3–15,4% запросов, в пределах 1% от идеального равномерного деления. Все 16 конфигураций тестов — single model endpoints, inference component endpoints, нативный Invoke API и OpenAI-совместимый API — завершились со 100% успехом.
В SageMaker предусмотрены две защиты. Overload protection: если префикс очень популярен, а целевой инстанс уже на пределе, запрос уйдёт на менее загруженную машину — вы можете потерять одно попадание в кэш, но не перегрузите одну машину. Лимит параллелизма настраивается. Stable behavior during scaling: при добавлении или удалении инстансов большинство запросов продолжает идти туда же, куда шли, и только небольшая часть трафика перераспределяется. Кэши не инвалидируются при каждом масштабировании.
С этим запуском SageMaker Inference предлагает три стратегии маршрутизации для real-time эндпоинтов. RANDOM — стратегия по умолчанию, распределяет запросы равномерно. Prefix-aware routing — новая, ориентированная на переиспользование KV-кэша. Третья стратегия в источнике не раскрыта. Для команд, которые держат LLM за эндпоинтом с общим системным промптом, новая опция даёт измеримый эффект без переписывания приложения: достаточно включить её на стороне эндпоинта.



