Как оптимизировать инференс языковых моделей: от архитектуры до vLLM

Stanford Online 30,1 тыс. 1 ч 22 мин 3 мин 19.05.2025
Главное

Искусство эффективности: как оптимизировать инференс языковых моделей 0:05

Инференс (процесс генерации ответов уже обученной моделью) перестал быть просто технической задачей «демо-версии чат-бота». Сегодня это фундамент работы любых LLM-продуктов — от автодополнения кода в Cursor до обработки больших массивов данных в пакетном режиме, а также критическая часть обучения с подкреплением (RL). Поскольку обучение модели — это разовая инвестиция, а инференс — повторяющаяся, именно он определяет экономическую эффективность развертывания нейросетей в реальном мире.

🛠 Метрики и математика инференса 3:10

Понимание того, почему генерация «медленная», начинается с анализа вычислительной сложности.

Основная сложность заключается в том, что в отличие от обучения, где можно параллельно обрабатывать все токены последовательности (используя всю мощь тензорных вычислений), инференс — процесс авторегрессионный. Генерация текущего токена зависит от всех предыдущих, что превращает задачу из «вычислительно ограниченной» (compute-bound) в «ограниченную памятью» (memory-bound). Арифметическая интенсивность (отношение операций к объему передачи данных) падает, из-за чего современные GPU, такие как H100, часто простаивают, ожидая данные из памяти.

🧠 Борьба за KV-кэш 16:06

Ключевой «пожиратель» памяти при инференсе — это KV-кэш (Key-Value Cache). Чтобы не пересчитывать одни и те же промежуточные значения для каждого нового токена, система кэширует ключи и значения для всех слоев и голов внимания. Поскольку инференс ограничен памятью, уменьшение размера этого кэша — прямой путь к ускорению.

Существует несколько подходов к решению этой проблемы:

  1. Group Query Attention (GQA): Компромисс между multi-head и multi-query attention. Мы уменьшаем количество ключей и значений, оставляя больше запросов (queries). Это снижает объем памяти и позволяет увеличивать размер батча.
  2. Multi-Head Latent (MLA): Предложенный командой DeepSeek подход, где вместо простого уменьшения количества голов значения проецируются в пространство меньшей размерности.
  3. Cross-Layer Attention (CLA): Совместное использование проекций ключей и значений между разными слоями трансформера, что позволяет еще сильнее сжать кэш.
  4. Local Attention (Локальное внимание): Ограничение окна внимания только прошлыми $K$ токенами. Это делает размер кэша константным, а не растущим вместе с длиной последовательности.

🚀 Радикальная архитектура и «шорткаты» 52:54

Помимо оптимизации трансформеров, ведутся поиски альтернатив, изначально спроектированных для быстрого инференса:

⚙️ Системная оптимизация 1:18:04

На уровне инфраструктуры решающую роль играют идеи из операционных систем:

💬 Цитаты

«Если это одна вещь, которую вы вынесете из этой лекции, — всё упирается в память ради скорости.»

«Inference — это deep topic. Это, на самом деле, тема, которая могла бы занять много лекций.»

👥 Спикер
📚 Упомянутые книги
🔗 Упомянутые сайты и проекты
📖 Термины
KV-кэш
Память, в которой хранятся промежуточные ключи и значения слоев внимания для ускорения генерации.
Авторегрессия
Процесс генерации, при котором каждый следующий токен зависит от всех предыдущих.
Arithmetic Intensity
Отношение числа арифметических операций к объему переданных данных.
Speculative Decoding
Метод, при котором маленькая модель делает быстрые предсказания, проверяемые большой моделью параллельно.
📊 Цифры
⚖️ Другая сторона
Искусственный интеллект LLM KV-кэш H100 vLLM DeepSeek