Основы инференса
Обслуживание модели в масштабе определяется математикой очередей и физикой кэша ключей и значений. Это приложение развивает аналитические модели обслуживания, на которые опираются главы книги об инференсе и эксплуатации, и показывает, как динамика очередей и арифметика памяти кэша внимания складываются в единое ограничение обслуживания при жестких целях уровня обслуживания по задержке (SLO). В терминах C³ инференс превращает вычислительную мощность, коммуникацию с памятью и клиентами и координацию между очередями в одно ограничение обслуживания.
Как пользоваться этим приложением
Это приложение — количественный справочник по системам обслуживания. Используйте модель очередей, чтобы выбрать размер батча или предсказать хвостовую задержку при заданной интенсивности поступления; используйте арифметику кэша ключей и значений, чтобы оценить память или определить, когда пропускную способность ограничивает кэш, а не вычисления.
Обращайтесь к нему из глав об инференсе и эксплуатации: когда те главы ссылаются на результат обслуживания, вывод лежит здесь. Читайте его линейно ради полной аргументации или обращайтесь к разобранному примеру GPT-3 и системе выбора размера батча как к шаблонам, напрямую применимым в промышленных системах.
Анализ производительности обслуживания
Анализ производительности обслуживания состоит из двух связанных слоев. Очередь определяет, как запросы ждут, группируются в батчи и отбрасываются при стохастическом поступлении; кэш ключей и значений определяет, сколько живого состояния ускоритель может удерживать, укладываясь в бюджет задержки. В следующих подразделах сначала выводится модель очередей, а затем она связывается с пределами емкости памяти в разобранных примерах обслуживания.
Теория массового обслуживания для батчевого инференса
Кривая эффективности батчинга дает интуицию о компромиссах между пропускной способностью и задержкой, но промышленным системам нужен строгий анализ, чтобы определить оптимальные размеры батчей при стохастических паттернах поступления. Теория массового обслуживания дает математический аппарат, чтобы вывести эти оптимальные рабочие точки и понять, почему одни размеры батчей лучше других в определенных условиях.
Обозначения очередей и суррогат M/G/1 для батчей
Обозначение M/G/c/K называет четыре характеристики, которые может понадобиться отразить в промышленной модели обслуживания на GPU:
- M (марковское поступление): запросы поступают по пуассоновскому процессу с интенсивностью . Это моделирует свойство отсутствия памяти у пользовательских запросов: поступление одного запроса не предсказывает момента следующего.
- G (общее распределение обслуживания): время обслуживания подчиняется общему распределению, не ограниченному экспоненциальным. Время инференса на GPU зависит от размера батча и сочетает детерминированные компоненты (вычисления) со стохастическими вариациями (конкуренция за память, планирование ядер).
- c (число серверов): в системе параллельных рабочих GPU, каждый из которых может обслуживать запросы независимо.
- K (емкость очереди): в системе поддерживается конечная очередь емкостью запросов. Запросы, пришедшие в заполненную очередь, отклоняются (сброс нагрузки).
Это обозначение происходит из той же линии системной производительности, которая задавала размеры телефонных сетей, прежде чем ее применили к кластерам GPU.
Перспектива: теория массового обслуживания и производительность
Теория массового обслуживания, развитая Агнером Крарупом Эрлангом в 1909 году для анализа телефонных сетей, остается основой инженерии системной производительности (Erlang, 1909). Тот же математический аппарат, который определял размеры телефонных станций, теперь определяет мощность кластеров GPU. Стандартные тексты по системам развивают составные модели очередей и приближения, на которых строится это обозначение (Jain, 1991; Kleinrock, 1975).
Для системы батчевого инференса с размером батча время обслуживания становится функцией размера батча. Пусть — время обработки батча из запросов. Из физики батчинга (раздел «Стратегии батчинга в масштабе») уравнение моделирует это так:
где — фиксированные накладные расходы обслуживания (запуск ядер, загрузка весов из памяти с высокой пропускной способностью (HBM)), а — предельное время вычислений на запрос. Эта линейная модель отражает поведение первого порядка, наблюдаемое в промышленных системах, хотя реальное время обслуживания может демонстрировать небольшую сублинейность из-за насыщения пропускной способности памяти при больших батчах.
Эффективная скорость обслуживания при батчевой обработке равна:
Эффективная скорость растет с размером батча и приближается к асимптотическому пределу при .
Анализ времени отклика
Полное время отклика запроса состоит из трех компонентов:
где:
- — ожидаемое время ожидания в очереди до включения в батч
- — ожидаемая задержка накопления батча на запрос перед отправкой
- — ожидаемое время инференса после запуска батча
При динамическом батчинге с максимальным временем ожидания и максимальным размером батча окно батчинга открывает первый запрос. Пусть считает последующие поступления в этом окне, а . При фактический размер батча равен с учетом запускающего запроса, поэтому:
Пусть — распределенное по Эрлангу время -го последующего поступления. Полный батч закрывается, когда , а батч по таймауту закрывается в момент при . Средняя задержка накопления на запрос внутри каждого реализованного батча равна:
Если взвесить каждый исход батча по реализованному числу запросов, получится средняя задержка случайно выбранного запроса:
Когда батчи надежно заполняются до таймаута, это выражение приближается к . При батч содержит только запускающий запрос, и задержка накопления равна нулю.
Вывод оптимального размера батча
Оптимальный размер батча минимизирует ожидаемое время отклика при ограничениях на пропускную способность:
Ограничение обеспечивает устойчивость системы (скорость обслуживания превышает интенсивность поступления).
Для режима высокого трафика, в котором батчи размера надежно заполняются до таймаута, подстановка компонентов времени отклика дает:
Для удобной оценки времени ожидания используйте суррогат M/G/1, который рассматривает батчи как пуассоновские «суперзапросы». Если интенсивность поступления запросов равна , а средний размер батча равен , суррогат использует интенсивность поступления батчей . Это не точный процесс, порождаемый группировкой пуассоновских поступлений запросов, потому что группировка фиксированного размера дает эрланговские интервалы между батчами; конечное или требует модели группового обслуживания или симуляции. В рамках явного суррогата формула Поллачека—Хинчина дает:
где — загрузка сервера. Второй момент отражает вариативность времени обслуживания.
Для линейной модели времени обслуживания с детерминированным обслуживанием в этом суррогате:
Для промышленного подбора размеров команды часто сначала задают целевой запас по загрузке, а не решают полную задачу минимизации задержки. При ограничение дает границу размера батча по целевой загрузке (уравнение):
где — целевая загрузка (обычно 0,7–0,8 для промышленных систем, чтобы сохранить запас по задержке), причем .
Перспектива: подбор размера батча по целевой загрузке
Граница размера батча по целевой загрузке (уравнение) раскрывает фундаментальную мысль: минимальный устойчивый размер батча растет с фиксированными накладными расходами и интенсивностью поступления. Это означает:
- Более высокий трафик : требуемый размер батча растет.
- Более высокие фиксированные накладные расходы : требуемый размер батча растет, чтобы амортизировать накладные расходы.
- Более высокая целевая загрузка : требуемый размер батча уменьшается, но запас по задержке сокращается.
Такой подбор по загрузке объясняет, почему большим языковым моделям (LLM) (высокий из-за загрузки весов) нужны батчи крупнее, чем моделям зрения (низкий ), даже при той же интенсивности поступления.
Разобранный пример: обслуживание GPT-3 при 100 QPS
Рассмотрим обслуживание модели класса GPT-3 (175 млрд параметров) при следующих параметрах системы:
- Интенсивность поступления: запросов в секунду
- Железо: 8 GPU A100 с тензорным параллелизмом
- Накладные расходы загрузки весов: мс (время загрузки матриц внимания на проход вперед)
- Вычисления на токен: мс на запрос (амортизировано по батчу)
- Средняя длина выхода: 100 токенов на запрос
- Целевая загрузка:
Для фазы предзаполнения (обработка входного промпта) время обслуживания определяет уравнение:
Применяя уравнение, вычислим минимальный размер батча, при котором достигается целевая загрузка 75 % (с запасом 25 %):
Округление вверх дает как наименьший размер батча, соответствующий целевому запасу по загрузке. Выражение времени отклика для суррогата при допущении полных батчей затем показывает, как более крупные батчи снижают загрузку, но добавляют задержку накопления батча:
Оценка производительности обслуживания GPT-3 при разных размерах батча (таблица «Влияние размера батча на производительность обслуживания GPT-3») обнажает компромисс между задержкой в очереди и загрузкой сервера:
Влияние размера батча на производительность обслуживания GPT-3: батчи размером меньше 8 не выдерживают 100 QPS (загрузка превышает 100 %). С учетом задержки накопления батча минимум задержки в этой простой модели приходится примерно на ; у почти такая же средняя задержка при меньшей загрузке, а оставляет больше запаса, но платит большим штрафом за задержку накопления.
| Размер | (мс) | запр./с | E[W] (мс) | (мс) | E[T] (мс) | |
|---|---|---|---|---|---|---|
| 1 | 50,5 | 19,8 | 505 % (неустойчиво) | 0,0 | ||
| 4 | 52,0 | 76,9 | 130 % (неустойчиво) | 15,0 | ||
| 8 | 54,0 | 148,1 | 67,5 % | 56,1 | 35,0 | 145,1 |
| 16 | 58,0 | 275,9 | 36,3 % | 16,5 | 75,0 | 149,5 |
| 32 | 66,0 | 484,8 | 20,6 % | 8,6 | 155,0 | 229,6 |
Для этих размеров батча получаются четыре операционных режима:
- Неустойчивый режим (размеры батча 1–4): загрузка превышает 100 %, то есть система не успевает за поступлениями. Очереди растут неограниченно.
- Порог устойчивости (размер батча 8): при загрузке 67,5 % система устойчива, но задержки в очереди вносят значительный вклад в задержку (56,1 мс), и задержка в очереди взрывно растет вблизи насыщения (рисунок «Хоккейная клюшка очередей»).
- Излом задержки (размеры батча 8–16): размер батча 8 дает наименьшую среднюю задержку в этой модели. Размер батча 16 обменивает несколько миллисекунд дополнительной полной задержки на меньшую загрузку и меньшее ожидание в очереди (16,5 мс против 56,1 мс), а оставляет еще больше запаса по загрузке, но платит слишком большую задержку накопления батча.
- Убывающая отдача (размеры батча выше 32): дальнейшее увеличение размера батча снизило бы загрузку, но ограничения памяти не позволяют это исследовать.
Хоккейная клюшка очередей: для очереди M/M/1 величина — ожидаемое число запросов в системе, включая запрос в обслуживании. Ее гиперболический рост вблизи насыщения объясняет, почему промышленные системы сохраняют запас по загрузке; заштрихованные рабочие полосы иллюстративны и не являются универсальными порогами.
Закон Литтла дает проверку этих результатов на внутреннюю согласованность.
Сценарий: применение закона Литтла для проверки
Проверка: по закону Литтла (Little, 1961) :
При , запр./с и 149,5 мс:
0,1495 с = 14,95 запросов в системе
При размере батча 16 и загрузке 36,3 %:
- Ожидаемое число запросов в обслуживании: 16 0,363 = 5,8
- Ожидаемое число запросов в очереди: 14,95 - 5,8 = 9,14
Это согласуется с разложением времени отклика: в среднем примерно 6 запросов находятся в обслуживании и примерно 9 ждут или накапливаются в батчи.
Система принятия решений: выбор размера батча при заданном SLA
Промышленные системы должны выбирать размер батча так, чтобы выполнять цели уровня обслуживания (SLO), которые обычно задают как процентили задержки (например, задержка P99 < 200 мс). Следующая схема систематизирует это решение:
Шаг 1: охарактеризовать время обслуживания
Измерьте и эмпирически, профилируя инференс при размерах батча 1, 8 и 32. Подберите линейную модель .
Шаг 2: вычислить порог устойчивости
Найдите минимальный размер батча , при котором :
Любой размер батча ниже приводит к неустойчивой системе.
Шаг 3: вычислить задержку при кандидатных размерах батча
При том же суррогате пуассоновских суперзапросов и допущении полных батчей для каждого кандидата вычислите:
Шаг 4: учесть хвостовую задержку
Если измеренное время отклика приблизительно гауссово, его P99 можно оценить как:
где — стандартное отклонение времени отклика. Это гауссово правило не является общим приближением для режима высокой нагрузки, потому что времена отклика в системах очередей обычно асимметричны. Для экспоненциального времени отклика P99 равен ; для промышленного подбора размеров используйте измеренные процентили.
Шаг 5: выбрать оптимальный размер батча
Выберите наибольшее , при котором :
Операционные правила выбора размера батча (таблица «Система принятия решений по размеру батча») уравновешивают устойчивость, SLO по задержке и экономическую эффективность:
Система принятия решений по размеру батча: систематический подход к выбору размера батча на основе устойчивости, SLO по задержке и целевых значений загрузки.
| Условие | Рекомендуемое действие | Обоснование |
|---|---|---|
| Увеличить размер батча или добавить реплики | Система неустойчива | |
| Уменьшить размер батча или добавить реплики | Задержка превышает цель | |
| Рассмотреть сокращение реплик ради экономии | Система избыточно обеспечена | |
| Добавить реплики для запаса | Приближение к неустойчивости |
Применение этих операционных правил обеспечивает отзывчивость развертывания обслуживания под нагрузкой и экономическую эффективность в окна низкого трафика.
Кривые компромисса: визуализация рабочей области
Кривые компромисса между пропускной способностью и задержкой (рисунок «Кривые компромисса размера батча») определяют допустимую рабочую область:
Кривые компромисса размера батча: по мере роста размера батча по оси x пропускная способность (левая ось y, синяя) растет сублинейно, а задержка P50 (правая ось y, красная) — почти линейно. Оптимальная точка отмечена при B=16; заштрихованная область емкости (нехватка памяти, OOM) показывает размеры батча, превышающие память устройства. Бенчмарк: Llama-2 70B в FP16 с тензорным параллелизмом на четырех GPU A100 по 80 ГБ.
Кривая компромисса демонстрирует несколько ключевых выводов:
- Граница Парето: рабочая точка эффективна по Парето, когда ни одна другая кандидатная точка не дает как минимум такой же пропускной способности при не большей задержке и со строгим улучшением хотя бы по одной цели. Граница — это множество таких недоминируемых точек.
- Излом кривой: оптимальный размер батча часто лежит в «изломе», где прирост пропускной способности убывает, а задержка продолжает расти линейно.
- Оптимум с ограничением SLO: когда SLO ограничивает максимальную задержку, оптимальная точка лежит там, где кривая пересекает границу SLO.
- Убывающая отдача: за изломом удвоение размера батча может увеличивать пропускную способность лишь на 10–20 %, при этом удваивая задержку.
Теоретико-очередная рамка дает математическую основу для стратегий батчинга, введенных в разделе «Стратегии батчинга в масштабе». Если интуиция подсказывает, что «большие батчи лучше для пропускной способности», то ограничения устойчивости, цели по задержке и убывающая отдача задают четко определенную оптимальную рабочую область, которая зависит от типа модели и требований развертывания.
Основы KV-кэша
Формальное определение KV-кэша дано в основном разделе об управлении памятью при инференсе (введено в разделе «Управление памятью: от предварительного выделения к страницам»). Это приложение раскрывает арифметику размеров, лежащую за этим определением: почему кэш сокращает вычисления на токен, почему его память растет с длиной последовательности и размером батча и почему неуправляемое выделение может фрагментировать HBM (Kwon et al., 2023).
Авторегрессивная генерация без кэширования требует вычислений на токен, потому что каждый слой трансформера должен заново вычислять ключи и значения внимания для всех предыдущих токенов. KV-кэш хранит эти вычисленные векторы ключей и значений и снижает генерацию до на токен. При обслуживании в масштабе такая экономия вычислений создает критическую задачу управления памятью, поскольку память KV-кэша при длинных контекстах может превышать веса модели.
Размер кэша растет с контекстом по уравнению:
где — число слоев, — скрытая размерность, — длина последовательности, — размер батча, — размер хранения одного элемента в байтах, а множитель 2 учитывает и ключи, и значения.
Для модели GPT-3 на 175 млрд (, , FP16 байта) при длине последовательности каждому запросу требуется:
На 8 GPU A100 по 80 ГБ (640 ГБ суммарной HBM) хранение весов модели в FP16 занимает 350 ГБ, оставляя 290 ГБ под активации и память KV-кэша. Неуправляемое непрерывное выделение ограничивает максимальный одновременный размер батча значением 30 запросов до нехватки памяти (OOM), что показывает, как емкость KV-кэша ограничивает пропускную способность обслуживания.
Итоги
Промышленный инференс требует баланса динамики очередей и емкости памяти железа. Количественные соотношения, выведенные в этом приложении, определяют выбор размера батча, бюджеты задержки и пределы памяти ускорителей в развертываниях обслуживания:
Ключевые выводы: производительность обслуживания ограничена очередями и памятью
- У загрузки есть жесткий потолок: по мере приближения загрузки к 1 глубина очереди и задержка растут без предела. Промышленное обслуживание ориентируется на , чтобы сохранить запас по задержке; оставшиеся 30 % — не потери, а буфер, который держит хвостовую задержку конечной.
- У размера батча есть оптимум, а не максимум: большие батчи повышают пропускную способность, но добавляют задержку накопления батча, давая излом задержки, а не монотонное улучшение. За изломом удвоение батча может купить лишь на 10–20 % больше пропускной способности ценой удвоенной задержки.
- Закон Литтла связывает систему воедино: связывает число запросов в полете с интенсивностью поступления и временем в системе и дает однострочную проверку согласованности для любого измерения обслуживания.
- KV-кэш — связывающее ограничение: память кэша растет линейно с длиной последовательности и размером батча и регулярно превышает веса модели, ограничивая одновременную емкость (авторегрессивное узкое место, принцип «авторегрессивное узкое место»). Наивное выделение теряет 60–80 % на фрагментацию, поэтому промышленные системы управляют ею схемой виртуальной памяти.