Инференс, стоимость и задержка генеративной модели
Inference — выполнение обученной модели для нового запроса. Пользователь видит единый ответ, но система проходит токенизацию, prefill входа, последовательный decode, сетевую…
Краткий ответ
Inference — выполнение обученной модели для нового запроса. Пользователь видит единый ответ, но система проходит токенизацию, prefill входа, последовательный decode, сетевую передачу и постобработку.
Inference — выполнение обученной модели для нового запроса. Пользователь видит единый ответ, но система проходит токенизацию, prefill входа, последовательный decode, сетевую передачу и постобработку. Стоимость и latency определяются не только числом параметров.
Prefill и decode
На prefill модель обрабатывает входные токены параллельно и строит key-value cache для attention. Длинный документ увеличивает time to first token и память. На decode каждый новый токен использует кеш предыдущих позиций, но генерируется последовательно, поэтому длинный ответ увеличивает время почти шаг за шагом.
Различайте latency первого токена, скорость tokens per second и полную latency. Streaming улучшает ощущение отклика, но не уменьшает момент, когда весь результат готов.
KV-cache и память
Для каждого слоя и положения сохраняются keys и values. KV-cache ускоряет продолжение, избегая полного пересчёта прошлого, но растёт с batch, контекстом, слоями и размерностью. При большом числе одновременных запросов именно кеш, а не веса, способен стать ограничением.
PagedAttention применяет идею страничной памяти для уменьшения фрагментации и совместного использования блоков кеша. Это оптимизация сервинга; она не меняет знания и не гарантирует одинаковый выигрыш на любом оборудовании и профиле нагрузки.
Batch, throughput и очереди
Объединение запросов повышает загрузку ускорителя и throughput, но ожидание batch может увеличить latency отдельного пользователя. Continuous batching добавляет и удаляет последовательности по мере генерации. Планировщик балансирует длины, приоритеты и fairness.
Средняя latency скрывает хвосты. Для SLA важны p95 и p99, поведение при пике и тайм-ауты зависимостей. Один очень длинный ответ может влиять на соседей, если планирование не изолирует нагрузку.
Квантование и быстрый attention
Квантование хранит или вычисляет веса с меньшей точностью, снижая память и иногда ускоряя матричные операции. Выигрыш зависит от поддержки специализированных ядер вычислений; качество нужно измерять на задаче. «Четырёхбитная модель» не означает, что все операции и активации всегда четырёхбитные.
FlashAttention вычисляет точный attention блоками и уменьшает обмен между уровнями GPU memory. Он не делает математическую сложность обычного attention линейной, но существенно улучшает фактическое время и память в поддерживаемых режимах.
Управление стоимостью на уровне продукта
- Ограничивайте вход релевантными chunks вместо передачи архива.
- Задавайте максимальную длину ответа и раннюю остановку.
- Кешируйте безопасные детерминированные результаты с версией модели и прав доступа.
- Используйте меньшую модель для маршрутизации, но проверяйте ошибку выбора.
- Считайте стоимость всего конвейера: embeddings, reranker, tools, retries и human review.
- Отслеживайте стоимость успешной пользовательской задачи, а не только миллиона токенов.
Упражнение: бюджет одного запроса
Сравните два варианта. A: 12 000 входных и 1 000 выходных токенов без retrieval. B: поиск по индексу, 2 500 входных и 600 выходных токенов плюс embedding и reranker. Выпишите денежные и latency-компоненты, не придумывая конкретных тарифов.
Затем добавьте 100 одновременных пользователей. Объясните, почему оптимальный одиночный запрос может дать плохой p99 и почему нужно нагрузочное тестирование с реальным распределением длин.
Частые вопросы
Ответ вдвое длиннее всегда стоит вдвое дороже?
Токенная часть decode примерно растёт с длиной, но тарифы, кеширование, постоянные накладные расходы и инструменты меняют итог. Проверяйте модель расчёта конкретного сервиса.
Streaming ускоряет модель?
Обычно он раньше показывает первые токены и улучшает perceived latency. Полное вычисление может занимать столько же времени.
Большая context window бесплатна, если её не заполнять?
Заявленный максимум сам по себе не требует обработки всех позиций, но архитектура и резервирование могут влиять на сервис. Главная стоимость конкретного запроса связана с фактически обработанными токенами и реализацией.
Что важно запомнить
- Prefill обрабатывает вход, decode последовательно создаёт выход.
- KV-cache ускоряет decode, но потребляет память пропорционально активным последовательностям.
- FlashAttention, PagedAttention, batching и квантование решают разные узкие места.
- Оптимизируйте p95/p99 и стоимость решённой задачи, а не одну лабораторную цифру.
https://yadro-code.ru/lessons/without-university/generative-ai-foundations/generative-ai-15