К основному содержимому
ко всем лонгридам
Лонгрид#MLSystems#PlatformEngineering

Инференс LLM как распределённая система: от KV-кеша и vLLM к разделению стадий

Почему быстрый проход модели ещё не означает быстрый сервис, как университетский проект vLLM превратил KV-память в управляемый ресурс и почему современный кластер иногда разделяет обработку входа и генерацию, а иногда сознательно оставляет их вместе. Это история инференса как перехода от функции модели к распределённой системе с очередями, состоянием и собственными SLO.

20 августа 2026≈ 36 минутпервичные источники ↓

Исследование и состояние инструментов проверены по источникам на 8 августа 2026 года. Числа из работ относятся только к указанным авторами моделям, ускорителям, распределениям входа и базам сравнения. Результаты компаний и проектов помечены как заявления поставщика; препринты 2026 года используются как сигнал направления, а не как сложившийся промышленный стандарт.

01

Инференс LLM — не один проход модели

В учебном определении начинается после обучения: параметры зафиксированы, на вход приходит объект, на выходе получается прогноз. Для градиентного бустинга, классификатора изображений или небольшой сети это описание почти совпадает с эксплуатационной единицей работы. Сервер может собрать несколько независимых объектов в пакет, выполнить ограниченный проход, вернуть результаты и освободить память запроса.

Авторегрессионная LLM физически остаётся функцией, но её перестаёт быть одним вызовом. Сначала модель обрабатывает весь вход, затем выдаёт один токен, добавляет его к контексту и снова вызывает почти всю модель. Длина ответа заранее неизвестна. Пользователь ждёт поток. Рядом приходят запросы с другими длинами и приоритетами, а закончившиеся последовательности освобождают место раньше соседей.

схема 01 · один проход против запроса с растущим состоянием
Обычный ML-инференс и инференс LLMЗАПРОС ИЗМЕНИЛ ФОРМУОБЫЧНЫЙ ONLINE MLодин ограниченный проходАВТОРЕГРЕССИОННАЯ LLMконтекст + последовательный циклВХОДфиксированный тензор / строкаСОСТОЯНИЕобычно внутри запросаВЫХОДфиксированная формаГЛАВНЫЙ SLOзадержка + запросы/сВХОДпеременный контекст + общие префиксыСОСТОЯНИЕKV-кеш растёт с каждым токеномВЫХОДнеизвестная длина + потокГЛАВНЫЙ SLOпервый токен + ритм токенов+ полезная пропускная способностьМодель остаётся функцией; сервис становится планировщиком состояния
Свойство
Единица работы
Обычная ML-модель
Один ограниченный проход по входу
Авторегрессионная LLM
Обработка контекста и неизвестное число последовательных шагов
Свойство
Форма результата
Обычная ML-модель
Фиксированный тензор, класс или небольшой набор
Авторегрессионная LLM
Поток токенов переменной длины
Свойство
Состояние запроса
Обычная ML-модель
Обычно освобождается после прохода
Авторегрессионная LLM
KV-кеш растёт с каждым токеном; при паузе его сохраняют или выгружают, чтобы затем продолжить генерацию
Свойство
Формирование пакета
Обычная ML-модель
Пакет живёт до завершения всех элементов
Авторегрессионная LLM
Состав пакета выгодно пересобирать после каждой итерации
Свойство
Главная метрика
Обычная ML-модель
Задержка запроса, запросы в секунду, стоимость примера
Авторегрессионная LLM
Время до первого токена, ритм следующих токенов, полное время и полезная пропускная способность
Свойство
Главный ресурс
Обычная ML-модель
Зависит от модели; часто вычисления
Авторегрессионная LLM
Вход чаще упирается в вычисления, генерация — в память
Свойство
Масштабирование
Обычная ML-модель
Реплики и параллелизм по модели и данным
Авторегрессионная LLM
Реплики, TP/PP/EP, маршрутизация по кешу и разделение стадий

Ключевое отличие — . Для каждого слоя механизма внимания он хранит ключи и значения уже обработанных токенов, чтобы следующий шаг не пересчитывал всю историю. С вычислительной точки зрения это радикальная экономия. С системной — новый крупный объект состояния, который растёт с длиной контекста, числом одновременных запросов, ветвлением ответов и количеством реплик. Его нужно разместить, совместно использовать, вытеснить, передать или восстановить после сбоя.

Поэтому среднее число токенов в секунду мало что говорит пользователю. Можно увеличить размер пакета и получить высокую пропускную способность, одновременно заставив интерактивные запросы долго ждать первый токен. Можно быстро начать ответ, но затем выдавать токены рывками. Для LLM нужны как минимум четыре измерения.

Метрика
Время до первого токена (TTFT)
Что измеряет
От приёма запроса до первого токена
Из чего складывается
Очередь, токенизация, обработка контекста, передача состояния
Метрика
Время на выходной токен (TPOT) / интервал между токенами (ITL)
Что измеряет
Интервал между последующими токенами
Из чего складывается
Размер активного пакета, длина контекста, полоса HBM, помехи от новых входов
Метрика
Полная задержка запроса (E2E)
Что измеряет
Весь запрос до последнего токена
Из чего складывается
TTFT плюс число и длительность шагов генерации
Метрика
Пропускная способность
Что измеряет
Все завершённые запросы или токены за время
Из чего складывается
Может расти ценой хвостовой задержки
Метрика
Полезная пропускная способность
Что измеряет
Работа, завершённая внутри заданных SLO
Из чего складывается
Требует одновременно задать TTFT, TPOT и профиль нагрузки

Термин возвращает SLO в определение мощности: считается только работа, уложившаяся в заданные ограничения TTFT и TPOT. Именно эта постановка объясняет, почему две конфигурации с одинаковыми суммарными токенами в секунду могут иметь разную эксплуатационную ценность.

02

Один запрос создаёт два разных профиля машины

После токенизации начинается . Модель получает сразу много позиций, строит для них представления и заполняет KV-кеш. Большие матричные операции хорошо используют вычислительные блоки ускорителя. Чем длиннее вход, тем больше работы механизма внимания и линейных слоёв можно выполнять параллельно — до тех пор, пока память и форма операций не станут новым пределом.

После генерации первого токена ответа начинается . На каждом шаге у каждой активной последовательности появляется всего одна новая позиция. Матричные операции становятся узкими, зато нужно читать веса и всё более длинный KV-кеш. На типичной малой или средней нагрузке арифметические блоки ждут данные из HBM: стадия ограничена полосой памяти. Большой пакет повышает арифметическую интенсивность, но одновременно увеличивает TPOT и объём активного кеша.

схема 02 · вход загружает вычислители, генерация ждёт данные из памяти
Обработка контекста и генерация упираются в разные пределыОДИН ЗАПРОС · ДВА ПРОФИЛЯ МАШИНЫОБРАБОТКА КОНТЕКСТАмного токенов параллельнообычно ограничена вычислениямиПОШАГОВАЯ ГЕНЕРАЦИЯодин новый токен на последовательностьобычно ограничена полосой памятиПЕРВЫЙ ТОКЕНОТВЕТАTTFTочередь + контекст + передачаTPOTвремя на следующий токенE2ETTFT + цикл ответаЗАДАЧА ПЛАНИРОВЩИКАсовместить очередь, пакеты и память, не нарушив ни один из SLOВход обрабатывает много позиций сразу; генерация добавляет по одной на последовательность

Память весов — только первый член бюджета

Нижняя оценка памяти весов выглядит просто. Для модели с P параметров и точностью B бит до служебных буферов нужно примерно:

M_weights ≈ P × B / 8

У 70-миллиардной модели BF16-веса занимают около 140 десятичных гигабайт; 4-битное представление — около 35 гигабайт до масштабных коэффициентов, метаданных, незаквантованных слоёв и рабочих буферов среды выполнения. Но освободившееся место не превращается целиком в новые запросы: нужен KV-кеш, промежуточные активации, буферы коллективных операций и запас на случай нехватки памяти (OOM — исчерпание памяти).

Объём KV-кеша на одну последовательность можно оценить так, где L — число слоёв, H_kv — число KV-голов, D_h — размер головы, S — байт на элемент, а T — число уже обработанных токенов:

M_KV ≈ 2 × L × H_kv × D_h × S × T

Двойка — это K и V. В многозапросном внимании (MQA) все головы запросов разделяют один набор K/V; во внимании с группировкой запросов (GQA) такой набор есть у каждой из нескольких групп. Поэтому архитектура модели заранее задаёт стоимость каждого активного токена. При выборе среды выполнения нельзя смотреть только на число параметров: две модели одинакового размера с разным числом KV-голов ведут себя по-разному на длинном контексте.

схема 03 · коэффициенты памяти KV-кеша
Формула памяти KV-кешаKV-ПАМЯТЬ РАСТЁТ С КОНТЕКСТОМ И ПАРАЛЛЕЛЬНОСТЬЮ2 (K и V)×слои×KV-головы×размер головы×байты×токеныМногоголовое внимание (MHA)KV-голова на каждую голову запросасамый большой кешВнимание с группировкой (GQA)группы запросов делят K и Vпромежуточный вариантМногозапросное внимание (MQA)один общий набор K и Vсамый маленький кешБЮДЖЕТ ПАРКАкеш на токен × активные токены × реплики + фрагментация + резервАрхитектура модели задаёт коэффициент, нагрузка — множитель

Четыре распределения важнее одной средней длины

  • Длина входа определяет объём работы до первого токена и исходный KV-кеш.
  • Длина выхода определяет число строго последовательных проходов и время жизни состояния.
  • Параллельность определяет, сколько весов и токенов можно амортизировать одним пакетом.
  • Повтор префиксов определяет, какую часть входа можно не вычислять заново.

Эти оси взаимодействуют нелинейно. Десять коротких запросов могут заполнить матричные блоки лучше одного длинного, но десять длинных ответов удерживают KV на порядки дольше. Высокий повтор префикса уменьшает вычисление только после прогрева и при маршруте к правильной реплике. Всплеск параллельности меняет не только очередь: он увеличивает пакет, арифметическую интенсивность и давление на память одновременно. Поэтому профиль нельзя описать тремя раздельными средними: длиной входной последовательности (ISL), длиной выходной последовательности (OSL) и числом запросов в секунду (QPS). Нужен их совместный трейс, сохраняющий временные корреляции.

RAG с длинными документами, чат с короткими репликами, генерация кода и длинные рассуждения с тысячами выходных токенов — не одна нагрузка. Средние 2K входа и 500 выхода могут скрывать редкие 100K-контексты, которые занимают память и ломают хвост TTFT. Поэтому сравнительное испытание должно воспроизводить совместное распределение длин и поток поступления, а не прогонять одинаковую строку в цикле.

03

До vLLM оптимизировали модель, ядра и расписание — по отдельности

Большинство известных сегодня приёмов не начались с vLLM. KV-кеш давно использовался для авторегрессионного декодирования. В 2019 году Noam Shazeer предложил multi-query attention, чтобы головы запросов делили общий набор K/V и меньше читали из памяти. В 2023 году GQA заняла компромиссную точку: несколько KV-групп вместо одной общей (MQA) или отдельной группы на каждую голову запросов (MHA).

Параллельно развивались шардирование весов и конвейер модели, специализированные GEMM, слияние операций и низкие форматы. GPTQ сжимала веса по информации о кривизне, SmoothQuant переносила сложность выбросов из активаций в веса для W8A8, AWQ защищала небольшую долю важных каналов. Эти работы решают разные задачи. Весовой INT4 уменьшает память и трафик весов, но не гарантирует четырёхкратное ускорение: если GPU не имеет быстрого ядра нужного формата, время уйдёт на распаковку и преобразование.

В 2022 году FlashAttention показала другую линию: считать точный механизм внимания быстрее, не меняя математический ответ, за счёт блочной обработки и меньшего обмена HBM ↔ SRAM. Это важный сдвиг мышления. Номинальные FLOPS не определяют время, если GPU большую часть цикла перемещает данные.

Подход
KV-кеш
Механизм
Не пересчитывать прошлые токены
Что экономит
Вычисления
Граница
Память растёт с контекстом и параллельностью
Подход
MQA / GQA
Механизм
Уменьшить число KV-голов
Что экономит
HBM и размер кеша
Граница
Решение зашито в архитектуру модели
Подход
Квантование
Механизм
Хранить и считать в меньшей точности
Что экономит
Память, полоса, иногда FLOPS
Граница
Нужны подходящие GPU-ядра и проверка качества
Подход
TP / PP
Механизм
Разместить модель больше одного ускорителя
Что экономит
Вместимость и вычисления
Граница
Появляются коллективные операции и конвейерные пузыри
Подход
FlashAttention
Механизм
Сократить обмен HBM ↔ SRAM
Что экономит
Движение данных механизма внимания
Граница
Не решает планирование и память всего сервиса
Подход
Orca
Механизм
Пересобирать работу после каждой итерации
Что экономит
Простой GPU и ожидание пакета
Граница
Планировщик становится частью критического пути

Orca изменила единицу планирования

До генеративных моделей сервер часто формировал статический пакет запросов и ждал, пока закончатся все. Для ответа на 20 токенов рядом с ответом на 500 это означает 480 лишних итераций ожидания и невозможность добавить новую работу. В OSDI 2022 система Orca предложила планирование на уровне одной итерации модели и выборочное формирование пакетов.

Современное наследует эту идею: закончившиеся последовательности уходят, новые входят, приостановленные могут быть вытеснены. Это критическая историческая оговорка. vLLM внедрила и популяризировала такой режим в доступном движке, но не изобрела сам принцип планирования на уровне итераций.

схема 04 · узкое место поднималось от архитектуры к кластеру
Краткая история систем инференса LLMУЗКОЕ МЕСТО ПОДНИМАЛОСЬ ПО СТЕКУ2019MQAменьше KV-трафика2022ORCAпланирование итераций2022FLASHATTNучёт движения данных2023vLLMстраничная KV-память2023SARATHIпорционная обработка2023/24SPLITWISEDistServeразделение стадий2024SGLANGповтор префиксов2024–26MOONCAKEDYNAMO · llm-dраспределённыйKV-контурНи одна работа не отменила предыдущий слой: современные движки собирают идеи вместе
04

vLLM принесла виртуальную память в KV-кеш

Весной 2023 года команда LMSYS обслуживала Vicuna и Chatbot Arena на ограниченном университетском парке GPU. По первому анонсу vLLM, бэкенд на Hugging Face Transformers стал узким местом по мере роста трафика. Команда UC Berkeley сделала открытый движок vLLM и интегрировала его с FastChat. Практическая постановка была не «как ускорить один GEMM», а «как удержать больше живых запросов на тех же GPU».

Проблемой оказалось управление KV-кешем. Длина будущего ответа неизвестна, но традиционный распределитель памяти либо резервировал непрерывный диапазон под максимум, либо страдал от внешней фрагментации после запросов разных длин. В первом анонсе авторы измерили 60–80% потерь памяти от резервирования и фрагментации в прежних системах. Это число относится к их рабочим нагрузкам и реализациям, но сам механизм проблемы общий.

PagedAttention заимствует аналогию виртуальной памяти. Последовательность видит логические блоки KV подряд, но таблица блоков отображает их на произвольные физические блоки GPU. Память выделяется по мере генерации, поэтому свободные блоки остаются в общем пуле и могут сразу принять KV другого запроса; заранее резервировать место под неизвестный максимум больше не нужно. Потери остаются главным образом в последнем неполном блоке. Общая инструкция нескольких ветвей может ссылаться на те же физические страницы, а при расхождении включается копирование при записи.

схема 05 · блоки по требованию освобождают KV-память для других запросов
PagedAttention заменяет резерв под запрос блоками по требованиюОТ ПУСТОГО РЕЗЕРВА — К ОБЩЕМУ ПУЛУ KV-БЛОКОВДО · НЕПРЕРЫВНЫЙ РЕЗЕРВПОСЛЕ · БЛОКИ ПО ТРЕБОВАНИЮAA0A1A2BB0B1ПУСТО, НО НЕДОСТУПНОрезерв и разрывы нельзя отдать другому запросуОБЩИЙ ПУЛ ФИЗИЧЕСКИХ БЛОКОВ GPUA0B0СВОБ.A1B1A2СВОБ.СВОБ.СВОБ.СВОБ.ТАБЛИЦА СОХРАНЯЕТ ЛОГИЧЕСКИЙ ПОРЯДОКсвободный блок доступен любому запросуодин префикс → несколько ветвей при записиМЕНЬШЕ ПУСТОЙ ПАМЯТИ → БОЛЬШЕ АКТИВНЫХ ЗАПРОСОВ → ВЫШЕ ПРОПУСКНАЯ СПОСОБНОСТЬОдна операция внимания не ускорилась — в память помещается больше полезной работы

Экономия памяти не делает одну операцию механизма внимания магически быстрее. Она позволяет увеличить эффективный пакет, лучше амортизировать чтение весов и загрузить GPU. В SOSP-работе vLLM показала в 2–4 раза большую пропускную способность при сопоставимой задержке против FasterTransformer и Orca; выигрыш рос на длинных последовательностях, больших моделях, а также при параллельной генерации нескольких вариантов и лучевом поиске, где ветви могут совместно использовать блоки общего префикса. Ранний блог сообщал до 24 раз против базового бэкенда Hugging Face и до 3,5 раза против TGI. Это разные базы сравнения — их нельзя склеивать в одно «vLLM ускоряет в 24 раза».

Второй вклад vLLM — организационный. Открытый API, поддержка моделей и единый движок сервинга дали исследователям точку, куда можно встраивать новые GPU-ядра, политики планирования и передачу KV. Поэтому vLLM стала для инференса тем же, чем популярная среда выполнения становится для языка: не единственно возможной реализацией, а общей площадкой, на которой идеи быстрее доходят до эксплуатации.

05

Карта трюков: каждый экономит свой дефицитный ресурс

Список флагов движка создаёт ложное ощущение независимых ускорителей. На практике это стек взаимосвязанных преобразований. Квантование уменьшает объём весов, после чего узкое место может перейти в KV-кеш. Префиксный кеш экономит обработку входа, но создаёт перекос и требует маршрутизации по локальности. Большой пакет лучше загружает матричные блоки, но удерживает больше KV-памяти и увеличивает время между токенами у самых медленных запросов — например, P95/P99 метрики TPOT.

Слой
Архитектура
Примеры
MQA/GQA, MLA, MoE, дистилляция
Цель
Байты на токен, активные параметры
Почему может не сработать
Требует другой модели или обучения
Слой
Числовой формат
Примеры
FP8, W8A8, W4A16, KV FP8
Цель
Вместимость, HBM, матричные операции
Почему может не сработать
Формат без быстрого ядра только экономит память
Слой
GPU-ядра и графы
Примеры
FlashAttention, слияние операций, CUDA Graphs
Цель
Ввод-вывод, запуски, синхронизация
Почему может не сработать
Выигрыш зависит от формы тензоров и поколения GPU
Слой
Память
Примеры
Страницы, префиксный кеш, выгрузка в RAM/SSD
Цель
Число активных токенов
Почему может не сработать
Попадание в кеш должно окупать поиск и передачу
Слой
Планировщик
Примеры
Непрерывные пакеты, порции входа, вытеснение
Цель
Утилизация и хвосты задержки
Почему может не сработать
Политика приоритета может создать голодание
Слой
Декодер
Примеры
Черновая модель, Medusa, EAGLE
Цель
Число последовательных шагов
Почему может не сработать
Низкая доля принятия делает проверку накладной
Слой
Кластер
Примеры
TP/PP/EP, кеш-ориентированный маршрут, P/D
Цель
Полезная мощность парка
Почему может не сработать
Сеть, топология, масштаб и отказы становятся частью сервиса

Модель пределов связывает ускорение с реально сэкономленными байтами

Удобная проверка любого приёма начинается с арифметической интенсивности: сколько операций выполняется на байт, прочитанный из памяти. Верхняя граница производительности R задаётся меньшим из двух значений — пиковой вычислительной мощностью ускорителя и произведением интенсивности на полосу памяти:

R ≤ min(P_peak, I × BW), где I = FLOP / байт

Разница сводится к тому, сколько полезной работы приходится на одно чтение весов. При обработке длинного входа блок весов загружается и сразу применяется ко многим позициям: одна передача из HBM обслуживает много операций, поэтому точка находится справа на графике. При генерации очередного токена у каждой последовательности только одна новая позиция: тот же объём весов обслуживает гораздо меньше операций, и скорость чаще задаёт полоса памяти. Пакет из нескольких последовательностей повторно использует загруженные веса и сдвигает генерацию вправо, но требует больше KV-памяти и заставляет запросы ждать друг друга. Поэтому суммарные токены в секунду могут вырасти, а TPOT — ухудшиться.

схема 06 · обработка входа и генерация на графике пределов
Обработка входа и генерация находятся в разных областях графика пределовСКОЛЬКО РАБОТЫ ПРИХОДИТСЯ НА ПРОЧИТАННЫЙ БАЙТ?ПРОИЗВОДИТЕЛЬНОСТЬ · FLOP/САРИФМЕТИЧЕСКАЯ ИНТЕНСИВНОСТЬ · FLOP/БАЙТ →ПРЕДЕЛ ПОЛОСЫПАМЯТИПРЕДЕЛ ВЫЧИСЛЕНИЙГЕНЕРАЦИЯмалый пакетГЕНЕРАЦИЯбольшой пакетДЛИННЫЙ ВХОДмного позиций на чтение весовЦЕНА БОЛЬШОГО ПАКЕТА+ KV-память · + ожиданиеСдвиг вправо переиспользует каждый байт для большей работы, но не отменяет цену

Квантование полезно только тогда, когда сокращение байтов совпадает с пределом нагрузки и GPU умеет считать в выбранном формате. Весовой W4A16 часто помогает малому пакету генерации, потому что уменьшает чтение весов. W8A8 или FP8 могут ускорить матричные операции обработки входа, если есть подходящие тензорные блоки и откалиброваны выбросы. Квантование KV уменьшает растущее состояние, но затрагивает механизм внимания на каждом шаге и требует отдельной проверки качества на длинных контекстах. Ни один из этих эффектов нельзя выводить только из числа бит.

GPU-ядро, слияние операций и CUDA Graphs ускоряют разные части исполнения

Специализированное GPU-ядро — программа, которую GPU запускает для конкретной операции, — определяет укладку данных, обмен между HBM и SRAM, векторизацию и используемую точность. Слияние операций объединяет несколько последовательных вычислений в одно такое ядро. Тогда промежуточный тензор не нужно записывать в HBM и читать обратно, а отдельные запуск и синхронизация исчезают. CUDA Graphs, в свою очередь, сокращают время запуска повторяющейся последовательности ядер.

Глубоким слиянием называют объединение длинной цепочки операций в одно ядро. Чем длиннее цепочка, тем больше ей нужно регистров и разделяемой памяти; из-за этого на GPU может одновременно исполняться меньше блоков. Такое ядро также сложнее адаптировать к новым архитектурам модели. Поэтому движки держат несколько путей исполнения и выбирают ядро по форме. Переменная длина, редкая ветвь, новый адаптер или нестандартный размер пакета могут вернуть исполнение в обычный режим.

схема 07 · GPU-ядро, слияние операций и CUDA Graphs устраняют разные потери
GPU-ядра, слияние операций и CUDA Graphs ускоряют разные части исполненияТРИ УРОВНЯ · ТРИ ИСТОЧНИКА УСКОРЕНИЯGPU-ЯДРООДНА ОПЕРАЦИЯуниверсальная укладка и форматСПЕЦИАЛИЗИРОВАННОЕ ЯДРОукладка · SRAM · векторыускоряет саму операциюСЛИЯНИЕ ОПЕРАЦИЙA → ТЕНЗОР В HBM → Bзапись · чтение · синхронизацияОДНО ЯДРО: A + Bпромежуточного тензора нетубирает движение данныхCUDA GRAPHCPU → K1 · CPU → K2 · CPU → K3три отдельных запускаCPU → GRAPH [K1 → K2 → K3]один повторяемый запусксокращает время запускаТри оптимизации дополняют друг друга, но не заменяют одна другую

Способ распараллеливания определяет, что и как часто передаётся между ускорителями

Есть два принципиально разных способа распределить работу. TP, PP и EP раскладывают один проход модели между ускорителями: завершение запроса зависит от их совместной работы. Реплики, напротив, выполняют проход целиком и делят между собой независимые запросы. Отсюда различаются цена сети, точки синхронизации и тип простоя.

При тензорном параллелизме части одной матричной операции выполняются одновременно. В показанном варианте каждый GPU считает частичный результат, а all-reduce суммирует результаты перед следующим слоем. Так на один GPU приходится меньше весов и вычислений, но коллективный обмен становится частью почти каждого слоя. На коротком шаге генерации задержка межсоединения может съесть выигрыш от разделения работы.

схема 08 · тензорный параллелизм: коллективный обмен внутри слоя
Тензорный параллелизм делит слой и синхронизирует результатДЕЛИМ АКТИВАЦИЮ И СТРОКИ МАТРИЦЫ · СУММИРУЕМ РЕЗУЛЬТАТЫАКТИВАЦИЯделим: x₀ · x₁ · x₂GPU 0 · x₀ × W₀частичный результат y₀GPU 1 · x₁ × W₁частичный результат y₁GPU 2 · x₂ × W₂частичный результат y₂ALL-REDUCEсуммировать частичные результатывнутри слояСЛЕДУЮЩИЙСЛОЙВЫИГРЫШменьше вычислений и весов на GPUЦЕНАколлективный обмен почти на каждом шагеСлой ускоряется, только пока межсоединение успевает за вычислениями

Конвейерный параллелизм проводит запрос через последовательные группы слоёв на разных GPU. Чтобы стадии работали одновременно, пакет делят на микропакеты. Пока конвейер заполняется и опустошается, крайние стадии простаивают; дополнительные пузыри возникают, если группы слоёв несбалансированы. Поэтому PP эффективнее при достаточном числе микропакетов и предсказуемой нагрузке.

схема 09 · конвейерный параллелизм: активации между стадиями и пузыри
Конвейерный параллелизм передаёт активации между группами слоёвДЕЛИМ СЛОИ · СТАРАЕМСЯ НЕ ОСТАВЛЯТЬ СТАДИИ ПУСТЫМИСТАДИЯ 1 · GPU 0последовательная группа слоёв 1СТАДИЯ 2 · GPU 1последовательная группа слоёв 2СТАДИЯ 3 · GPU 2последовательная группа слоёв 3АКТИВАЦИИАКТИВАЦИИМИКРОПАКЕТЫ ВО ВРЕМЕНИ →СТАДИЯ 1μ1μ2μ3ПУЗЫРЬПУЗЫРЬСТАДИЯ 2ПУЗЫРЬμ1μ2μ3ПУЗЫРЬСТАДИЯ 3ПУЗЫРЬПУЗЫРЬμ1μ2μ3БОЛЬШЕ МИКРОПАКЕТОВ → МЕНЬШЕ ДОЛЯ ПУЗЫРЕЙНесбалансированные стадии, запуск и завершение конвейера оставляют GPU без работы

Параллелизм экспертов применяют в моделях MoE: маршрутизатор выбирает экспертов для каждого токена, после чего данные токенов расходятся по GPU и возвращаются после вычисления. Поэтому они дважды проходят по сети. Если одного эксперта выбирают чаще, у него растёт очередь, а остальные GPU недогружены: экономия на числе активных параметров сама по себе не обеспечивает равномерной загрузки.

схема 10 · параллелизм экспертов: all-to-all и перекос маршрутизации
Параллелизм экспертов направляет каждый токен к выбранным экспертамМАРШРУТИЗИРУЕМ ТОКЕНЫ · ОТПРАВЛЯЕМ И ВОЗВРАЩАЕМ · СЛЕДИМ ЗА ПЕРЕКОСОМТОКЕНЫ8 токеновМАРШРУТИЗАТОРвыбирает экспертовALL-TO-ALLотправкак экспертамЭКСПЕРТ 0 · GPU 02 токенаЭКСПЕРТ 1 · GPU 15 токенов · очередьЭКСПЕРТ 2 · GPU 21 токенALL-TO-ALLвозвратисходным рангамСОБРАТЬрезультатыПЕРЕКОС МАРШРУТИЗАЦИИ → ОДНИ ЭКСПЕРТЫ ЖДУТ, У ДРУГОГО РАСТЁТ ОЧЕРЕДЬСчитают только выбранные эксперты, но данные токенов дважды проходят по сети

Реплика получает независимый запрос и выполняет весь проход внутри своей группы ускорителей. Между репликами не нужен обмен на каждом токене: балансировщик лишь выбирает, куда отправить новый запрос. Это позволяет наращивать поток и изолировать сбои или клиентов, но каждая группа-реплика хранит ещё одну копию модели. Внутри реплики при этом по-прежнему могут использоваться TP, PP или EP.

схема 11 · реплики: независимые запросы без межрепличного обмена
Реплики делят поток запросов, а не один проход моделиОДИН ЗАПРОС ОСТАЁТСЯ ВНУТРИ ОДНОЙ РЕПЛИКИПОТОК ЗАПРОСОВR1 · R2 · R3независимыБАЛАНСИРОВЩИКодин запрос →одна репликаРЕПЛИКА Aсвоя группа ускорителейполный проход моделиРЕПЛИКА Bсвоя группа ускорителейполный проход моделиРЕПЛИКА Cсвоя группа ускорителейполный проход моделиНЕЗАВИСИМЫЕОТВЕТЫВО ВРЕМЯ ПРОХОДА РЕПЛИКИ НЕ ОБМЕНИВАЮТСЯ ДАННЫМИРеплика может занимать один ускоритель или собственную TP/PP-группу

Для обработки входа и генерации оптимальная конфигурация может различаться. Длинный вход хорошо загружает широкую TP-группу, а короткий шаг генерации может потратить на коллективный обмен больше времени, чем сэкономить на вычислении. Это повод проверить разделение стадий, но ещё не доказательство его пользы. Сначала нужно измерить варианты, в которых обе стадии остаются в одном пуле: только TP, сочетание TP с PP, а для MoE — ещё и с EP. Отдельные пулы оправданы лишь тогда, когда выигрыш двух специализированных конфигураций перекрывает стоимость передачи KV и дополнительной очереди.

Несколько LoRA-адаптеров превращают модель в многопользовательский сервис

Multi-LoRA — способ одновременно обслуживать несколько дообученных вариантов одной базовой модели. Сервис держит одну копию базовых весов и для каждого запроса подключает выбранный LoRA-адаптер — небольшой набор низкоранговых поправок. Это экономит HBM по сравнению с отдельной репликой на каждого клиента и позволяет смешивать адаптеры в одном пакете. Цена появляется в разреженных обращениях к разным поправкам, загрузке холодных адаптеров, усложнении GPU-ядер и планировании справедливости. Если активный набор адаптеров велик или трафик сильно перекошен, кеш адаптеров и очередь становятся новым узким местом. Метод сохраняет качество конкретного адаптера, но не исправляет различия токенизатора, базовой версии модели или несовместимых форматов квантования.

Выгрузка и многоуровневый кеш обменивают ёмкость на задержку

Когда HBM заполнена, веса, адаптеры или KV можно перенести в оперативную память узла, на локальный накопитель или в удалённый кеш. Так сервис хранит больше состояния, чем помещается в памяти GPU, но доступ к вынесенным данным становится медленнее. Перед вычислением их нужно вернуть в HBM, поэтому стоимость определяют поиск, очередь и передача по каналу от RAM, накопителя или сети к GPU. Для большого префикса одна быстрая передача может быть дешевле повторной обработки; для короткого продолжения поиск удалённого блока способен занять больше времени, чем пересчёт.

На кластере локальность конфликтует с балансом нагрузки. Маршрутизатор, всегда выбирающий горячий кеш, перегружает популярную реплику; маршрутизатор, всегда выбирающий короткую очередь, уничтожает повтор вычислений. Этот конфликт решают распределённые системы инференса с маршрутизацией по состоянию KV-кеша. Preble — исследовательская система планирования запросов с повторяющимися префиксами; llm-d — открытый Kubernetes-стек, где маршрутизатор учитывает префиксный кеш и нагрузку реплик. Масштаб у проектов разный, но принцип общий: выбирать реплику по сочетанию доступного кеша и текущей очереди, а не по правилу «кеш важнее». Правильная метрика — выигрыш полезной пропускной способности после учёта промахов, вытеснений, дублирования блоков и времени восстановления индекса.

Порционная обработка входа борется не с вычислениями, а с остановками

Когда планировщик вставляет длинную инструкцию между шагами текущих ответов, их TPOT скачет. SARATHI разделила большой вход на порции и добавляла одну порцию к пакету с приоритетом генерации. Sarathi-Serve в OSDI 2024 показала прирост обслуживаемой нагрузки при SLO хвостовой задержки: 2,6 раза для Mistral-7B на одном A100, 3,7 раза для Yi-34B на двух A100 и до 5,6 раза для Falcon-180B с конвейерным параллелизмом относительно выбранных авторами базовых систем. Это три эксперимента, а не множители одной системы.

схема 12 · четыре рычага и четыре несопоставимые напрямую метрики
Четыре рычага сервинга и четыре разные метрикиЧЕТЫРЕ РЫЧАГА СЕРВИНГА · ЧЕТЫРЕ РАЗНЫЕ МЕТРИКИКаждая строка — отдельный замер со своей базой сравненияМЕТРИКАРЫЧАГИЗМЕРЕННЫЙ РЕЗУЛЬТАТПРОПУСКНАЯСПОСОБНОСТЬPAGED ATTENTIONВ 2–4 РАЗА ВЫШЕпри той же задержкеОБСЛУЖИВАЕМАЯНАГРУЗКАCHUNKED PREFILLВ 2,6–5,6 РАЗА БОЛЬШЕпри том же SLO хвостаЗАДЕРЖКАПЕРВОГО ТОКЕНАМАРШРУТИЗАЦИЯПО КЕШУ92,551 С → 0,542 СP90, против случайной маршрутизацииЦЕНАВХОДНОГО ТОКЕНАПОВТОРНОЕ ИСПОЛЬЗОВАНИЕKV-КЕШАПРИМЕРНО В 10 РАЗ ДЕШЕВЛЕдля кешированного токенаЧитайте каждую строку слева направо · результаты разных замеров нельзя перемножать

Повтор префикса превращает вычисление в задачу размещения

SGLang предложила RadixAttention: хранить KV общих префиксов в radix tree и переиспользовать их между вызовами программы. Для шаблона с несколькими примерами, общей системной инструкции или RAG-документа это может убрать большую часть обработки входа. В одном GPU политика сводится к поиску и вытеснению. В кластере запрос надо направить к реплике, у которой уже лежит нужный префикс, не создав горячий узел. Preble добавила глобальное планирование по стоимости пересчёта и справедливости.

Спекуляция меняет число последовательных проходов

использует дешёвую черновую модель: та предлагает несколько токенов, а основная модель проверяет их параллельно и принимает допустимый префикс без изменения целевого распределения. Medusa добавляет несколько голов к самой модели; EAGLE предсказывает признаки предпоследнего слоя. Общая экономика определяется долей принятия, ценой черновика, размером проверочного пакета и исходным узким местом. Если основная модель уже ограничена вычислениями на большом пакете, дополнительная проверка способна уменьшить пропускную способность, даже улучшив задержку одного запроса.

  • Сначала зафиксировать базовую линию с одинаковой моделью, выбором токенов и входным трейсом.
  • Менять один слой и измерять TTFT, TPOT, полезную пропускную способность, память и качество вместе.
  • Проверять взаимодействия: квантование × GPU-ядра, размер порции × планировщик, кеш × маршрутизатор.
  • Не перемножать цифры vLLM, Sarathi, EAGLE и кеша из разных публикаций.
06

Разделённый инференс начался с несовместимых профилей стадий

К концу 2023 года стало ясно, что общий GPU-пул связывает два решения, которые хочется принимать независимо. Для быстрого TTFT длинного входа полезны высокая вычислительная мощность и один план тензорного/конвейерного параллелизма. Для стабильного TPOT нужна полоса памяти, другой пакет и иногда более дешёвый тип ускорителя. Один компромиссный план либо ухудшает одну стадию, либо заставляет держать лишний резерв обеих.

выделяет независимые пулы обработки контекста и генерации. Узел обработки контекста строит KV, затем состояние передаётся узлу генерации, который продолжает последовательность и выдаёт ответ потоком. Это не конвейерный параллелизм: при PP слои одной модели разделены между устройствами в рамках каждого прохода; здесь целые временные стадии запроса исполняют разные реплики модели.

В публикациях эту архитектуру часто сокращают до P/D: P — обработка входного контекста и построение KV-кеша, D — пошаговая генерация токенов по этому состоянию. Ниже я использую полные названия стадий, когда сокращение скрывает механизм.

Splitwise была первой явной формулировкой разделения стадий

Препринт Microsoft Splitwise вышел 30 ноября 2023 года. Авторы измерили вычислительно насыщенную обработку входа и ограниченную полосой памяти генерацию токенов, предложили выполнять их на разных машинах, независимо выбирать поколения GPU и передавать состояние по быстрому межсоединению. Их цель включала пропускную способность, стоимость и мощность кластера.

18 января 2024 года DistServe независимо сформулировала проблему через SLO: устранить взаимное влияние, отдельно подобрать ресурсы и параллелизм стадий и максимизировать полезную пропускную способность при ограничениях TTFT и TPOT. В экспериментах авторы сообщали до 7,4 раза больше обслуживаемых запросов или в 12,6 раза более строгий SLO против выбранных систем, оставаясь внутри ограничений для более 90% запросов. Эти результаты описывают крупные конфигурации и не являются обещанием для двух GPU.

схема 13 · обработка контекста и генерация в одном пуле, порциями или в отдельных пулах
Три стратегии против взаимного влияния обработки контекста и генерацииТРИ ОТВЕТА НА ОДНО ВЗАИМНОЕ ВЛИЯНИЕОДИН ОБЩИЙ ПУЛОДНИ И ТЕ ЖЕ УЗЛЫОБРАБОТКАКОНТЕКСТАГЕНЕРАЦИЯТОКЕНОВKV остаётся локальнымпросто · стадии мешают друг другуКОНТЕКСТ ПОРЦИЯМИПОРЦИЯВХОДАШАГГЕНЕРАЦИИПОРЦИЯВХОДАменьше задерживает генерациюобе стадии делят один пулОТДЕЛЬНЫЕ ПУЛЫ СТАДИЙПУЛОБРАБОТКИКОНТЕКСТАKVПУЛГЕНЕРАЦИИТОКЕНОВмощности и SLO отдельноцена: сеть + согласование темпаСНАЧАЛА ИЗМЕРИТЬ КОНФЛИКТ СТАДИЙ → ПОТОМ ВЫБИРАТЬ СХЕМУРазделение — условный архитектурный выбор, а не уровень зрелости
Стратегия
Совмещённый пул
Сильная сторона
Простота, KV остаётся локальным, легко начать
Цена
Новые длинные входы задерживают текущую генерацию; обе стадии делят один план параллелизма
Стратегия
Порционная обработка контекста
Сильная сторона
Сглаживает остановки без передачи KV между узлами
Цена
Нужно подобрать размер порции; TTFT и TPOT всё ещё связаны одним пулом
Стратегия
Отдельные пулы обработки контекста и генерации
Сильная сторона
Независимые мощности, параллелизм и SLO стадий
Цена
Передача KV, согласование темпа, топология, больше отказов и операционных состояний

Полный путь запроса длиннее передачи KV между пулами

Входной маршрутизатор сначала выбирает модель, адаптер и допустимый пул, затем проверяет, не существует ли уже подходящего префикса. Промах отправляет запрос в очередь обработки контекста. После токенизации и обработки контекста узел фиксирует карту блоков, числовой формат, позиционные параметры и точку продолжения. Только после этого можно выбрать реплику генерации с учётом свободных слотов, топологии и существующего состояния. Получатель подтверждает владение KV до начала потоковой выдачи; иначе сбой между передачей и первым токеном оставляет систему без однозначного владельца запроса.

Нижняя оценка времени передачи равна размеру KV, делённому на эффективную полосу сети, плюс очереди, установление соединения и служебные данные. Эффективная полоса почти всегда ниже паспортной: несколько запросов делят канал, блоки прибывают неравномерно, а протокол может делать дополнительные копии. Поблочная или послойная передача позволяет D начать раньше полного завершения P, но создаёт обратное давление: генерация не должна обогнать поступление нужного слоя.

T_KV ≈ M_KV / BW_NET + T_QUEUE + T_PROTOCOL

Согласование темпа начинается с двух производительностей: сколько входных токенов в секунду P превращает в KV и сколько активных последовательностей D может продвигать, не нарушая TPOT. Достаточно быстрый средний темп не гарантирует устойчивости: всплеск длинных входов заполняет буфер передачи, а длинные ответы удерживают D-слоты после того, как P уже закончил свою работу. Нужны ограничения приёма, резерв по квантилям и отдельное масштабирование очередей, но решения должны координироваться, чтобы новый P-узел не перегрузил прежний D-пул.

Повторное вычисление остаётся полноценной стратегией восстановления. Для короткого входа дешевле заново построить KV на D, чем искать удалённую копию; для длинного общего префикса выгоднее держать несколько реплик или долговечный уровень кеша. Политика должна учитывать возраст блока, вероятность следующего хода, стоимость сети и очередь ускорителя. Так разделение стадий превращает локальный объект памяти в распределённый контракт: кто владеет блоком, кто может его удалить и какое событие означает, что запрос безопасно продолжать.

Mooncake сделала KV-кеш центром архитектуры

В июне 2024 года Moonshot AI опубликовала Mooncake — платформу Kimi, где разделённая обработка контекста соединена с распределённым KV-кешем и многоуровневой памятью. После этого история перестала быть только про два пула GPU. KV стал объектом контура данных: его блоки нужно индексировать, размещать, перемещать между HBM, памятью узла и хранилищем, а маршрутизатор должен знать не только нагрузку, но и локальность кеша.

P/D-Serve описала эксплуатацию на десятках тысяч xPU: динамическое соотношение узлов обработки и генерации, перенаправление при отказе принять запрос и оптимизированную передачу между устройствами. В 2025–2026 годах Dynamo и llm-d собирают те же идеи в открытые оркестрационные слои поверх vLLM, SGLang и TensorRT-LLM: движок инференса исполняет модель, а отдельная среда выполнения владеет маршрутом, состоянием кеша, масштабированием и восстановлением.

07

Передача KV превращает ускорение в распределённую задачу

Разделение убирает локальное взаимное влияние, но создаёт обязательную передачу. Размер передаваемого состояния линейно растёт с входными токенами и коэффициентом KV модели. Если P-узел строит десятки гигабайт кеша быстрее, чем сеть доставляет их D-узлу, очередь просто переезжает из планировщика в транспорт. TTFT теперь включает ожидание обоих пулов, передачу метаданных и самого KV.

Поэтому DistServe размещает стадии с учётом полосы, Mooncake строит отдельный движок передачи, vLLM предоставляет коннекторы поверх NIXL/Mooncake/LMCache, а Dynamo выделяет контуры запросов, управления и состояния. При хорошем NVLink/NVSwitch внутри домена и RDMA между узлами передачу можно скрыть конвейерной поблочной пересылкой. При обычном Ethernet или перегруженной сети выигрыш исчезает.

схема 14 · контур данных и новые состояния отказа P/D-системы
Контур данных разделённого инференсаKV-КЕШ СТАНОВИТСЯ РАСПРЕДЕЛЁННЫМ ОБЪЕКТОМКЛИЕНТпотокМАРШРУТИЗАТОРнагрузка + кешПУЛ КОНТЕКСТАзапрос → KV-блокибюджет TTFTПУЛ ГЕНЕРАЦИИKV → токеныбюджет TPOTSSEКОНТУР ПЕРЕДАЧИ KVGPU P2P · RDMA · память узла · SSDметаданные, владение, повторы, вытеснениеСОГЛАСОВАТЬ ТЕМПмощность P ↔ мощность DУЧЕСТЬ ТОПОЛОГИЮKV-байты ↔ полоса сетиВОССТАНОВИТЬ СОСТОЯНИЕпотеря узла ↔ пересчётПеренос вычислений создаёт задачу сети, метаданных и восстановления

Нужно согласовать темп двух производственных линий

Отношение P:D нельзя взять из документации. Оно зависит от соотношения входа и выхода, длины рассуждения, попаданий в кеш и целевого SLO. Если обработка входа производит KV быстрее, чем генерация освобождает слоты, D-пул становится очередью и P простаивает. Если генерация короткая, горячим оказывается P-пул. Масштабирование одной стадии меняет давление на другую, поэтому автомасштабирование должно видеть не только загрузку, но и интенсивность поступления, токены в обработке и очередь передачи.

Многоходовые диалоги и агенты ломают однонаправленный конвейер

В первом ходе путь P → D естественен. После ответа KV живёт на D. В следующем ходе пользователь добавляет небольшой фрагмент: классическая P/D-схема отправляет старое состояние обратно в P, обрабатывает добавленный фрагмент и снова передаёт его D. Для агентного цикла с вызовами инструментов такие пересылки могут доминировать над вычислением. Препринт PPD 2026 года предлагает иногда обрабатывать добавленный фрагмент прямо на D; Load-Aware Prefill Deflection — возвращать на D часть новых входов, когда очередь и передача дороже локального взаимного влияния. Это гибриды, а не отмена исходной идеи.

Отказ — это вопрос владения состоянием

Если P умер до подтверждения передачи, запрос можно повторить. Если D умер после передачи, нужно найти копию KV, восстановить её из уровня памяти или пересчитать вход. Если маршрутизатор потерял актуальный индекс, решение с учётом кеша направит запрос к пустой реплике. Если независимое масштабирование удалило узел с горячим префиксом, TTFT скачет без роста входного трафика. Производственная архитектура обязана явно определить владельца блока, срок жизни метаданных, идемпотентность передачи и поведение при частичной передаче.

Работа Revisiting Disaggregated LLM Serving добавляет ещё одну оговорку: преимущество по производительности и энергии не гарантировано и зависит от нагрузки, пути передачи и базовой системы. Раздельное управление частотой стадий в их измерениях не компенсировало дополнительную энергию системы. Поэтому утверждение «разделение экономит GPU» без трейса, топологии и SLO — не инженерный вывод, а гипотеза.

08

На 2026 год победила не одна схема, а композиция контуров

Современный движок вроде vLLM или SGLang соединяет непрерывное планирование, оптимизированные GPU-ядра внимания, GEMM и MoE, разные форматы весов и KV, префиксное кеширование, спекулятивное декодирование и несколько видов параллелизма. Над ним может стоять кластерная среда выполнения с маршрутом по кешу, многоуровневой памятью, автомасштабированием и P/D. Модель всё чаще тоже проектируется под инференс: GQA/MLA уменьшают KV, MoE сокращает активные параметры, предсказание нескольких токенов помогает спекуляции.

Это не означает, что любое развёртывание должно повторять архитектуру гиперскейлера. Один узел с совмещённым движком устраняет передачу KV и имеет меньше режимов отказа. Порционная обработка часто даёт достаточно контроля TPOT. Префиксное кеширование может дать больший эффект, чем P/D, если рабочая нагрузка содержит огромную общую инструкцию. Разделение окупается, когда масштаб позволяет независимо заполнить оба пула и требования TTFT и TPOT действительно требуют разных планов.

Разделение кодировщика расширяет идею, но меняет объект передачи

У мультимодальной LLM появляется ещё одна стадия: кодировщик изображения или звука превращает вход во вложения, после чего текстовый декодировщик обрабатывает контекст и генерирует ответ. Документация Disaggregated Encoder в vLLM описывает E/P/D-топологию: кодировщик получает свой пул и передаёт кеш вложений в экземпляры обработки контекста и генерации. Это подтверждает общий паттерн специализации стадий, но не делает детали P/D универсальными для диффузионных моделей или распознавания речи. У каждого семейства собственное состояние, повтор вычислений и гранулярность шага.

Следующий фронтир — внимание, FFN и эксперты как разные сервисы

Препринты 2026 года моделируют более глубокое разделение механизма внимания и FFN, а также разные типы ускорителей — см. Song et al. и разбор пределов AFD. Причина та же: арифметическая интенсивность и коммуникации стадий отличаются. Но чем мельче граница, тем чаще тензоры пересекают сеть и тем сильнее система зависит от специализированного межсоединения. Это направление совместного проектирования, а не рекомендация строить разделение на четыре стадии сегодня.

Модель → локальный движок → KV-контур → маршрутизатор → планировщик мощности → SLO

Главный сдвиг последних лет: инференс перестал быть библиотечной функцией в конце ML-процесса. Это самостоятельная распределённая система, где модель задаёт размер состояния и допустимые форматы, оборудование — пределы вычислений и памяти, а также топологию, среда выполнения — порядок работы, а продукт — распределение запросов и SLO. Оптимизировать один слой без остальных можно лишь до следующего узкого места.

09

Выбор начинается с трейса, а не с названия движка

Практическая последовательность начинается с воспроизведения рабочей нагрузки. Нужны совместные распределения входных и выходных токенов, процесс поступления, параллельность, доля общих префиксов, расстояние между ходами и паузы агентов. Затем фиксируются SLO и стоимость нарушения. Только после этого можно сравнивать варианты, сохраняя одну модель, политику выбора токенов, качество и набор запросов.

Наблюдение
Модель помещается на один узел, нагрузка умеренная
Следующий эксперимент
Один движок, непрерывные пакеты, измерение TTFT/TPOT
Ограничение
Не строить распределённый KV-контур заранее
Наблюдение
Много повторяющихся системных и RAG-префиксов
Следующий эксперимент
Префиксный кеш и маршрутизация с учётом локальности
Ограничение
Проверить реальную долю попаданий и перекос ключей
Наблюдение
Длинные входы портят интервал текущей генерации
Следующий эксперимент
Сначала порционная обработка контекста
Ограничение
Подобрать размер на повторе рабочего трейса
Наблюдение
TTFT и TPOT требуют разных планов параллелизма
Следующий эксперимент
Смоделировать и испытать P/D-разделение
Ограничение
Включить стоимость передачи KV и резерв мощности
Наблюдение
Агенты часто ждут инструменты или человека
Следующий эксперимент
Сохранять/выгружать состояние и маршрутизировать продолжение к кешу
Ограничение
Не гонять KV туда-обратно на каждый ход автоматически
Наблюдение
MoE не помещается или плохо балансируется
Следующий эксперимент
Сначала параллелизм экспертов и топологическое размещение
Ограничение
Не путать шардирование модели с разделением стадий запроса

Минимальный протокол сравнения

  • Снять базовую линию на одном совмещённом движке без экспериментальных флагов.
  • Разложить TTFT на очередь, обработку входа, передачу и выдачу первого байта.
  • Разложить TPOT по размеру пакета, длине активного KV, вытеснению и помехам новых входов.
  • Повторить репрезентативный трейс до устойчивых P50/P95/P99, включая прогрев и холодные запуски.
  • Проверить качество после квантования/спекуляции и устойчивость после отказа узла.
  • Считать полезную пропускную способность на GPU и полную стоимость, а не лучший изолированный показатель токенов в секунду.
Слой
Профиль
Что записать
длина входа/выхода (ISL/OSL) P50/P95/P99, поток поступления, параллельность, повтор префиксов
Как проверить
Репрезентативный трейс, а не одна синтетическая инструкция модели
Слой
Задержка
Что записать
TTFT, TPOT и E2E по квантилям
Как проверить
Раздельно очередь, вычисления, передача KV и потоковая выдача
Слой
Мощность
Что записать
полезная пропускная способность на GPU при заданных SLO
Как проверить
Отдельно P и D, доля простоя и резерв
Слой
Память
Что записать
веса, KV, фрагментация, попадания и вытеснения
Как проверить
HBM, оперативная память узла и хранилище как разные уровни
Слой
Качество
Что записать
регрессии формата и метода декодирования
Как проверить
Одинаковый набор задач и политика выбора токенов
Слой
Устойчивость
Что записать
отказ узла, потеря KV, перегрузка и масштабирование
Как проверить
Время восстановления и объём пересчёта
Слой
Экономика
Что записать
стоимость полезного миллиона токенов и запроса
Как проверить
Учитывать сеть, простой, резерв и работу платформенной команды

Результат карты оценки — не универсальный победитель среди vLLM, SGLang или TensorRT-LLM. Это доказательство, что конкретный движок, формат, планировщик и топология выдерживают ваш профиль. На одном железе vLLM может иметь нужное покрытие моделей, SGLang — высокий повтор префиксов, TensorRT-LLM — лучшее специализированное GPU-ядро; после обновления модели порядок меняется. Контрактом должен оставаться воспроизводимый трейс и SLO, а не имя проекта.

Для небольшого парка разумный вариант по умолчанию скучен: одна проверенная модель, совмещённый движок, непрерывные пакеты, подходящий числовой формат, порционная обработка контекста при длинных входах и префиксный кеш там, где измерена повторяемость. Маршрутизация с учётом кеша появляется при нескольких репликах. P/D — после того, как профиль показывает устойчивый конфликт TTFT/TPOT и сеть доказанно перевозит KV дешевле пересчёта.

Выводы

Пять выводов из истории инференса

  1. 01Инференс LLM отличается от обычного ML не размером модели, а формой работы: один запрос превращается в вычислительно тяжёлый проход по входу, затем в последовательный цикл с растущим состоянием.
  2. 02vLLM сделала поворот в сторону системного управления памятью: PagedAttention снизила фрагментацию KV-кеша и позволила держать больше активных последовательностей, но планирование на уровне итераций появилось раньше в Orca.
  3. 03Ни один «трюк» не ускоряет всё сразу: квантование, GPU-ядра, кеширование, планирование и спекуляция бьют по разным ресурсам и могут лишь перенести узкое место выше по стеку.
  4. 04Разделённый инференс возник в Splitwise и DistServe как ответ на несовместимые профили обработки контекста и генерации; его цена — распределённый KV-кеш, сеть, согласование темпа и новые режимы отказа.
  5. 05Архитектуру нужно выбирать по полезной пропускной способности на собственном трейсе под TTFT/TPOT SLO: начать с совмещённого движка, затем добавлять кеш, порции и разделение только после измеренного конфликта.
Источники

Работы, документация и границы доказательности

Список сгруппирован по механизму, а не по вендору. Цифры в статье сопровождаются исходной базой сравнения; документация проектов фиксирует состояние функций на дату исследования.

Архитектура и ранние системы

  1. Shazeer · Fast Transformer Decoding: One Write-Head is All You Needработа 2019 года, вводящая multi-query attention для сокращения объёма KV-тензоров и трафика памяти при пошаговой генерации
  2. Ainslie et al. · GQA: Training Generalized Multi-Query Transformer Modelsgrouped-query attention как промежуточная точка между качеством MHA и скоростью MQA
  3. Yu et al. · OrcaOSDI 2022: планирование на уровне итерации и выборочное формирование пакетов; исторический предшественник современных непрерывных пакетов
  4. Dao et al. · FlashAttentionточный механизм внимания с учётом иерархии памяти и сокращением обмена между HBM и SRAM

Квантование

  1. Frantar et al. · GPTQодношаговое weight-only-квантование больших генеративных трансформеров с использованием приближённой информации второго порядка
  2. Xiao et al. · SmoothQuantперенос сложности выбросов из активаций в веса для W8A8-инференса; результаты зависят от доступных GPU-ядер
  3. Lin et al. · AWQactivation-aware weight-only-квантование и TinyChat; пример связи алгоритма, упаковки весов и специализированных ядер

vLLM и управление памятью

  1. Kwon et al. · первый анонс vLLMистория разработки в UC Berkeley/LMSYS, внедрения в Vicuna/Chatbot Arena и ранние сравнения с Hugging Face/TGI
  2. Kwon et al. · Efficient Memory Management with PagedAttentionканоническая SOSP 2023 работа: блочное управление KV-кешем, совместное использование блоков и в 2–4 раза большая пропускная способность против FasterTransformer/Orca в измеренных конфигурациях
  3. Kwon · vLLM: An Efficient Inference Engine for Large Language Modelsдиссертация 2025 года с ретроспективой PagedAttention, планировщика и расширяемой архитектуры движка

Планирование и повтор вычислений

  1. Agrawal et al. · SARATHIисходная постановка порционной обработки контекста и формирования пакетов с приоритетом генерации для уменьшения её остановок
  2. Agrawal et al. · Sarathi-ServeOSDI 2024: измерения обслуживаемой нагрузки при ограничениях хвостовой задержки для нескольких моделей и конфигураций A100
  3. Holmes et al. · DeepSpeed-FastGenDynamic SplitFuse как альтернативная стратегия композиции длинных входов и шагов генерации
  4. Zheng et al. · SGLangRadixAttention для повторного использования общих префиксов и среда выполнения программ из нескольких вызовов модели
  5. Srivatsa et al. · Prebleраспределённое планирование с учётом префиксного кеша, стоимости пересчёта и справедливости очереди
  6. Prabhu et al. · vAttentionальтернатива PagedAttention на виртуальной памяти CUDA: физическое выделение по требованию при непрерывном виртуальном адресном пространстве

Ускорение декодирования

  1. Leviathan et al. · Fast Inference via Speculative Decodingточное спекулятивное декодирование: черновая модель предлагает несколько токенов, основная проверяет их параллельно без изменения распределения
  2. Cai et al. · Medusaнесколько дополнительных голов строят дерево кандидатов без отдельной черновой модели; требуется дообучение
  3. Li et al. · EAGLEспекуляция на уровне признаков предпоследнего слоя; опубликованные ускорения относятся к конкретным моделям и задачам

Разделение стадий

  1. Patel et al. · Splitwiseпрепринт от 30 ноября 2023 года: разнести вычислительно насыщенную обработку входа и ограниченную полосой памяти генерацию по разным машинам и независимо подбирать железо
  2. Zhong et al. · DistServeпрепринт от 18 января 2024 года: независимая настройка TTFT/TPOT, размещения и параллелизма для максимизации полезной пропускной способности под SLO
  3. Qin et al. · MooncakeKV-ориентированная архитектура платформы Kimi: разделённая обработка контекста, распределённый кеш и сеть как часть контура данных
  4. Jin et al. · P/D-Serveэксплуатационные задачи P/D на десятках тысяч xPU: организация пулов, отказы, динамическое соотношение стадий и передача KV

Современные реализации

  1. vLLM · Disaggregated Prefillingдокументация, проверенная 7 августа 2026 года: функция помечена как экспериментальная; заявлены независимая настройка TTFT/ITL и контроль хвоста, но не рост пропускной способности
  2. vLLM · Disaggregated Encoderдокументация, проверенная 8 августа 2026 года: отдельный пул кодировщика для мультимодальных моделей и передача кеша вложений в экземпляры обработки контекста и генерации; основа E/P/D-топологий
  3. llm-d · project proposalоткрытый Kubernetes-стек вокруг vLLM: маршрутизация с учётом префиксного кеша, многоуровневый KV-кеш и независимо масштабируемая xPyD-топология
  4. NVIDIA Dynamo · architectureразделение контуров запросов, управления и состояния, маршрутизация с учётом KV, передача через NIXL и восстановление при сбоях; показатели проекта остаются заявлениями поставщика

Ограничения и новые исследования

  1. Li et al. · Revisiting Disaggregated LLM Servingпрепринт от 14 ноября 2025 года: систематическая проверка производительности и энергии — выигрыш не гарантирован и зависит от нагрузки и пути передачи KV
  2. Song et al. · Analytical Provisioning for Attention-FFN Disaggregated LLM Servingпрепринт: разделение внимания и FFN как следующий уровень специализации стадий; оптимальное отношение пулов зависит от стохастической нагрузки
  3. Liu et al. · Revealing the Challenges of Attention-FFN Disaggregationпрепринт: AFD не универсален — выигрыш зависит от полосы межсоединения, гранулярности экспертов и режима нагрузки
  4. Li et al. · PPD Disaggregation for Multi-turn Servingпрепринт: append-prefill последующих ходов иногда выгоднее исполнять на decode-узле, сохраняя локальность кеша
  5. Arun et al. · Load-Aware Prefill Deflectionпрепринт о гибридном возврате части обработки входа на узлы генерации при очереди и дорогой передаче KV; сигнал направления, а не сложившийся стандарт
Дальше

Связанные материалы

Поделиться
TelegramLinkedIn

Этот разбор продолжает разговор о совместно эволюционирующем AI-стеке: здесь слой инференса раскрыт как отдельная система.