Как работают современные long-context LLM (GPT-4 1M, Claude 200k, Gemini 2M)?

Краткий тезис

Современные long-context LLM преодолевают квадратичную сложность self-attention и огромный размер KV cache с помощью комбинации архитектурных инноваций: RoPE для экстраполяции позиций, sliding window attention, группированных KV-голов (GQA/MQA), квантования и прунинга кэша, а также рекуррентных механизмов вроде Infini-attention. Эти методы позволяют обрабатывать контексты до 2M токенов, но с компромиссами по качеству и стоимости. Понимание этих техник критично для проектирования Agentic RAG и выбора модели под задачу.


1. Проблема длинного контекста: квадратичная сложность и память

Self-attention в трансформерах имеет сложность O(n²) по времени и памяти, где n — длина последовательности. Для n=1M токенов attention|полное внимание потребовало бы 10¹² операций — непрактично. Кроме того, KV cache (кэш ключей и значений для каждого слоя и головы) растёт линейно с n. Для 70B модели с 80 слоями, 8 KV-головами (GQA), размером головы 128 и точностью fp16:

KV cache ≈ n * d_kv * layers * 2 * 2 байта
          = 1e6 * (8*128) * 80 * 2 * 2 ≈ 327 GB

Это превышает память даже топовых GPU (H100 — 80 GB). Поэтому необходимы методы сжатия и аппроксимации.


2. RoPE (Rotary Position Embeddings) и экстраполяция

RoPE — это метод позиционного кодирования, который вращает пары координат эмбеддингов на угол, пропорциональный позиции токена. Ключевое свойство: относительное внимание между токенами зависит только от разности их позиций, а не от абсолютных значений. Это позволяет модели экстраполировать на длины, превышающие training length, без дополнительного обучения.

  • NTK-aware scaling и YaRN — улучшенные варианты, которые масштабируют частоты вращения, сохраняя локальную структуру внимания.
  • Благодаря RoPE модели (GPT-4, Claude, Gemini) могут обрабатывать контексты в 10-100 раз длиннее, чем на этапе обучения, с минимальной деградацией.

3. Sliding Window Attention (Mistral, Longformer)

Sliding window attention ограничивает область внимания каждого токена окном фиксированного размера W (например, 4096 токенов). Сложность падает до O(n·W) — линейная по n.

  • Плюсы: низкое потребление памяти, возможность обрабатывать произвольно длинные последовательности.
  • Минусы: потеря дальних зависимостей. Для компенсации используют global attention (несколько токенов видят весь контекст) или stacked windows (несколько слоёв с разными окнами).
  • Mistral 7B использует sliding window с W=4096 и достигает качества, близкого к полному attention, на задачах с длинным контекстом.

4. KV Cache Compression: GQA и MQA

Multi-Query Attention (MQA) и Grouped Query Attention (GQA) уменьшают размер KV cache за счёт разделения голов запроса (Q) и ключей/значений (K,V).

ТипЧисло Q-головЧисло KV-головРазмер KV cache (относительно MHA)
MHAhh1x (базовый)
GQAhg (g < h)g/h
MQAh11/h
  • MQA (одна KV-голова на все Q-головы) даёт максимальное сжатие, но может снижать качество.
  • GQA — компромисс: группирует Q-головы, каждая группа разделяет одну KV-голову. Используется в LLaMA 2/3, GPT-4 (предположительно).
  • Результат: для 70B модели с GQA (8 KV-голов) KV cache уменьшается в 12-16 раз по сравнению с MHA.

5. KV Cache Quantization и Pruning

Квантование KV cache до INT4/INT8 снижает занимаемую память в 2-4 раза с незначительной потерей точности. Техники:

  • Per-token quantization — адаптивные масштабы для каждого токена.
  • KIVI — квантование ключей и значений с учётом распределения.

Прунинг внимания (attention pruning) удаляет из KV cache токены, которые считаются неважными для будущих шагов. Примеры:

  • H2O (Heavy-Hitter Oracle) — сохраняет только токены с наибольшими оценками внимания.
  • StreamingLLM — держит начальные токены (как «якоря») и последние, остальные отбрасывает.
  • Scissorhands — использует эвристики на основе нормы скрытых состояний.

Эти методы позволяют удерживать KV cache в пределах десятков GB даже для миллионов токенов.


6. Infini-attention (Google) и рекуррентные механизмы

Infini-attention (Google, 2024) добавляет к обычному attention рекуррентную память. Каждый слой имеет два пути:

  • Текущее внимание — стандартное masked attention на окне.
  • Рекуррентная память — сжатое представление всего предыдущего контекста через нейронную память (например, линейное внимание или компрессия через MLP).

На каждом шаге модель обновляет скрытое состояние памяти, которое затем используется как дополнительный контекст. Это позволяет обрабатывать контексты длиной до 2M токенов (Gemini 2M) без квадратичного роста, жертвуя лишь частью точности на очень дальних зависимостях.


7. Сравнение моделей: GPT-4 1M, Claude 200k, Gemini 2M

МодельМакс. контекстИзвестные/предполагаемые техники
GPT-4 Turbo (1M)1M токеновGQA, RoPE с NTK-scaling, sliding window + sparse attention, KV cache quantization
Claude 3.5 Sonnet (200k)200k токеновRoPE, вероятно, GQA + pruning, специальная архитектура (Anthropic не раскрывает)
Gemini 1.5 Pro (2M)2M токеновInfini-attention, MoE, RoPE, GQA, квантование

Важно: точные архитектуры закрыты, но на основе публикаций и бенчмарков можно сделать обоснованные предположения.


8. Практические ограничения и компромиссы

Даже с оптимизациями, long-context LLM имеют недостатки:

  • Lost in the middle — качество ответа падает, если релевантная информация находится в середине контекста.
  • Стоимость — обработка 1M токенов требует ~1000 раз больше FLOPs, чем 4k, что дорого.
  • Качество на очень длинных контекстах — модели часто хуже справляются с задачами, требующими точного извлечения информации из середины.
  • Задержка — генерация первого токена может занимать секунды из-за большого KV cache.

Поэтому RAG (retrieval-augmented generation) остаётся эффективной альтернативой для многих сценариев, несмотря на прогресс long-context.


9. Будущее long-context LLM

  • Линейное внимание (Mamba, RWKV) — полностью избавляется от квадратичной сложности, но пока уступает трансформерам в качестве на сложных задачах.
  • Гибридные модели — комбинация трансформера с рекуррентными блоками (например, Griffin, H3).
  • Улучшенные позиционные кодировки — например, ALiBi (Attention with Linear Biases) или xPos.
  • Аппаратные ускорители — специализированные чипы для attention (Groq, Cerebras) могут сделать длинные контексты дешевле.

Пет-проект для закрепления

Задача: Реализовать sliding window attention и сравнить его с полным attention на задаче извлечения информации из длинного текста.

Инструменты: Python, PyTorch, Hugging Face Transformers (GPT-2 или TinyLlama), библиотека для бенчмаркинга (time, memory_profiler).

Шаги:

  1. Загрузите предобученную модель (например, GPT-2) и замените её attention на кастомный слой с sliding window (окно 512 токенов).
  2. Создайте синтетический датасет: длинные тексты (10k токенов) с «иголкой» — фактом, спрятанным в случайной позиции.
  3. Замерьте время инференса и пиковое потребление памяти для полного attention и sliding window.
  4. Оцените точность извлечения иголки (accuracy) для обеих версий при разной длине контекста.
  5. Постройте графики зависимости точности и ресурсов от длины контекста.

Ожидаемый результат: Вы увидите, что sliding window даёт линейный рост памяти и времени, но точность падает, когда иголка находится за пределами окна. Это наглядно демонстрирует trade-off long-context техник.


Связь с другими вопросами

ВопросТема
625Архитектура Agentic RAG
627RAG vs long-context LLM
628Эффективность long-context моделей
629Lost in the middle и методы борьбы
630KV cache management и оптимизация
631Сравнение современных LLM по длине контекста

Навигация