1.4K subscribers
74 photos
3 files
187 links
Квантование & Прунинг & Дистилляция

Блог про сжатие сетей и не только.
От древнейших времен по настоящее время.
Download Telegram
-Вы LLM-ками пользуетесь?
-Нет, только квантуем.
-Красивое.
-Почему интеллектуальные люди часто близорукие?
-Они повышают frames per second за счет прорисовки текстур.
AQLM приняли на ICML!

🍾
KAN: Kolmogorov-Arnold Networks
[Статья][Код]

Введение

В основе всех (ну почти всех) современных архитектур лежит многослойный перцептрон (MLP) с обучаемыми матрицами, сдвигами и фиксированными активациями и некоторым механизмом агрегации для пространственных входов (свертки, attention, state-spaces, мамба, хуямба).

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

Возникает вопрос 🤔- оптимален ли такой подход по вычислениям / точности и нельзя ли изобрести нечто лучшее?

Метод

В данной статье авторы переосмысляют и в некотором смысле обобщают парадигму построения многослойной сети. В основе идеи лежит знаменитая теорема Колмогорова-Арнольда, что непрерывную многомерную функцию на ограниченной области можно всегда представить в виде композиции функций от одной переменной.

Однако, при этом теорема не дает явного вида этих функций, которые могут оказаться сколько угодно плохими, потому не реализуема на практике.

В данной статье предлагают выучивать сами функции активации, параметризуя их некоторым образом. Каждое ребро между входным и выходным нейроном задается некоторой параметрической функцией довольно общего вида.

Традиционный MLP является одним из частных случаев предлагаемой парадигмы.

В оригинальной теореме перцептрон всего с одним скрытым слоем, но ничто не мешает технически настакать их побольше.

На практике KAN-слой реализуется как B-сплайн с residual connections, домноженный на константу:

\phi(x) = w(b(x) + spline(x)), где b(x) = silu(x) = x / (1 + e^{-x})

Оптимизация такого сплайна довольно нетрививальна, и для улучшения сходимости сплайн инициализирует так, чтобы быть близким к нулю в начальный момент времени, и сетка с узлами сплайна обновляется на лету.

При той же глубине и ширине в KAN-сети больше параметров, чем в классической MLP в G (G - размер сетки) раз, но мотивация работы в том, что KAN требуется меньшая ширина для достижения сопоставимого качества.

Далее авторы обосновывают, что KAN обладает значительно лучшей масштабируемостью в сравнении c MLP и обходит проклятие размерности за счет того, что представляет многомерную функцию в виде композиции одномерных, тем самым переводя задачу эффективно в низкоразмерное пространство и выводят степенной закон убывания функции потерь.

Для KAN в однослойной сети, аппроксимирующие функции могут быть очень плохими, но с ростом глубины, существуют все более гладкие комбинации, способные решать целевую задачу.

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

Предлагаемую парадигму валидируют на аппроксимации явно заданных математических функций и еще в ряде физических приложений - решении уравнений в частных производных, исследовании Андерсоновской локализации в разных решеточных системах. При том же числе параметров, KAN сходятся значительно быстрее и достигают лучшего качества по сравнению с традиционными архитектурами. Проблема переобучения , тем не менее, все равно может иметь место.

Кроме того, для повышения интерпретируемости, авторы предлагают накладывать L1 + энтропийную регуляризацию для удаления побочных связей в сети, и полученная спарсифицированная сеть на игрушечных примерах действительно вполне интуитивна.

Вывод

Работа весьма занятная и интересная. Однако, преждевременно утверждать, что предложенный подход тут же возьмет и вытеснит MLP.

Во-первых, требуется валидация на реальных данных. Удивительно, что авторы не показывают эксперименты на том же MNIST или табличных данных, которые должны быть по зубам даже исследователям с ограниченными ресурсами. Возможно, KAN просто имеют хороший inductive bias для решения определенного круга задач.

Кроме того, текущая парадигма построения сетей хороша тем, что удачно ложится на возможности современных GPU, способных параллелизовать эффективно операции с большими тензорами. KAN же не настолько hardware-friendly в этом отношении. Но могут найти свою нишу при инференсе на CPU и FPGA.

Для приложений математики и физики, KAN, безусловно, представляют интерес, но можно ли ими заменить MLP в трансформере? Поживем, увидим 🤷‍♂️.
Абитуриентов в принципе можно евалить как LLMки.

Вместо ЕГЭ давать MMLU-RU.

А на вступительных давать проверяющему (которого можно заменить GPT4 или Зелибобой) ответы двух абитуриентов (без указания их имен) и затем отсекать по ELO score.
1x16 AQLM квантизации 🦙-3 на хабе!

1️⃣ Meta-Llama-3-8B-AQLM-2Bit-1x16
2️⃣ Meta-Llama-3-8B-Instruct-AQLM-2Bit-1x16
3️⃣ Meta-Llama-3-70B-AQLM-2Bit-1x16
4️⃣ Meta-Llama-3-70B-Instruct-AQLM-2Bit-1x16

Дело заняло несколько дольше времени , чем предполагалось. Новую линейку LLMок от Меты оказалось сложнее квантовать по сравнению с предшественниками с приемлемой просадкой в качестве, а выкладывать шлак, под красивой этикеткой не позволял кодекс чести самурая. Пришлось улучшить процедуру файнтьюна - больше токенов, больше компьюта.

Но в итоге добили до приемлемого качества. Пользуйтесь, делитесь впечатлениями)

8B версия великовата (~4Gb) из-за больших эмбедов и lm_head (так как словарь большой). В будущем планируем попробовать посжимать и эмбеды / языковую голову.
Полагаю, многие уже успели восхититься выдающимися возможностями нового детища от OpenAI - GPT4o.

Детальный разбор и сводка имеющейся информации приведена в постах Сиолошной, так что дабы сэкономить на генерации собственных токенов я не буду повторяться.

На мой взгляд, самое удивительное во всем этом, что новая модель, не только стала лучше, обрела новые возможности и кучу мелких и крупных плюшек, но и стала дешевле в использовании. Безумно любопытно, в чем же секрет столь эффективного и быстрого инференса при сохранении высочайшего качества? Подозреваю, что там весьма нетривиальное сочетание алгоритмов сжатия и ускорения, разных оптимизаций движка. Вероятно, и архитектурные навороты - смесь / несмесь экспертов (может в ширину, а может и в глубину). А может просто большой трансформер без причуд?)

И возможнось бесплатного пользования моделью (хоть и в ограниченном количестве) - очень неожиданный ход от OpenAI, которые хоть немножечко, но приоткрылись) Но думаю, что все продумано, не разорятся на этом жесте доброй воли 😇...
Судя по количеству создателей, имеет место scaling law не только по размеру модели и обьему данных на обучении, но и числу рисерчеров при обучении LLMок.
С приближением дедлайна NeurIPS частота сообщений про новый revision стремительно нарастает...
Квантование KV-кэшей добавили в 🤗!
[Блогпост]

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

Однако есть проблема - если последовательность длинная, кэш слишком тяжелый становится.
Для 🦙 (1 или 2) 7b для 10к токенов потребуется 5Gb памяти (2 * 2 * 32 * 32 * 128 * 10000 ≈ 5GB). А для более крупных моделей и , если контекст переваливает за миллион, страшно представить сколько.

Существуют разные подходы к сжатию KV-кэшей, и один из наиболее очевидных - квантизация кэша, преставление ключей и значений в более низкой битности.

Метод

В работе KIVI предложили 2-битное ассиметричное (с zero point) квантование кэшей. Ключи квантуются поканально, значения - по токенно. Поканальное квантование помогает бороться с outliers.

В HF использует по-токенное квантование для ключей и значений из соображений скорости, несколько жертвуя качеством. Кроме того, чтобы немного улучшить качество, самые свежие 128 токенов держат в исходной точности. Они обычно самые важные для текущего токена, и не добавляют много памяти для длинного контекста.

HF поддерживает два метода квантизации:
- quanto (простой rount-to-nearest)
- hqq

Оба метода data-free.

Валидация

На замерах перплексии на Llama-2-7b на PG-19, 4-битный HQQ не просаживает качество, а quanto_int4 умеренно просаживает. 2-битные квантизации сильно роняют качество. На LongBench в 4 битах почти нет просадки по качеству.

На длинных последовательностях удается достичь до 2.5x экономии потребляемой памяти.

Скорость, генерации, однако замедляется так как на текущий момент нет оптимизированных ядер. Просадка по скорости 30-50% судя по графикам (крайняя правая точка на графике number_of_tokens/sec явно забагованная).

Кроме того, данная стратегия помогает именно на стадии генерации, а заполнение промпта (pre-fill) приходится делать стандартным способом.

Метод совместим с Flash Attention.

Использование

Достаточно установить quanto, и прописать аргументы в методе .generate.
TerDiT: Ternary Diffusion Models with Transformers
[Статья][Код инференса]

LLMки не квантовал за последние год-два только ленивый, потому назрело время осваивать и другие ниши. Квантование диффузионных моделей на текущий момент пока не столь исследовано, как LLMки, в связи с тем, что сами модели не доросли до своих собратьев из NLP, потому и не было столь острой необходимости. Тем не менее, прогресс не стоит на месте, и стоит быть готовым к дальнейшему масштабированию диффузионных тушек.

В рассматриваемой статье авторы перенесли метод тернарной квантизации (quantization-aware-training) QAT из BitNet1.58 на DiTы для class-conditional генерации на ImageNet. Квантуют только веса (активации остаются в исходной точности).

Метод

По существу ничего нового по сравнению с BitNet1.58, веса обучаются через straight-through estimator (STE) с большим learning rate.

Единственное нововведение - нормализация на выходе AdaLayerNorm. Авторы обнаружили, что тернарные веса выдают большие активации, и scale/shift/gate модуляции слишком велики, чтобы сетка могла нормально сходиться. Навешивание RMSNorm на конец MLP для получения модуляций решает проблему.

Эксперименты

Метод валидируют на DiTах двух размеров - с 600M параметров (примерно как DiT-XL из оригинальной статьи) и 4.2B параметров - на class-conditional генерацию на ImageNet 256x256.

По метрикам, тернарная 4.2B модель примерно равна DiT-XL, 600M несколько хуже. То есть для большой модели близкое качество к floating point модели при чуть меньшем общем размере модели (параметров больше в 7 раз, бит на параметр ~10 меньше, чем в fp16). Справедливости ради, стоит заметить что TerDiT обучался меньшее число итераций по сравнению с моделью из статьи фейсбука.

С инференсом немного грустненько 😢 получилось. Для работы с тернарными весами берут кернелы из HQQ и деквантизуют на ходу. Квантованные модели медленнее 😱 fp32 на 20-25%, а при опущенном сравнении с fp16 замедление было бы порядка 3 раз. Зато неплохая экономия по памяти. 4.2B моделька есть 3Gb видеопамяти на пике при инференсе.

В приложении еще зачем-то показывают что существующие 4-битных квантизации ломают полностью DiT. Берут, правда SmoothQuant, который в отсутствие квантования активаций, вырождается в round-to-nearest (RTN), т.е самый наивный и грубый метод, при существовании куда более сильных PTQ методов для диффузии (Q-Diffusion, PTQ4DM).

Вывод

С одной стороны, очередное подтверждение того, что тернарный QAT как-то да работает. Однако результат куда скромнее того, что получили для LLM майкрософты, и с таким замедлением инференса вряд ли интересен практикам. Неизвестно, масштабируется ли он на случай более сложной задачи text-2-image генерации. Тем не менее деятельности представляет определенный интерес, и развитием эффективных алгоритмов QAT, вероятно, тернарные модели вполне могут быть около Парето-оптимальными. Во всяком случае, в некоторых приложениях.
💰 Не проплаченной рекламы пост.

Хочу порекомендовать канал То Шо Нейросети.

На данном канале вы можете найти сборную солянку интересных и полезных материалов во всякой всячине, связанной с нейронками. И более чем годные туториалы от самого автора.

В частности, внимания заслуживает недавняя ветка постов про Liquid Neural Networks 💧.
И реализация Мамбы 🐍 с нуля.
BitsFusion: 1.99 bits Weight Quantization of Diffusion Model
[Статья][Ридми]

Yet another свежая статья про экстремальную квантизацию диффузионок от Snap Research. Утверждают, что 2-битная модель даже лучше 😱 исходной. Если у вас завалялся старый игровой ПК, года так 2007, можно его не выбрасывать, а генерить картинки стейбл диффузией 😅.

Метод

По существу предложенный метод представляет собой QAT (квантизейшн эвер трэйнинг) с mixed-precision квантизацией и дистилляцией.

Каждый слой квантуется в 1️⃣, 2️⃣, 3️⃣ бита, или не квантуется вовсе. В прошлых работах было показано, что диффузионные модели очень чувствительны к сжатию timestep проекций, обуславливающих на текущий шаг расшумления. Поэтому следуя стандартной практике их не сжимают. Авторы анализируют чувствительность разных слоев к сжатию, замеряя MSE с картинкой сгенерированной оригинальной моделью и CLIP Score, при квантовании слоев по отдельности и замечают, что данные две метрики не всегда скоррелированны. В частности, сжатие слоев в cross attention слоях не сильно так сильно влияет на MSE, но при этом временами ломает семантику изображения. Shortcut свертки очень важны.

Каждому слою сопоставляется важность в зависимости от MSE и числа параметров в нем, и подбирается порог такой, что достигается целевая степень сжатия.

Min-Max стратегия по определению масштабов квантования не учитывает наличие выбросов в распределении весов, поэтому авторы применяют Lloyd-Max итеративный алгоритм для минимизации ошибки. Кроме того, важно учитывать симметрию весов относительно нуля и явно накладывать ее.

Далее авторы дообучают 👨‍🏫 квантованную модель.

На первой стадии сжатая модель пытается воспроизвести выход и промежуточные активации учителя. Авторы отмечают, что важно учитывать classifier-free guidance, используемый при инференсе. Распределение шагов сэмплирования смещено в область где ошибка квантизации больше (поздние шаги диффузии).

На второй стадии модель учится на noise prediction, как самая обычная диффузионка.

Эксперименты

Берут SD v1.5 модель и учат 20к шагов на первой стадии, и 50к на второй на некотором проприетарном датасете. Замеряют CLIP Score и FID на MS-COCO, TIFA, GenEval и пользовательские предпочтения на PartiPrompts.

Сжатая модель после второй стадии по метрикам примерно равна несжатой.

На SbS (side-by-side сравнении) на Parti Prompts BitsFusion модель побеждает SDv1.5 с win rate 54.4% против 45.6%. Странно, что SbS, который самый показательный, учитывая несовершенство текущих генеративных метрик, скромно запрятан в приложение.

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

Вывод

Довольно хороший инженерный результат, использующий сочетание разных идей. Разве, что без специализиованного железа вряд ли удастя выжать ускорение. Однако, вызывает , почему была выбрана SD v1.5, хотя статья свежая, и уже почти как год существует SDXL. Можно ли их так же легко сжать? Полагаю, что хорошее качество еще во многом обусловлено тем фактом, что загадочный проприетарный датасет неплохо отфильтрованных и дообучение несжатой модели могло бы ее тоже улучшить, ибо SD v1.5 училась на довольно шумных данных из LAION.
Оценивать интеллект по IQ-тестам это как оценивать качество изображений по FID.
Про релиз SD3 Medium.
"Добрые люди кровопролитиев от него ждали, а он Чижика съел!"

Обсуждение на Reddit

По всей видимости, выложили pretrain чекпоинт до всяких RL-файнтьюнов.
В процессе случайного блуждания по интернетам наткнулся на занятный блог от некоего Итона Эпперли, аспиранта в Калтехе по специальности прикладная и вычислительная математика.

В частности, у него есть весьма годные посты по разным вопросам из линейной алгебры (разреженным и низкоранговым матрицам), теории вероятностей (Марковские цепи 🔗, случайные 🎲 алгоритмы в линейной алгебре).

Есть концептуальные посты:
- Low-rank
-
FFT
И более специфичные
- Don’t Use Gaussians in Stochastic Trace Estimation

Итон - первый автор статьи XTrace, SOTA алгоритма стохастической оценки следов больших матрицы (сходящихся быстрее к истинному значению по количеству сэмплов).

В общем, любителям прикладной математики рекомендую!
[Блог Nvidia][пост на addmeto]

Пока все находятся в томном ожидании релиза 🦙-3 400B Nvidia сделали ход конем и выкатили семейство здоровенных херовин.

Знакомьтесь - Nemotron-4!
Идет в трех комплектациях:
1️⃣Base - претрейн
2️⃣Instruct - дообучение на инструкциях
3️⃣Reward - reward model для RL alignment, обученная поверх Base

Предобучалось оно на 9 триллионах токенах из 50+ человеческих языков и 40+ языков программирования.
Для alignment использовали набор из 20к инструкций, который выложили в открытый доступ.
Контекст коротковат по современным меркам - всего токенов, небось больше не лезло во время обучения 😅.

Скоры на бенчах весьма достойны. На свежей ArenaHard от lmsys уступают лишь свежим версиям чат-гопоты и Клод Опус. На lmsys arena было бы еще интересно глянуть Elo Score.

Ну и самая интересная деталь - размер 340B параметров, т.е 640Gb на одни лишь веса в fp16. Как вы ее будете инферить - это ваша проблема)

Задача экстремальной квантизации уже не вместить LLMку именно на consumer-grade GPU, а хоть на какую-то)

Но зеленым, конечно, спасибо за такой вклад в опенсорс)