Инференс (Inference): как исполняются модели ИИ в продакшне, из чего складывается стоимость и как уложиться в SLA

Инференс — это стадия, на которой обученная модель ИИ исполняется над входными данными и выдаёт ответ. Если обучение «пишет» знания во внутренние представления модели, то инференс их читаёт и применяет в реальном времени. Для генеративных систем (LLM, визуальные/аудио-модели) инференс — критичная часть пользовательского опыта и экономики: именно здесь рождается задержка, формируется счёт за вычисления и проявляются инженерные компромиссы.

Инференс (Inference): как исполняются модели ИИ в продакшне

В продакшне инференс — это не «вызвать одну функцию». Это конвейер: приём запроса, препроцессинг, подготовка контекста (часто через RAG), токенизация, прогон через слои модели, декодирование, пост-валидация, логирование и биллинг. Качество, скорость и стоимость зависят от архитектуры модели (см. LLM и трансформер), выбранной стратегии декодирования и инженерных оптимизаций, включая квантование и KV-кэш. Системную перспективу и низкоуровневую механику удобно смотреть в стеке инференса LLM.

Где инференс живёт в AI-стеке

Инференс — верхний уровень исполнения в AI-стеке: поверх данных и индексов, рядом с API, оркестраторами, RAG и системами наблюдаемости.

  • Приложение: принимает запрос, авторизует пользователя, формирует задачу.
  • Обогащение (по желанию): поиск фрагментов через RAG, нормализация входа.
  • Модельный сервинг: инференс-движок (GPU/CPU/ускорители), очередь, планировщик, кэш.
  • Валидация/форматирование: приведение ответа к схеме (JSON/таблица/текст), фильтры.
  • Логи/метрики/биллинг: трассировки, стоимость/1k токенов, инциденты.

На этом пути оптимизации в одном месте (например, сжатие контекста перед моделью) часто дают больший выигрыш, чем «выжимать» дополнительные проценты на ядре.

Профили инференса: онлайн, офлайн, стриминг

  • Онлайн: интерактивные ассистенты и API, ответ важен «здесь и сейчас». Главные метрики — P50/P95 задержка и стабильность.
  • Офлайн/пакетный: обработка массивов документов, массовая суммаризация/классификация; ключевое — стоимость за объект и сквозная скорость.
  • Стриминг: отдаём ответ по мере генерации токенов. Пользователь видит «движение», а система выигрывает в UX даже при той же P95.

Что происходит внутри: путь запроса шаг за шагом

  1. Нормализация: очистка входа, отсечение лишнего, приведение к ожидаемому формату.
  2. Подготовка контекста: при необходимости — извлечение фактов через RAG, сжатие и маркировка источников.
  3. Токенизация: текст превращается в последовательность токенов; длина и разбиение влияют на стоимость и скорость.
  4. Prefill (контекстный проход): модель «проглатывает» весь контекст и подготавливает внутреннее состояние.
  5. Декодирование: итеративное порождение новых токенов до условия остановки (максимум длины, специальный токен, критерий).
  6. Пост-обработка: приведение к нужному формату, проверка схем, фильтры безопасности.
  7. Логирование: промт, версия модели, расходы, метрики, идентификаторы источников.

Режимы декодирования: качество ↔ разнообразие ↔ скорость

Режим Идея Плюсы Минусы Где уместен
Greedy всегда берём самый вероятный токен Предсказуемость, скорость Низкое разнообразие Извлечение полей, строгие ответы
Beam search держим несколько лучших «лучей» Качество формулировок Дороже по времени/памяти Формальные тексты, тех. ответы
Top-k выбираем из k лучших Разнообразие, простота Риск «выхода за факты» Копирайтинг, вариативные черновики
Top-p (nucleus) выбираем из «массы» p Баланс разнообразия/качества Тонкая настройка порога Маркетинг, креатив
Температура↓ «остужаем» распределение Лаконичность, устойчивость Меньше вариантов Инструкции, консервативные ответы
Температура↑ «разогреваем» распределение Креативность Риск неточностей Идеи/брейншторм

Выбор стратегии — часть продуктовых настроек. Там, где важны факты, консервативные режимы + жёсткие рамки подсказки и валидация.

Ключевые оптимизации инференса

KV-кэш

В авто-регрессионных моделях слой внимания каждый шаг опирается на уже вычисленные ключи/значения. KV-кэш сохраняет их и исключает повторные расчёты. Это ускоряет генерацию при длинном контексте и снижает цену.

Батчинг

Запросы схожей длины и профиля исполняются пачкой. Оборотное число токенов за секунду растёт, но хвост задержек (P95) может увеличиться. Нужен баланс и адаптивный планировщик.

Спекулятивная декодировка

Лёгкая модель (или эвристика) «предсказывает» несколько будущих токенов, а базовая модель быстро принимает/отбраковывает этот кандидат. При хорошей калибровке экономит 10–40% времени итераций.

Квантование

Снижение разрядности весов/активаций (8-/4-бит и ниже) сокращает память/пропускную способность и ускоряет вычисления, иногда ценой небольшой деградации качества. Для многих продовых сценариев — лучший «рычаг» цены.

Квантование

Сжатие и ранжирование контекста

Дешевле не считать лишние токены: резюмируйте, удаляйте дубликаты, жёстко лимитируйте вставки из RAG. Часто это даёт больше, чем микротюнинг ядра.

Варианты внимания и кёрнелы

GQA/MQA (общие K/V для голов), flash-attention и «плиточные» кёрнелы уменьшают использование памяти и повышают токены/сек. Это уже уровень низкоуровневого стека (см. стек инференса LLM).

Метрики инференса

Класс Метрики Комментарии
Задержка P50/P95/максимум; time-to-first-token P95 важнее среднего; TTFT влияет на UX стриминга
Производительность токенов/сек на поток и на узел; утилизация Следите за падением на длинных контекстах
Стоимость $/1k токенов ввода/вывода; цена/эпизод Включайте «скрытые» операции (поиск, сжатие)
Качество «полезность», «корректность», отказов по политике Доля ответов с цитатами при RAG, доля валидационных ошибок
Стабильность ошибки по классам, ретраи, флаппинг Доля деградаций и автоматических откатов

От чего зависит стоимость

Бюджет инференса складывается из контекста, длины ответа, режима декодирования, профиля железа и оркестрации. Наглядная таблица «рычагов»:

Рычаг Что меняем Экономия Риск/комментарий
Контекст меньше токенов, агрессивнее сжатие Высокая Потеря нюансов; компенсируйте RAG-переранжированием
Модель компактнее, маршрутизация «лёгкая→тяжёлая» Средняя/высокая Снижение качества на сложных кейсах
Квантование 8/4-бит веса/активации Средняя/высокая Возможна деградация на «краях»
Батчинг крупнее партии, динамическая подмешка Средняя Длиннее хвост задержек (P95)
Декодер greedy/top-p ниже, beam меньше Низкая/средняя Меньше разнообразия
Кэш KV и ответы по шаблонам Средняя Важен hit-rate и контроль устареваний
Инфраструктура близость к данным/индексу, пины Низкая/средняя Сетевые и организационные ограничения

Аппаратная перспектива

  • GPU: высокопараллельные матричные операции; узкие места — память и пропускная способность.
  • CPU: подходит для компактных моделей, офлайн-пакетов и ранжирования; выигрывает на «мелких» задачах без тяжёлых матриц.
  • Специализированные ускорители: выбор по экосистеме кёрнелов/компиляторов и наличию операторов внимания.
  • Сеть и диски: хранение индексов и слоёв RAG рядом с инференсом уменьшает хвост задержек. Обзор железа см. в Hardware GPU 101.

Планировщик и оркестрация

  • Классы запросов: короткие/длинные; с RAG/без; строгий срок/мягкий.
  • Маршрутизация: компактная модель по умолчанию, «тяжёлая» — по сигналам сложности.
  • Деградация: при перегрузе — упростить режим (строже сжатие, более дешёлая модель), честно сообщить пользователю в формате ответа.
  • Эластичность: масштабирование по очередям; гарпун-защита от «штормов» (rate-limit, квоты).

Инференс и RAG: где экономить, не теряя фактов

  • Держите индекс свежим и чистым, сокращайте «шум» до ANN-поиска.
  • Настройте гибридный поиск и переранжирование, чтобы top-k были «ядровыми».
  • Сжимайте выдержки перед подсказкой и ограничивайте k.
  • Требуйте цитирования: это дисциплинирует генерацию и упрощает аудит качества.

Надёжность и безопасность

  • Изоляция инструкций: системные промты отделены от пользовательских; фильтры для prompt-injection и jailbreak-паттернов.
  • Контракты формата: схемы для JSON/таблиц; валидация и моки.
  • Логи и воспроизводимость: версия модели, параметры декодера, источники RAG, стоимость.
  • Секреты: ключи и токены — вне подсказки; через прокси и секрет-хранилища.
  • Политики: чёрные/белые списки инструментов и доменов, контроль длины/тематики ответов.

Частые анти-паттерны

  • Перекармливать модель контекстом «на всякий случай».
  • Считать, что «одна большая модель» лучше любой маршрутизации.
  • Оптимизировать кёрнелы, игнорируя узкое место — сетевые и дисковые задержки.
  • Не вести логи промтов/версий — невозможно разбирать инциденты.
  • Опираться только на офлайн-бенчмарки без A/B в продукте.

Чек-лист запуска инференса в продакшн

  • Сформулируйте SLA: P95, TTFT, стоимость/1k токенов, доля ошибок.
  • Выберите модель и режимы декодирования под сценарий.
  • Настройте контекст: лимиты, сжатие, RAG-политику, цитирование.
  • Включите KV-кэш, батчинг, квантование; измерьте выигрыши на своих нагрузках.
  • Реализуйте маршрутизацию по сложности и путь деградации.
  • Постройте наблюдаемость: метрики, трассировки, биллинг, алерты.
  • Пропишите инциденты и откаты: переключение моделей/конфигов, резервные индексы.
  • Запустите A/B-тесты и регрессионные наборы, зафиксируйте базовые кривые качества.
  • Регламентируйте обновления (модели, индексы, кёрнелы) и совместимость версий.
  • Проведите стресс-тесты: шторм запросов, длинные контексты, отказ внешних источников.

Таблица: влияние оптимизаций на метрики (ориентиры)

Оптимизация TTFT Токенов/сек Стоимость Комментарии
KV-кэш Макс. эффект при длинном контексте
Батчинг ↑ P95 / ≈ P50 ↑↑ Важно выровнять длины запросов
Спекулятивная декодировка Зависит от качества «спекулянта»
Квантование 8-/4-бит ≈/↓ ↓↓ Проверяйте деградацию качества
Сжатие контекста ↑ (через меньше токенов) ↓↓ Требует качественного rerank
GQA/MQA, flash-attention Низкоуровневые улучшения кёрнелов

Таблица: сравнение профилей инференса

Профиль Пример Цель Стратегии
Интерактивный чат Ассистент для поддержки TTFT/P95 и стабильность Стриминг, conservative decode, KV-кэш
Поиск с RAG Внутренняя вики Faithfulness, цитирование Гибридный поиск, сжатие, rerank
Массовая суммаризация Ежедневные отчёты Цена/объект, сквозная скорость Пакеты, компактные модели, квантование
Кодогенерация Dev-инструменты Pass@k, структурность Форматы/схемы, проверка тестами

FAQ

Инференс — это только про LLM? Нет. Термин шире и относится к любым моделям ИИ. Но для LLM инференс особенно «чувствителен» к контексту, декодированию и кэшу.

Почему TTFT важнее общей задержки? Потому что влияeт на субъективный UX в стриминге: как быстро «пошёл текст». Если TTFT низкий, пользователи терпимее к общей длительности.

Можно ли полностью «прикрыться» батчингом? Батчинг повышает эффективность, но может ухудшить P95. Для интерактивных систем нужны адаптивные партии и классы запросов.

Нужно ли всегда квантовать модель? Если у вас критичны цена/латентность — почти всегда да, хотя бы 8-бит. Проверяйте качество на своих тестах.

RAG увеличивает стоимость — есть ли смысл? Да, если задача требует фактов и ответственности. Правильно настроенный RAG экономит контекст и снижает галлюцинации, что важно для качества и доверия.

Словарь терминов

  • Инференс (inference) — исполнение обученной модели на новых данных.
  • TTFT (time-to-first-token) — время до первого токена в потоковой генерации.
  • KV-кэш — буфер ключей/значений внимания для ускорения авто-регрессии.
  • Батчинг — одновременная обработка нескольких запросов.
  • Спекулятивная декодировка — ускорение за счёт проверки «черновиков» от облегчённой модели.
  • Квантование — снижение разрядности для ускорения и экономии памяти.
  • GQA/MQA — способы уменьшить стоимость внимания, разделяя/объединяя K/V.
  • Flash-attention — кёрнел внимания с оптимизированным доступом к памяти.
  • P50/P95 — медиана и 95-й перцентиль задержки.
  • Faithfulness — соответствие ответа предоставленным источникам.

См. также

Task Runner