Контекст растёт, KV-кэш - нет: Qwen3.8-27B на ограниченной VRAM в формате CMF
Экспериментальный режим O(1) в формате CMF позволяет запускать Qwen3.8-27B на видеокартах с ограниченным объёмом памяти, не увеличивая размер состояния полного attention пропорционально длине контекста. В 16 слоях с обычным вниманием растущий KV-кэш заменяется компактным состоянием фиксированного размера - около 44,1 МиБ. Для контекста длиной 64K это сопоставимо примерно с 4 ГиБ FP16 KV-кэша.
Однако технология имеет важную оговорку: дальний контекст восстанавливается приближённо. Модель изначально обучалась для работы с обычным attention, поэтому CMF не является полностью эквивалентной заменой классического KV-кэша.
Как устроен CMF
Qwen3.8-27B представляет собой гибридную архитектуру из 64 слоёв. В неё входят 48 слоёв Gated DeltaNet с рекуррентным состоянием и 16 слоёв полного attention. Именно последние обычно требуют KV-кэш, размер которого растёт вместе с числом обработанных токенов.
В CMF предусмотрен экспериментальный O(1)-режим. Он хранит свежие токены в подробном виде, начало последовательности - в небольшом наборе sink-токенов, а удалённую часть контекста представляет набором опорных состояний. По мере обработки текста эти состояния обновляются, но их общий объём остаётся постоянным.
Принцип можно сравнить с бухгалтерской сводкой. Вместо хранения каждой операции за весь период система поддерживает компактные показатели, которые постоянно уточняются. Новые данные влияют на уже существующую структуру, поэтому для продолжения диалога не требуется сохранять всю историю в исходном виде.
Подробное описание подхода и практические параметры запуска приведены в материале о том, как работает CMF-формат для больших языковых моделей.
Что запускается
Для эксперимента используется файл `qwen38-27b-q4tp.cmf` с 4-битными весами Q4TP. Его размер составляет 14 271 151 208 байт - около 14,3 ГБ в десятичной системе. Готовая модель опубликована в репозитории на Hugging Face.
Режим O(1) включается флагом `--o1` при запуске готового CMF-файла. При необходимости его можно указать и во время конвертации:
```bash
cortiq convert --o1
```
Такая операция не меняет сами веса и не требует дообучения. В заголовок файла записывается подсказка, а окончательное решение о включении режима принимает рантайм.
Сравнение расхода памяти
Ниже учитывается только состояние полного attention, без весов модели, рабочих буферов и прочих выделений памяти. Для обычного запуска берётся документированный FP16 KV-кэш. Квантизация весов Q4 не означает автоматическую квантизацию KV-кэша.
| Контекст | FP16 KV-кэш | CMF O(1) | Преимущество |
|---:|---:|---:|---:|
| 2 048 | 128 МиБ | 44,1 МиБ | 2,9× |
| 4 096 | 256 МиБ | 44,1 МиБ | 5,8× |
| 8 192 | 512 МиБ | 44,1 МиБ | 11,6× |
| 16 384 | 1 ГиБ | 44,1 МиБ | 23,2× |
| 32 768 | 2 ГиБ | 44,1 МиБ | 46,4× |
| 65 536 | 4 ГиБ | 44,1 МиБ | 92,9× |
| 131 072 | 8 ГиБ | 44,1 МиБ | 185,8× |
| 262 144 | 16 ГиБ | 44,1 МиБ | 371,6× |
В расчётах используется 1 МиБ = 2²⁰ байт и 1 ГиБ = 2³⁰ байт. Для CMF приведено фактическое значение 46 236 672 байта, или 44,0947 МиБ. Это одна GPU-копия состояния attention, а не объём памяти, необходимый для всей модели.
Обычный KV-кэш Qwen3.8-27B можно оценить по формуле:
```text
128 КиБ × число токенов
```
Для 65 536 токенов получается около 4 ГиБ в FP16. Если хранить точное состояние в FP32, объём будет вдвое больше - 131 072 байта на токен.
Как запустить модель на Linux
Практический сценарий для Linux с Vulkan включает несколько шагов. Сначала устанавливается готовый бинарник релиза либо собирается рантайм через Cargo. Затем загружается CMF-файл, проверяется доступность видеокарты и запускается модель с параметром O(1).
Типовая схема выглядит так:
```bash
cortiq run qwen38-27b-q4tp.cmf --o1
```
Точные имена аргументов зависят от версии инструмента, поэтому перед запуском стоит проверить справку конкретной сборки. При работе через Vulkan важно убедиться, что драйвер корректно видит нужный GPU, а приложение не переключилось на программный рендеринг.
Для серверного режима обычно дополнительно задаются адрес, порт, максимальный размер контекста и число слоёв, выгружаемых на GPU. Даже при фиксированном CMF-состоянии общая потребность в памяти остаётся выше 44,1 МиБ: необходимо учитывать 14,3 ГБ весов, временные буферы, состояние GDN, загрузку Vulkan и память префилла.
Именно поэтому вопрос, как запустить LLM на видеокарте с ограниченной VRAM, нельзя сводить только к размеру KV-кэша. CMF сокращает одну из наиболее быстро растущих составляющих, но не устраняет требования к размещению самой модели.
Производительность и ограничения
Режим O(1) не означает постоянное время обработки. Размер состояния остаётся фиксированным, но обработка входного текста по-прежнему зависит от количества токенов. Особенно заметно это на длинном префилле: первый ответ после загрузки большого запроса может формироваться медленнее, чем при обычном внимании.
Для проверки скорости используется команда `bench`. Она позволяет отдельно измерить обработку входа и генерацию новых токенов. При сравнении необходимо применять одинаковые параметры: длину контекста, размер батча, тип устройства и настройки выгрузки слоёв.
Главное ограничение связано с точностью дальнего контекста. Недавние фрагменты сохраняются лучше, тогда как сведения из начала очень длинного запроса могут восстанавливаться с ошибками. Это особенно важно для юридических документов, больших исходных кодов, технических спецификаций и задач, где требуется дословно найти редкий факт.
Поэтому Qwen3.8-27B контекст 64K без KV-кэша - это не магическое увеличение памяти, а компромисс между вместимостью и точностью. Для диалогов, суммаризации и задач, где важна общая нить рассуждения, такой режим может быть практичным. Для строгого поиска конкретной строки в далёком фрагменте обычный KV-кэш остаётся более надёжным.
Итог
CMF предлагает альтернативный способ работы с длинным контекстом: вместо линейно растущего KV-кэша используется компактное состояние фиксированного размера. Для Qwen3.8-27B это особенно интересно из-за гибридной архитектуры, где только 16 из 64 слоёв используют полное внимание.
В результате Qwen3.8-27B оптимизация памяти и KV-кэша позволяет приблизить запуск большой модели к видеокартам класса 16 ГБ, хотя итоговые требования определяются не только состоянием attention. Важно учитывать веса, рекуррентное состояние GDN, буферы и накладные расходы драйвера.
Для экспериментов с ограниченной VRAM CMF выглядит перспективно: он позволяет удерживать длинный контекст без пропорционального роста памяти. Но текущая реализация остаётся приближённой, поэтому перед практическим применением необходимо проверять качество ответов на собственных данных.


