Генеративный AI

Inference Optimization

2023 год. Запустить LLaMA-65B на одном GPU A100 - невозможно, 130GB не влезают. 2024 год. vLLM + AWQ квантование + PagedAttention: 70B модель на одном A100 80GB, 100+ токенов в секунду, очередь из 100 параллельных запросов. Это не трюк - это engineering. Понимание inference optimization - разница между LLM на бумаге и LLM в production.

  • **Groq**: специализированный LPU (Language Processing Unit) достигает 800+ токенов/сек на LLaMA-3-70B через аппаратную оптимизацию memory bandwidth. Демонстрирует что производительность - архитектурная задача.
  • **Anthropic Prompt Caching**: 90% скидка на кэшированные токены. Компании с длинными system prompts (юридические документы, code context) экономят тысячи долларов в день.
  • **Ollama**: запускает квантованные GGUF модели на MacBook. LLaMA-3-8B на M2 Pro: 60-80 токенов/сек через Metal. Inference optimization сделал локальные LLM реальностью.

Предварительные знания

  • Prompt Engineering

FlashAttention и волна inference-оптимизаций

В 2022 году Tri Dao и коллеги из Стэнфорда представили FlashAttention - алгоритм attention, который не материализует огромную матрицу внимания в медленной памяти GPU, а считает её блоками в быстрой SRAM. Результат: кратное ускорение и экономия памяти без потери точности. Это запустило волну inference-оптимизаций. Квантизация GPTQ (2022) и AWQ (2023) научились сжимать веса до 4 бит почти без деградации. Speculative decoding (Leviathan et al., Google, 2023) ускорил генерацию, угадывая токены маленькой моделью и проверяя их большой. Вместе с KV-кэшем эти приёмы превратили запуск больших моделей из роскоши датацентров в нечто доступное на одном GPU.

Quantization: меньше бит - быстрее и дешевле

LLaMA-3-70B в float32 весит 280 GB - не влезает даже в 4 A100 80GB. В float16 / bfloat16 - 140 GB (2 GPU). В int8 - 70 GB (1 GPU). В int4 - 35 GB (половина GPU). Квантование сжимает веса модели, уменьшая разрядность числового представления с минимальной потерей качества.

**Post-Training Quantization (PTQ)** vs **Quantization-Aware Training (QAT)**: PTQ квантует уже обученную модель (быстро, но теряет больше). QAT встраивает квантование в процесс fine-tuning (медленнее, но точнее). **AWQ (Activation-aware Weight Quantization)** - PTQ метод от MIT, учитывающий важность весов через статистику активаций. Один из лучших INT4 методов для LLM.

**GGUF формат (llama.cpp)**: portable формат квантованных моделей. Поддерживает Q2_K до Q8_0 - разные уровни квантования. GGUF файлы публикуются на HuggingFace (TheBloke, bartowski). Работает на CPU, Apple Silicon (Metal), CUDA без установки сложных зависимостей.

INT4 квантование снижает размер модели в 8x по сравнению с FP32. Как это влияет на скорость инференса на GPU?

Speculative Decoding: быстрая маленькая + точная большая

Авторегрессионная генерация - один токен за раз - принципиально последовательная. GPU не помогает параллелизировать. **Speculative Decoding** (Google DeepMind, 2023): маленькая быстрая модель (draft model) генерирует K токенов за раз, большая точная модель (target) верифицирует все K параллельно. Если draft угадал - принимаем K токенов вместо одного.

**Когда speculative decoding работает лучше**: задачи с предсказуемым выводом (заполнение кода, форматированный текст, перевод). **Когда хуже**: творческое письмо, высокая температура, длинные рассуждения где каждый токен непредсказуем. vLLM и TGI поддерживают speculative decoding из коробки.

Гарантирует ли speculative decoding идентичный результат с обычной генерацией target модели?

Batching: GPU должен быть занят

GPU эффективен при параллельных вычислениях. Обработка одного запроса оставляет большинство CUDA ядер простаивающими. **Static batching**: группировать несколько запросов и обрабатывать вместе. Проблема: разные запросы имеют разную длину, нужно padding до максимальной - неэффективно.

**Chunked prefill**: длинный prompt разбивается на чанки, которые обрабатываются вместе с decode-шагами других запросов. Уменьшает time-to-first-token (TTFT) для длинных промптов без потери throughput. Реализовано в vLLM 0.4+ и последних версиях TGI.

**Метрики производительности LLM serving**: TTFT (time-to-first-token) - latency до первого токена. TBT (time-between-tokens) - скорость streaming. Throughput - токенов/сек суммарно. P50/P99 latency. Для chat-приложений важен TTFT и TBT. Для batch-обработки - throughput.

Почему continuous batching даёт в 10-20x больший throughput по сравнению со static batching?

KV-Cache: не пересчитывать уже посчитанное

При каждом шаге генерации трансформер пересчитывает key-value векторы для всех предыдущих токенов. Для промпта в 10 000 токенов - это 10 000 умножений матриц на каждый новый токен. **KV-Cache** кэширует эти векторы: вычислили один раз, используем на всех последующих шагах.

**PagedAttention (vLLM)**: KV-cache растёт динамически и сложно предсказать заранее сколько памяти нужно. PagedAttention хранит KV-cache в страницах фиксированного размера (как виртуальная память ОС). Позволяет эффективно шарить KV-cache между несколькими запросами с одинаковым prefix (например, одинаковый system prompt).

**Prefix Caching (Prompt Caching)**: Anthropic (Claude), OpenAI (GPT-4o) и vLLM поддерживают кэширование промптов между запросами. Один и тот же system prompt в 10 000 токенов вычисляется один раз - последующие запросы экономят до 90% стоимости prefill. Anthropic даёт скидку 90% на кэшированные токены.

Оптимизация инференса - это только про выбор правильного batch size

Оптимизация инференса - это стек решений: квантование (память), speculative decoding (latency), continuous batching (throughput), KV-cache (эффективность attention). Каждый уровень независим и кумулятивен

vLLM применяет все четыре техники одновременно: PagedAttention (KV-cache), continuous batching, квантование через bitsandbytes/AWQ, speculative decoding опционально. Комбинация даёт 10-30x улучшение по сравнению с наивной реализацией.

Почему KV-Cache резко увеличивается при работе с длинными контекстами (128K+ токенов)?

Ключевые идеи

  • **Quantization**: INT8 экономит 2x памяти с <1% потерей качества. INT4 (NF4, AWQ, GGUF) - 4x при 2-5% потере. Выбор определяется доступным железом и требованиями к качеству.
  • **Speculative Decoding**: draft модель генерирует K токенов, target верифицирует параллельно. 2-3x speedup на предсказуемых задачах, идентичное качество target модели.
  • **Continuous Batching**: новые запросы добавляются немедленно по мере завершения предыдущих. GPU утилизация 90%+ против 50-60% у static batching.
  • **KV-Cache**: ключи и значения attention кэшируются между шагами генерации. PagedAttention (vLLM) управляет кэшем как виртуальной памятью. Prefix Caching экономит 90% стоимости общих промптов.
  • **vLLM** объединяет все техники: PagedAttention + continuous batching + quantization + speculative decoding. Стандарт для production LLM serving.

Связанные темы

Inference optimization строится на понимании архитектуры моделей:

  • Serving LLM: vLLM, TGI — vLLM и TGI реализуют все рассмотренные техники оптимизации в production-ready serving системах
  • Fine-Tuning: SFT, LoRA, QLoRA — QLoRA использует NF4 квантование при обучении. Те же принципы квантования применяются и при инференсе

Вопросы для размышления

  • Quantization теряет точность. Как определить приемлемый уровень деградации для конкретной production задачи - что мерить и как?
  • KV-Cache занимает память пропорционально длине контекста. При обработке 1000 параллельных запросов с 32K контекстом - сколько GPU нужно только под кэш для LLaMA-3-70B?
  • Speculative decoding требует draft model, которая должна часто угадывать правильно. Как выбрать draft model - какие метрики acceptance rate приемлемы?

Связанные уроки

  • gai-18 — Системы с множеством агентов делают цену инференса критичной
  • gai-20 — Оптимизации питают инфраструктуру обслуживания
  • aie-28-caching-optimization — Продакшен-кэширование и техники оптимизации
  • dl-19 — Квантизация - техника сжатия в глубоком обучении
  • ml-46-model-serving — Оптимизация обслуживания - задача деплоя модели
  • dl-01
Inference Optimization

0

1

Войти