Инференс и KV-Cache
Как LLM генерирует текст
Проблема: Ты пишешь вопрос, а ИИ выдаёт готовый ответ. Но как он на самом деле «думает» и создаёт текст? Неужели у него есть весь ответ заранее?
Решение: Печатная машинка с блокнотом
Представь старую печатную машинку, которая умеет печатать только по одной букве. Но рядом лежит блокнот с заметками о том, «что обычно идёт дальше». Настройки вроде температуры управляют тем, насколько смелым будет каждый выбор.
LLM не генерирует предложения целиком. Трансформер создаёт текст токен за токеном (слово или часть слова). Каждый новый токен зависит от всех предыдущих. Чтобы не пересчитывать прошлые токены, модели используют KV-кеш.
Представьте это как печатную машинку с блокнотом:
- 1. Ты вводишь: «Столица Франции —»
- 2. Смотрит на ВЕСЬ предыдущий текст: Машинка смотрит на ВЕСЬ предыдущий текст
- 3. Проверяет блокнот: После такой фразы часто идёт слово "Париж"
- 4. Печатает: «Париж»
- 5. Теперь смотрит на: «Столица Франции — Париж»
- 6. Решает, что дальше: Может точка, или «, который известен...»
Этот процесс называется инференс (inference) — модель «выводит», какое слово должно быть следующим.
Где это используется?
- ChatGPT/Claude: каждый ответ генерируется слово за словом (поэтому ты видишь, как текст появляется постепенно)
- Автодополнение кода: GitHub Copilot предсказывает следующую строку
- Перевод: модели переводят по одному слову за раз
- Суммаризация: краткое изложение строится по частям
Интересный факт: GPT-4 генерирует около 50-100 токенов в секунду. Каждый токен требует миллиарды вычислений! Вот почему нужны мощные видеокарты — они делают тысячи операций параллельно.
Попробуйте сами!
Ниже — интерактивная визуализация. Посмотри, как модель генерирует текст токен за токеном, учитывая весь предыдущий контекст!
Посмотри, как LLM обрабатывает промпт и генерирует ответ. KV-Cache критичен для эффективной генерации!
Представь, что ты читаешь книгу и делаешь заметки:
- ✗Без кеша: Каждый раз перечитываешь ВСЮ книгу с начала
- ✓С кешем: Смотришь в свои заметки — быстро и эффективно
Кеш пуст
Как заметки в блокноте — хранит "конспекты" предыдущих токенов, чтобы модель не перечитывала всё заново
Что такое K и V?
- KKey — "О чём этот токен?" (краткое описание)
- VValue — "Что важного?" (полезная информация)
Прежде чем сгенерировать первое слово, модель должна прочитать и «понять» весь ваш промпт — целиком. Это называется prefill, и занимает основное время. После этого каждое новое слово генерируется быстро: модель просто смотрит в свои записи (KV-Cache) вместо того, чтобы перечитывать всё заново.
KV-Cache меняет память на скорость. K/V векторы каждого токена (~1MB на токен для больших моделей) остаются в памяти. Это ограничивает длину контекста — 128K контекст = ~128GB KV-Cache!
Попробуй сам
Интерактивное демо этой техники
Получить ответ да/нет на простой вопрос
Да, Python является интерпретируемым языком программирования. Это означает, что код Python выполняется построчно интерпретатором, а не компилируется целиком в машинный код перед выполнением. Однако технически Python сначала компилируется в байт-код (.pyc файлы), который затем выполняется виртуальной машиной Python (CPython). Существуют также JIT-компиляторы... [продолжение на 500 слов]
Да.
Инференс авторегрессивен: каждый токен генерируется последовательно. Уменьшив max_tokens с 4096 до 10 и указав формат, мы ускорили ответ в 18 раз без потери качества.
Создайте бесплатный аккаунт для решения челленджей
4 челленджей с AI-проверкой для этого урока
Этот урок — часть структурированного курса по LLM.
Мой путь обучения