Контекст в миллион токенов меняет требования к серверу даже при неизменных весах модели. В памяти сохраняется состояние прочитанного текста, а перед первым ответом нужно обработать весь вход. Разберем отдельный бюджет KV-кэша и проверку нагрузки. Миллион здесь означает 1 000 000 токенов; это учебный сценарий, а не подтвержденный предел любой модели.
Сколько памяти занимает контекст?
Учебный расчёт обычного full-attention KV-кэша: MHA, GQA или MQA. Начальные параметры — пример, а не профиль модели из каталога.
Вход + уже сгенерированные токены. Каждый запрос имеет такую длину; общего префикса в расчёте нет.
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 млн токенов |
|---|---|---|
| MHA | 64 | 2621,44 GB |
| GQA | 8 | 327,68 GB |
| MQA | 1 | 40,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 помогает определить первую конфигурацию для испытания.
Перед тестом на миллион токенов
Источники и документация
- Hugging Face: How caching works ↗
- GQA: original research paper ↗
- DeepSeek-V3 Technical Report: MLA ↗
- Hugging Face: Cache strategies ↗
- vLLM: Optimization and Tuning ↗
- vLLM: Automatic Prefix Caching ↗
Материалы помогают подготовить требования. Точная конфигурация и условия фиксируются в предложении.
