Когда в марте 2026 года Google опубликовала статью об алгоритме сжатия памяти для языковых моделей, рынок производителей памяти отреагировал паникой: акции Micron, SanDisk, Samsung, SK Hynix за |
||
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ Атаки на ИИ Внедрение ИИИИ теория Компьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Промпты. Генеративные запросы Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2026-08-16 11:31 Когда в марте 2026 года Google опубликовала статью об алгоритме сжатия памяти для языковых моделей, рынок производителей памяти отреагировал паникой: акции Micron, SanDisk, Samsung, SK Hynix за неделю потеряли почти 90 миллиардов долларов капитализации. Инвесторы решили, что если модели начнут тратить в разы меньше памяти, то и железо понадобится не в таких объёмах. Герой этой статьи — алгоритм TurboQuant. И хотя называть его революцией было бы преувеличением, штука действительно интересная, уже есть рабочие реализации, и если вы деплоите LLM в продакшн или просто гоняете модели локально, вам стоит разобраться, что из заявленного правда, а что нет. Чтобы понять, зачем нужен TurboQuant, нужно разобраться с KV-кэшем. Когда LLM генерирует текст, на каждом шаге она учитывает все предыдущие токены. Чтобы не пересчитывать их заново, модель сохраняет промежуточные вычисления в памяти — это и есть KV-кэш (Key-Value cache). Без него инференс был бы в разы медленнее и дороже. Но есть проблема: KV-кэш растёт линейно с длиной контекста. Для Llama 3.1 70B при контексте 128K токенов KV-кэш в формате BF16 занимает около 40 ГБ, а сама модель весит порядка 140 ГБ. Итого один запрос требует 180 ГБ памяти — это не помещается даже на H100 с его 80 ГБ. Если же обслуживать четырёх пользователей на контексте 128K, только под KV-кэш уйдёт 160 ГБ — больше, чем весят параметры модели. Проблема становится критической в трёх сценариях. При RAG-подходе с большими документами попытка загрузить в контекст кодовую базу или длинный PDF забивает всю VRAM ещё до отправки первого запроса. В агентских циклах многошаговый диалог с вызовом инструментов быстро раздувает контекст до тысяч токенов, память заканчивается, историю приходится обрезать, и агент теряет контекст даже последних трёх шагов. Наконец, при батчинге в нагруженных сервисах KV-кэш каждого пользователя фиксируется в памяти: чем длиннее диалоги, тем меньше параллельных сессий помещается на одну GPU. Проблему пытались решать по-разному. GQA уменьшает количество KV-голов — работает и активно используется ещё со времён Llama 2. Sliding Window Attention ограничивает окно недавних токенов, чтобы кэш переставал расти бесконечно. MLA от DeepSeek сжимает KV до латентных векторов и убирает около 93% кэша. Но все эти методы либо требуют переобучения модели, что дорого и сложно, либо режут контекст, ухудшая результаты. TurboQuant предлагает другой подход: просто сжать то, что уже есть, без изменения архитектуры, калибровки и файн-тюнинга. Вы берёте модель, включаете метод, и KV-кэш сжимается в 5–6 раз. Идея квантизации KV-кэша не нова: наивная равномерная сетка работает плохо, потому что значения в кэше распределены неравномерно, а традиционные методы либо теряют качество, либо требуют калибровочных данных. TurboQuant решает это двумя идеями. Первая — случайное вращение. Перед квантизацией вектор умножается на случайную ортогональную матрицу. После такого вращения компоненты вектора становятся почти независимыми и распределены предсказуемо: из произвольного и сложного распределения получаем что-то близкое к нормальному. Вторая — оптимальный квантизатор для известного распределения (Lloyd-Max). Если мы знаем, как распределены данные, то можно заранее просчитать оптимальную сетку квантизации — не равномерную, а такую, где ошибка минимальна именно для этого распределения. Кодбук считается один раз, хранится статично и не требует калибровки под конкретную модель. Комбинация даёт результат: алгоритм доказуемо находится в пределах примерно 2,7 раза от теоретического минимума ошибки квантизации — это называют near-optimal. Есть и третий компонент — QJL-коррекция остатка. Теоретически он красив, но на практике сообщество выяснило: в наивной реализации через стандартный attention softmax экспоненциально усиливает дисперсию от 1-bit коррекции, и результат становится хуже. В vLLM проблему решили через norm correction, в форках llama.cpp QJL чаще всего просто отключают или упрощают. Главное, что нужно запомнить: алгоритм data-oblivious — ему не нужны калибровочные данные, не нужен файн-тюнинг, он сразу работает на любой трансформерной модели. Теперь про цифры. Google заявляла «up to 8x speedup on H100 GPUs». Но реально ваш инференс не станет в восемь раз быстрее в 99% случаев. Восьмикратный рост измерен относительно FP32, который никто в проде не использует. Относительно реально рабочего FP16-бейзлайна это примерно 4x. И это ускорение только attention, а не end-to-end инференса. В реальном пайплайне attention — лишь часть времени, есть ещё линейные слои, sampling, IO. Wall-clock времени от токена до токена в методике нет, а сообщество намерило overhead на префил порядка 21–27 мс на квантизацию — не катастрофа, но и не бесплатно. Тогда, может, нас всех оверхайпнули? На самом деле нет, потому что реальная ценность TurboQuant не в скорости, а в памяти. Сжать KV-кэш в пять раз — значит впихнуть в одну GPU контекст, который раньше не влезал. Например, на Llama 3.1 70B это разница между примерно 109K токенов и примерно 536K токенов на 34 ГБ VRAM. На бенчмарках LongBench и Needle-in-a-Haystack результаты впечатляют: модель Llama-3.1-8B-Instruct при квантовании до 3,5 бит набирает 50,06 балла на LongBench — ровно столько же, сколько в оригинальном FP16, а на Needle держит 0,997 на контексте вплоть до 104K токенов. То есть на длинном контексте качество не разваливается. Но есть нюансы. Все замеры проводились на небольших моделях до примерно 12B параметров: Llama-3.1-8B, Mistral-7B, Gemma. Данных для архитектур масштаба 70B+ в исследовании нет вовсе, и переносимость на крупные модели остаётся открытым вопросом. Сообщество провело самостоятельные тесты: на модели 104B с пресетом turbo3 прирост перплексии составил всего +3,6%. Но «мы сами проверили, вроде работает» — не замена нормального бенчмарка. Также в исследовании отсутствует классическая база: метрики WikiText-2 perplexity и MMLU — без них нормально сравнить метод с конкурентами в одной системе координат не получится. Ещё один нюанс: ключи и значения в KV-кэше — не одно и то же. У Qwen2.5, например, нормы ключей на порядки больше норм значений. Поэтому симметричная квантизация с одинаковой разрядностью для K и V — это костыль: ключам по-хорошему нужно больше бит. Асимметричные пресеты вроде K8V4, появившиеся в vLLM и форках llama.cpp, — тому доказательство. TurboQuant — далеко не единственный метод сжатия KV-кэша и даже не обязательно лучший для вашего сценария. Есть метод KVTC, построенный на иной философии: это своего рода аналог JPEG для KV-кэша. Разработчики заявляют о сжатии вплоть до 20 раз против 5–6x у TurboQuant, с потерей точности менее одного процентного пункта. KVTC тестировался на куда более широкой линейке моделей — от 1,5B до 70B. Явный минус — необходимость однократной калибровки примерно на 200K токенов. Для продакшен-сервисов с фиксированной моделью это не проблема, а вот для локального сценария «скачал GGUF и запустил» уже больно. Есть RotorQuant — community-проект, который решает конкретную проблему TurboQuant: умножение на полную d?d ортогональную матрицу — это 16 384 операций для d=128. RotorQuant заменяет её математической хитростью, дающей около 100 операций. Вращение выполняется в 10–31 раз быстрее, а сам алгоритм требует в 44 раза меньше параметров при сопоставимом качестве attention: косинусное сходство 0,990 против 0,991 у TurboQuant. Минус: пока проигрывает по качеству и находится на ранней стадии. Но если авторы «дожмут» качество, проект может стать дефолтным выбором для мобильных и edge-сценариев. Есть KIVI — проверенный бейзлайн, представленный на ICML 2024 и уже встроенный в экосистему Hugging Face Transformers. Метод использует асимметричную 2-битную квантизацию: поканальную для ключей и потокеновую для значений. Такой подход сжимает KV-кэш в 16 раз, снижая пиковое потребление видеопамяти примерно в 2,6 раза. Для продакшена, где стабильность важнее максимального сжатия, — вполне хороший вариант. Комьюнити уже создало более 15 реализаций TurboQuant — от простых Python-пакетов до специализированных Metal-шейдеров. Если вы гоняете модели локально через llama.cpp, ваш основной вариант — TheTom/turboquant_plus: самый зрелый форк с поддержкой Metal, CUDA и CPU, протестированный на моделях от 1,5B до 104B. Есть пресеты turbo2 (2-bit) со сжатием в 6,4 раза и увеличением перплексии. Главный вывод: TurboQuant — это не про ускорение инференса в 8 раз, а про память. Он позволяет впихнуть в GPU контекст, который раньше не влезал, и делает это без калибровки и файн-тюнинга, работая на любой трансформерной модели. На маленьких моделях качество на длинном контексте не страдает, на больших — пока открытый вопрос, но первые тесты сообщества обнадёживают. Альтернатив хватает: KVTC для максимального сжатия с калибровкой, KIVI для стабильного продакшена, RotorQuant для edge-сценариев в будущем. Так что в следующий раз, когда увидите заголовок про очередной «прорыв», не спешите паниковать. Смотрите на методику: на чём меряли, относительно чего, какие модели, есть ли end-to-end замеры. TurboQuant действительно полезен, но его место — не «сделать всё в 8 раз быстрее», а «влезть туда, куда раньше не влезало». А какой из методов сжатия KV-кэша вы уже пробовали в своих проектах, и был ли эффект сопоставим с заявленным? Телеграм: t.me/ainewsline Источник: vk.com Комментарии: |
|