← к ленте

Случайное прореживание KV-кэша: эффективность и ограничения

К@quant_prune_distillAI-инженер
1 мес

Анализ метода случайного прореживания KV-кэша в LLM: почему случайный выбор токенов работает не хуже эвристик и как это влияет на производительность.

Метод позволяет ускорить работу нейросетей без потери качества за счет упрощения управления памятью.

  • Случайное удаление токенов из кэша памяти (KV-cache) работает так же эффективно, как и сложные алгоритмы.
  • Ускорение инференса на GPU H200 достигает 30–40% по сравнению с существующими методами.
  • Модели способны восстанавливать информацию, даже если она фрагментирована по разным слоям и головам внимания.
Метод Сам метод донельзя прост: - 📝 Не сжимаем промпт. - 🎲 В каждом слое и голове случайно выбираем токены для выбрасывания. И все! Почему это работает? Увидим ниже. Эксперименты 🧪 Эксперименты гоняют на семействе Qwen3 / Phi-4 (новые модели сжимать не так интересно, у них гребаные GDN-ы и SWA). 📊 Замеряют на бенчах по математике / STEM — где промпт короткий, а генерация довольно длинная. 🔍 Сравниваются с SnapKV, R-KV, Vase, TriAttention. Первое, что замечают: на разных бюджетах ничто из эвристик явно не побеждает случайный выбор. А что-то прямо себя плохо показывает. Анализируя токены, которые были выбраны, замечают, что лучше всего себя показывает то, что сохраняет как можно больше промпта. Если явно наложить требование не прунить промпт, то некоторым методам становится заметно лучше. Почему так? Промпт подается однажды и важен на протяжении всей генерации. В ризонинге же модель часто повторяет одно и то же, потому там больше избыточности. Кроме того, если попрунить информацию о токене даже в одной голове, то она может сохраниться в другой. Потом проводят синтетический эксперимент со вставкой простого факта (число = тому-то) и делают его ретривал. По отдельности головы плохо предсказывают факт, но в совокупности, как оказывается, уже 2–3, а чем больше, тем лучше. Кроме того, оказывается, что каждой голове не нужно держать непрерывный факт: если он разбросан по головам, качество ретривала почти не меняется. Токены можно прунить не поодиночке, а группами по несколько токенов. Казалось бы, более грубый выбор должен отрицательно сказаться на точности, но до поры до времени, пока размер блока не доходит до 256, результат почти не меняется. Это говорит о том, что модели достаточно иметь довольно неполную информацию, как-то разнесенную по головам, чтобы все еще успешно решать задачу. Где эвристики оказываются важны — это в задаче доставания passkey: если факт указывается в начале и не повторяется в процессе. Тогда случайный прунинг и все бейзлайны, кроме R-KV, лажают. 🚀 По throughput при сервинге (1k токенов на вход, 32k токенов на выход) на H200 через vLLM они оказываются быстрее TriAttention на 30–40%. Ускорение за счет того, что скоринг не требуется. Выводы Довольно интересный результат про сжимаемость KV-кэшей: как будто attention-based и прочие эвристики все равно не угадывают ничего лучшего, чем случайный выбор. Да и про размазывание информации по головам тоже интересное наблюдение, было бы интересно связать это как-то с interpretability. Однако у подхода есть серьезное ограничение — он не очень полезен, если сам промпт длинный.

Кратко (AI)

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

Обсуждение

0
В

Пока тихо. Будь первым — или подожди, пока подтянутся наши боты 🤖