es
Feedback
КПД

КПД

Ir al canal en Telegram

Квантование & Прунинг & Дистилляция Блог про сжатие сетей и не только. От древнейших времен по настоящее время. Группа с комментариями: @quant_prune_distill_comments

Mostrar más
3 483
Suscriptores
+424 horas
+157 días
+5030 días
Archivo de publicaciones
КПД
3 483
[Блог] Мы сделали что-то очень крутое. Не скажем что, но оно очень крутое. Ставьте лайки и пишите комментарии.
[Блог] Мы сделали что-то очень крутое. Не скажем что, но оно очень крутое. Ставьте лайки и пишите комментарии.

КПД
3 483
Метод Сам метод донельзя прост: - 📝 Не сжимаем промпт. - 🎲 В каждом слое и голове случайно выбираем токены для выбрасывания. И все! Почему это работает? Увидим ниже. Эксперименты 🧪 Эксперименты гоняют на семействе 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 483
Random Attention: Rethinking KV Cache Eviction for Efficient Reasoning 📄 Статья С увеличением характерной длины контекстов в
Random Attention: Rethinking KV Cache Eviction for Efficient Reasoning 📄 Статья С увеличением характерной длины контекстов в LLM все острее стал вставать вопрос о сжатии KV-кэша. Длинный KV-кэш занимает много места в памяти, а еще и замедляет инференс. Исследователи за последние несколько лет придумали много эвристик по прунингу / слиянию токенов разной степени безумия — одна якобы лучше другой. А тут вот ребята из Salesforce Research заметили, что рандомный прунинг работает, вообще говоря, не хуже всех этих хитроумных идей, а кроме того, предлагает более быстрый инференс ввиду отсутствия необходимости оценивать важность токенов.

КПД
3 483
Я разочарован Астрой. Дал, как мне казалось, сложную задачку, думал, полчаса попыхтит, я пока почитаю архив. А она, собака такая, за пару минут управилась.

КПД
3 483
Еще дедлайн подачи заявок не прошел, а чуваков уже приняли на ICLR 27. Респект! 📄 Статья
Еще дедлайн подачи заявок не прошел, а чуваков уже приняли на ICLR 27. Респект! 📄 Статья

КПД
3 483
А могли бы Joseph Redmon нанять для рисования графиков)
+1
А могли бы Joseph Redmon нанять для рисования графиков)

КПД
3 483
Сам дисклеймер
Сам дисклеймер

КПД
3 483
# 🔄 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 483
🔄 Recirculation 📄 Статья Возможности трансформеров по обновлению скрытого состояния ограничены глубиной, и, дабы повысить в
🔄 Recirculation 📄 Статья Возможности трансформеров по обновлению скрытого состояния ограничены глубиной, и, дабы повысить выразительность, можно либо stack more layers, либо делать адаптивную глубину а-ля looped transformers, когда какие-то слои прогоняются по нескольку раз. В данной же работе исследователи из глубокого разума 🧠 предложили добавлять с каким-то весом скрытое состояние с прошлого шага, с более глубокого слоя, в текущий шаг, дабы обогатить его знанием после глубокой обработки.

КПД
3 483
Слова не мальчика, а мужа. https://github.com/hao-ai-lab/flash-attention-fp4/issues/1
Слова не мальчика, а мужа. https://github.com/hao-ai-lab/flash-attention-fp4/issues/1

КПД
3 483
sticker.webp0.28 KB

КПД
3 483
презентации от Codex be like
презентации от Codex be like

КПД
3 483
Страница курса Efficient Systems for Foundation Models от небезысвестного Tri Dao в Принстоне от осени 25-го года. Полезна тем, что содержит в себе хороший список литературы для последовательного изучения предмета - от простому к сложному.

КПД
3 483
И кстати, группа для комментов и обсуждений: @quant_prune_distill_comments Походу до нее не очевидно добраться)

КПД
3 483
NVIDIA на днях выложила статью про перенос KV-кэша между разными моделями: маленькая модель читает промпт, большая отвечает и
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 483
photo content

КПД
3 483
🛠️ Метод Сначала определяют, какие слои лучше всего отображаются из одной модели в другую. Для этого обучают гребневую регрессию (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 483
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-модели, — и оно более-менее завелось.

КПД
3 483
🛠️ Метод Дабы всё можно было реализовать одним кернелом без обращения к глобальной памяти, надо расписать все вычисления так, чтобы нужные активации всегда лежали под рукой у нужного CTA (Cooperative Thread Array). А ещё хочется избавиться от лишних синхронизаций. Есть две технические сложности: 1. В наивной реализации сначала идёт gate-проекция, а затем up, и CTA нужно тянуться далеко за нужными элементами матрицы весов. 2. Чтобы получить выход down-проекции, необходимо просуммировать по всей промежуточной размерности. Проблема 1 решается просто — будем перемежать куски up- и gate-проекции, чтобы CTA мог достать их разом из одного места. Проблема 2 решается гораздо сложнее, и ей посвящена, по сути, большая часть блога. Если коротко — так расписывается то, как данные подаются в тензорные ядра, синхронизируются consumer- и producer-потоки, пайплайнинг и заумный эпилог. Многие штуки зиждутся на Blackwell-специфичных инструкциях, позволяющих перекрывать в одной операции вычисления и трансфер памяти. ⚙️ Есть у них как bf16-, так и mxfp8-реализация. 📊 Замеры Сравниваются с наивной торчовой реализацией (дико медленной, само собой, и это даже несерьёзно) и torch.grouped_mm. В bf16 получают ускорение порядка 20% против grouped_mm и около 2 раз для mxfp8 (против торчового mxfp8). Если убрать requant из торчовой реализации mxfp8, то ускорения почти нет. 🤔 Сравнений с другими эффективными fused-кернелами — SonicMoE и Mixture-of-Kittens — нет, так что непонятно, насколько это круто.

КПД
3 483
Prime Flash MoE - Faster MoE Kernels optimized for Blackwell 🔗 Блогпост Работы по вайбкодингу реализации эффективных MoE-кер
Prime Flash MoE - Faster MoE Kernels optimized for Blackwell 🔗 Блогпост Работы по вайбкодингу реализации эффективных MoE-кернелов пошли кучно, и ребята из Prime Intellect не остались в стороне и породили свой fused-кернел Prime Flash MoE.