Контекст и производительность

Миллион токенов: сколько памяти занимает длинный контекст

Практический расчет KV-кэша, различия MHA, GQA и MLA, а также цена нескольких длинных запросов одновременно.

7 мин чтенияОбновлено 6 октября 2026
Иллюстрация к материалу

Контекст в миллион токенов меняет требования к серверу даже при неизменных весах модели. В памяти сохраняется состояние прочитанного текста, а перед первым ответом нужно обработать весь вход. Разберем отдельный бюджет KV-кэша и проверку нагрузки. Миллион здесь означает 1 000 000 токенов; это учебный сценарий, а не подтвержденный предел любой модели.

KV / MEMORY LAB

Сколько памяти занимает контекст?

Учебный расчёт обычного full-attention KV-кэша: MHA, GQA или MQA. Начальные параметры — пример, а не профиль модели из каталога.

Вход + уже сгенерированные токены. Каждый запрос имеет такую длину; общего префикса в расчёте нет.

Только KV-кэш, суммарно327,68 GB≈ 305,18 GiB

2 × слои × KV-головы × размерность × байты × токены × запросы

GB = 10⁹ байт · GiB = 2³⁰ байт. FP8/INT8 учитывает 1 байт на значение без метаданных квантования; поддержку проверяют отдельно.

Не включает веса, активации, CUDA graphs, буферы и накладные расходы. Не рассчитывает MLA, сжатый, sliding-window или гибридный кэш. Возможность контекста 1 млн токенов отдельно проверяется для модели и движка.

1. Сначала проверьте, какой контекст действительно поддерживается

Найдите предел контекста в карточке конкретной модели и рецепте запуска. Учитывайте точную версию, токенизатор, позиционное кодирование и требования среды исполнения. Увеличение одного параметра длины не доказывает, что модель надежно использует весь документ. Проверяйте поиск фактов в начале, середине и конце, сопоставление удаленных фрагментов и качество итогового ответа.

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

2. Посчитайте KV отдельно от весов

Для обычного полного внимания с одинаковыми K/V-размерностями базовая оценка в байтах: 2 × число слоев × число KV-голов × размер головы × байт на значение × сумма длин активных последовательностей. Двойка учитывает ключи и значения. Это объем полезных тензоров без весов, выравнивания, метаданных и рабочих буферов.

Пример: 80 слоев, 8 KV-голов, размер головы 128 и BF16 по 2 байта. Один запрос с миллионом сохраненных токенов требует около 327,68 GB, или 305,18 GiB, только для KV. Таблица меняет число KV-голов при прочих равных; она не описывает конкретный чекпойнт и не подтверждает поддержку миллиона токенов.

Схема примераKV-головKV для 1 млн токенов
MHA642621,44 GB
GQA8327,68 GB
MQA140,96 GB

3. Используйте формулу своей архитектуры

MHA сохраняет отдельные ключи и значения для голов внимания. GQA делит KV между группами голов запросов; MQA использует одну общую KV-голову. Поэтому число query-heads нельзя автоматически подставлять вместо KV-heads. Нужные значения берите из конфигурации модели, а не из общего числа параметров.

MLA, применяемое в DeepSeek-V3, хранит сжатое латентное представление и требует другого расчета с учетом реализации кэша. Sliding-window ограничивает историю только в соответствующих слоях; смешанная архитектура рассчитывается послойно. Квантование весов не означает квантования KV. Если меняется точность кэша, отдельно проверяются поддержка, служебные расходы и качество.

4. Считайте активные последовательности, а не пользователей

Четыре независимых запроса по миллиону токенов в примере GQA дают 1310,72 GB KV до добавления весов. Но сто зарегистрированных пользователей не означают сто таких запросов одновременно: важны очередь и число выполняемых последовательностей. Для разной длины складывайте фактические размеры, включая уже сгенерированные токены.

Размер пакета планировщика и максимальная длина контекста — разные ограничения. Chunked prefill обрабатывает длинный вход частями, помогая совместить его с текущими ответами; он не устраняет весь сохраненный KV. Повторяемый префикс может переиспользоваться поддерживающим это движком, но экономию нельзя заранее распространять на независимые документы.

5. Измерьте первый ответ и работу под нагрузкой

Проведите отдельные прогоны с холодным кэшем и повторяемым префиксом. Запишите время до первого токена, скорость продолжения ответа, пиковую память каждого GPU и случаи вытеснения или повторного вычисления. Добавьте короткие запросы одновременно с длинным: приемлемая скорость одного документа еще не гарантирует отзывчивость сервиса.

Если бюджет не сходится, сравните сокращение входа, поиск нужных фрагментов, меньшую параллельность и поддерживаемые способы сжатия кэша. Перенос в CPU RAM меняет задержки и нагрузку на межсоединение. Выберите вариант по качеству и времени выполнения своей задачи, сохранив конфигурацию теста для повторения.

Поддержка длинного контекста, достаточная память и полезная скорость — три отдельные проверки. Расчет KV помогает определить первую конфигурацию для испытания.

Чек-лист

Перед тестом на миллион токенов

Источники и документация

Материалы помогают подготовить требования. Точная конфигурация и условия фиксируются в предложении.