Инференс — это стадия, на которой обученная модель ИИ исполняется над входными данными и выдаёт ответ. Если обучение «пишет» знания во внутренние представления модели, то инференс их читаёт и применяет в реальном времени. Для генеративных систем (LLM, визуальные/аудио-модели) инференс — критичная часть пользовательского опыта и экономики: именно здесь рождается задержка, формируется счёт за вычисления и проявляются инженерные компромиссы.
В продакшне инференс — это не «вызвать одну функцию». Это конвейер: приём запроса, препроцессинг, подготовка контекста (часто через RAG), токенизация, прогон через слои модели, декодирование, пост-валидация, логирование и биллинг. Качество, скорость и стоимость зависят от архитектуры модели (см. LLM и трансформер), выбранной стратегии декодирования и инженерных оптимизаций, включая квантование и KV-кэш. Системную перспективу и низкоуровневую механику удобно смотреть в стеке инференса LLM.
Где инференс живёт в AI-стеке
Инференс — верхний уровень исполнения в AI-стеке: поверх данных и индексов, рядом с API, оркестраторами, RAG и системами наблюдаемости.
- Приложение: принимает запрос, авторизует пользователя, формирует задачу.
- Обогащение (по желанию): поиск фрагментов через RAG, нормализация входа.
- Модельный сервинг: инференс-движок (GPU/CPU/ускорители), очередь, планировщик, кэш.
- Валидация/форматирование: приведение ответа к схеме (JSON/таблица/текст), фильтры.
- Логи/метрики/биллинг: трассировки, стоимость/1k токенов, инциденты.
На этом пути оптимизации в одном месте (например, сжатие контекста перед моделью) часто дают больший выигрыш, чем «выжимать» дополнительные проценты на ядре.
Профили инференса: онлайн, офлайн, стриминг
- Онлайн: интерактивные ассистенты и API, ответ важен «здесь и сейчас». Главные метрики — P50/P95 задержка и стабильность.
- Офлайн/пакетный: обработка массивов документов, массовая суммаризация/классификация; ключевое — стоимость за объект и сквозная скорость.
- Стриминг: отдаём ответ по мере генерации токенов. Пользователь видит «движение», а система выигрывает в UX даже при той же P95.
Что происходит внутри: путь запроса шаг за шагом
- Нормализация: очистка входа, отсечение лишнего, приведение к ожидаемому формату.
- Подготовка контекста: при необходимости — извлечение фактов через RAG, сжатие и маркировка источников.
- Токенизация: текст превращается в последовательность токенов; длина и разбиение влияют на стоимость и скорость.
- Prefill (контекстный проход): модель «проглатывает» весь контекст и подготавливает внутреннее состояние.
- Декодирование: итеративное порождение новых токенов до условия остановки (максимум длины, специальный токен, критерий).
- Пост-обработка: приведение к нужному формату, проверка схем, фильтры безопасности.
- Логирование: промт, версия модели, расходы, метрики, идентификаторы источников.
Режимы декодирования: качество ↔ разнообразие ↔ скорость
| Режим | Идея | Плюсы | Минусы | Где уместен |
| 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 — соответствие ответа предоставленным источникам.
