КПД
Відкрити в Telegram
Квантование & Прунинг & Дистилляция Блог про сжатие сетей и не только. От древнейших времен по настоящее время. Группа с комментариями: @quant_prune_distill_comments
Показати більше3 484
Підписники
+424 години
+157 днів
+5030 днів
Архів дописів
3 484
Design Docs Are All You Need: An AI-native Machine-Learning Performance Tool
📄 Статья
Концептуально интересная мысль - железо и архитектуры меняются слишком быстро, патчить ML-либы под каждый новый сетап доволенно болезненно, разрастается всякое legacy. В то же время, агенты сильно удешевили разработку и на основе ТЗ неплохо варганят целостный репозиторий.
Может быть так, что проще не разбираться в том что уже есть и адаптировать под новые реалии, а взять и написать ML-либу с нуля на основе некоего скелета.
Авторы предлагают реализацию ML-либы в виде набора документов, образующих направленный ациклический граф (DAG), где расписывается структуру библиотеки, формат входов и выходов для отдельных операций. Более высокоуровневые операции можно делегировать моделям посильнее, нишевые куски - более дешевым. Все в итоге состоит из 50 файликов и 9000 строк спецификаций.
Написание либы через Claude Code поверх их документации требует примерно 100 токенов на API и 1.5-3 часа работы агента.
💡 Выводы
Сама либа из документов не выложена, нет примера реализации поверх документов агентов, бенчмарков, поэтому из статьи непонятно, насколько это хорошо работает. Но звучит прикольно.
3 484
Метод
Сам метод донельзя прост:
- 📝 Не сжимаем промпт.
- 🎲 В каждом слое и голове случайно выбираем токены для выбрасывания.
И все!
Почему это работает?
Увидим ниже.
Эксперименты
🧪 Эксперименты гоняют на семействе 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. Однако у подхода есть серьезное ограничение — он не очень полезен, если сам промпт длинный.
3 484
Random Attention: Rethinking KV Cache Eviction for Efficient Reasoning
📄 Статья
С увеличением характерной длины контекстов в LLM все острее стал вставать вопрос о сжатии KV-кэша. Длинный KV-кэш занимает много места в памяти, а еще и замедляет инференс.
Исследователи за последние несколько лет придумали много эвристик по прунингу / слиянию токенов разной степени безумия — одна якобы лучше другой.
А тут вот ребята из Salesforce Research заметили, что рандомный прунинг работает, вообще говоря, не хуже всех этих хитроумных идей, а кроме того, предлагает более быстрый инференс ввиду отсутствия необходимости оценивать важность токенов.
3 484
Я разочарован Астрой.
Дал, как мне казалось, сложную задачку, думал, полчаса попыхтит, я пока почитаю архив.
А она, собака такая, за пару минут управилась.
3 484
# 🔄 Recirculation
📄 Статья: [https://arxiv.org/abs/2608.17981](https://arxiv.org/abs/2608.17981)
Возможности трансформеров по обновлению скрытого состояния ограничены глубиной, и, дабы повысить выразительность, можно либо stack more layers, либо делать адаптивную глубину а-ля looped transformers, когда какие-то слои прогоняются по нескольку раз.
В данной же работе исследователи из глубокого разума предложили добавлять с каким-то весом скрытое состояние с прошлого шага, с более глубокого слоя, в текущий шаг, дабы обогатить его знанием после глубокой обработки.
## 🧩 Метод
Мотивация следующая.
Омонимы пишутся одинаково, а могут иметь совершенно различный смысл в зависимости от контекста. Bank в английском — это банк и берег реки. В следующем примере из статьи по смыслу имеется в виду второе, но, увидев ATM, модель триггерится на первое и дает неверный ответ:
> User: Fred took the day off work and pulled out his fishing pole. He drove
> to the bank. When he reaches the bank, should he wear boots or flip flops?
>
> Model: While flip flops may be more comfortable for a casual day, they are
> not the best choice for fishing, especially at a river bank. Here’s why:
> ...
>
> User: Is it likely that Fred will find an ATM at this bank?
>
> Model: It is highly likely that Fred will find an ATM at the bank. Most
> banks, especially those located near bodies of water popular for fishing,
> have ATMs on-site for customer convenience.
В более ранних работах показывали, что причина этого кроется, по всей видимости, в том, что эмбед нужного концепта проявляется в более глубоких слоях, а до этого есть неопределенность. Следующий токен аттендится на эмбед, где еще есть неопределенность, и может запутаться. Если подменить эмбед с текущего слоя на более поздний, то оказалось, что модель с большей вероятностью начинает верно разрешать такие ситуации.
Однако, если такую интервенцию делать для всех токенов, это сломает модель, ибо она на это не училась. Потому авторы предлагают добавлять эмбед с прошлого токена более позднего слоя с каким-то небольшим весом, пробросив информацию и не сломав модель.
Оптимальный выбор пары source/target слоев гридсерчат на некой калибровочной выборке и берут ту, где больше всего улучшается перплексия. Коэффициенты смешивания source/target слоев тоже перебирают по сетке.
🧪 Эксперименты
Метод валидируют в основном на моделях семейства Gemma-3 (потому что там эффект наиболее выражен, ха-ха-ха) и самые удачные конфигурации дают улучшение перплексии до 5%.
На Ministral / Qwen3 / Pythia / Phi2 эффект куда слабее — максимум 0,5% улучшения.
В ablation показывают, что максимальное улучшение — если добавлять предыдущий токен; вставка более старых работает хуже. Основное улучшение перплексии идет за счет прилагательных и наречий.
Потом тестируют метод на бенчмарке по контекстуализации, и recirculation дает значимый прирост против исходной модели. Правда, при увеличении числа дистракторов в Racing Thoughts эффективность метода будто ухудшается, и он сравнивается с базовой моделью.
На бенчах с коротким ответом статзначимого улучшения метод не дает. На GSM8k якобы есть прирост от recirculation. Но базовое качество претрейна Gemma3-4B — 29,3%, с которым сравниваются, — не соответствует 38,4% из техрепорта, потому есть здесь вопросики.
⚠️ Ах да, и самое веселое: в текущей ревизии перед секцией 4 авторы написали большой дисклеймер про то, что замеры перплексии в Gemma3 сломаны из-за того, что был неправильно учтен BOS-токен. Из-за этого, по всей видимости, такое хорошее улучшение перплексии у Gemma3 вышло.
## 💡 Выводы
Концептуально идея интересная, но насколько оно на реальных задачах работает из коробки и актуально ли для более современных моделей (обогащенных mHC / attention residuals), остается открытым. И методология / результаты экспериментов довольно спорные.
3 484
🔄 Recirculation
📄 Статья
Возможности трансформеров по обновлению скрытого состояния ограничены глубиной, и, дабы повысить выразительность, можно либо stack more layers, либо делать адаптивную глубину а-ля looped transformers, когда какие-то слои прогоняются по нескольку раз.
В данной же работе исследователи из глубокого разума 🧠 предложили добавлять с каким-то весом скрытое состояние с прошлого шага, с более глубокого слоя, в текущий шаг, дабы обогатить его знанием после глубокой обработки.
3 484
Страница курса Efficient Systems for Foundation Models от небезысвестного Tri Dao в Принстоне от осени 25-го года.
Полезна тем, что содержит в себе хороший список литературы для последовательного изучения предмета - от простому к сложному.
3 484
И кстати, группа для комментов и обсуждений:
@quant_prune_distill_comments
Походу до нее не очевидно добраться)
3 484
Repost from Фарш не провернуть 💝
NVIDIA на днях выложила статью про перенос KV-кэша между разными моделями: маленькая модель читает промпт, большая отвечает из её кэша через линейный маппинг. Кода нет, анонса нет, ничего нет, только цифры с 8x H100. Ну я и решил проверить 🤨
Взял пару Qwen3 0.6B и 1.7B, две 3090, и собрал всё внутри vLLM, а не на синтетике: свой KV-коннектор, перенос через /dev/shm, ridge-маппер замкнутой формулой, 15 минут фита на FineWeb. Живёт всё как KV Connector для вллм.
Оно работает 😫 HellaSwag держит 94% качества, перплексия хуже всего на 10%. TTFT на 32K контексте падает с 3657 до 1645 мс, в x2.22 🤌🏻 Под конкурентностью 8 прогретый путь тоже гуд, 2393 против 3928 мс на запрос, ноль сбоев за все прогоны.
У авторов 17-25x на паре 14B и 32B с NVLink, у меня 2.22x на PCIe, и короткие промпты проигрывают накладным расходам переноса. Окупается это дело на длинном контексте, где prefill больнее всего 📉
Код, коннектор и оба обученных маппера выложил 👇
https://github.com/alesha-pro/vllm-cross-model-kv
https://huggingface.co/anonymousmaharaj/vllm-cross-model-kv
3 484
🛠️ Метод
Сначала определяют, какие слои лучше всего отображаются из одной модели в другую. Для этого обучают гребневую регрессию (Ridge Regression) между всеми парами слоёв source- и target-модели и находят те, где R² самый большой. При этом важно фитировать pre-RoPE-ключи. Так и ошибка выходит меньше, и на другие контексты экстраполируется лучше.
Замечают, что ключи предсказываются лучше, чем значения. Впрочем, это было известно и из прошлой литературы.
После определения самых важных source-слоёв для данного target-слоя признаки из них конкатенируют в один тензор и снова обучают на этом гребневую регрессию. Показывают, что важно брать не один, а несколько — 4–8 — слоёв из source-модели для приемлемого R².
⏱️ Занимает это час-полтора на ноде из 8×H100.
🧪 Эксперименты
Валидируют подход на моделях семейств Qwen3, Llama-3.1, Ministral и на задачах с коротким ответом: ARC-C, HellaSwag, Winogrande, MMLU.
На паре Qwen3 14B → 32B работает неплохо, на Qwen3 8B → 32B — уже хуже, а на Llama 3.1 и Ministral 3.
В ablation показывают для Qwen, что pre-RoPE важен и что k = 1 — брать один самый важный слой — недостаточно.
Для Ministral 3 можно вытянуть качество, если заменить линейную модель на MLP. Для Qwen3 это не помогает.
Утверждается, что оверхед от маппера из source в target небольшой — в 3–25 раз меньше, чем prefill.
💡 Выводы
Интересное исследование и идея, но будто бы до практического использования ещё далеко. Тесты — на простых бенчах, и будто бы подход не универсален. Для качественного отображения между разными моделями, скорее всего, потребуется более выразительная модель, и здесь возникает сложный trade-off между потенциальным выигрышем, стоимостью работы и обучения этой прокладки.
3 484
Cross-Model KV Cache Transfer in LLM Families: A Closed-Form Linear Mapping for Prefill Reuse
📄 Статья:
Нередко интересующую задачу можно разбить между несколькими LLM-ками, делегировав более простые куски бюджетным моделям, а сложные — самым топовым и дорогим.
Коммуникацию можно построить через текст, однако внутренние представления, в частности KV-кэш, могут содержать гораздо больше полезной информации.
В работе Cache-2-Cache рассматривается следующая постановка:
1. 🔹 Source- и target-модели делают префилл.
2. 🔹 Обучаемый fuser-модуль выдаёт добавку к target-модели, которая в некотором смысле передаёт знания из source-модели.
Практически интересны два сценария:
- 🧠 Делаем префилл большой моделью и достаточно длинную генерацию маленькой моделью. Надеемся, что мощный префилл зарешает.
- ⚡ Делаем большой префилл маленькой моделью и короткую генерацию большой моделью. Авось большая модель переварит выдачу малой модели и выдаст точный ответ.
-
Однако в исходной статье префилл, по-любому, приходится делать двумя моделями, и обучение fuser может быть недешёвым.
Ребята из NVIDIA предложили обучать проектор, в большинстве случаев линейный, из одной модели в другую, подобрав для target-модели наиболее полезные слои из source-модели, — и оно более-менее завелось.
