типичный Area Chair и рецензенты
https://ok.ru/video/37602200235
https://ok.ru/video/37602200235
OK.RU
Ну, давайте поработаем немножко
🔥7
SpinQuant: LLM quantization with learned rotations
[Статья][Код]
Если в названии статьи встречаются вместе Spin и Quant - это наверняка что-то из области физики. Но нет, это снова про квантизацию LLM…
Ранее в ряде работ (QuIP, QuIP#, QuaRot) было показано, что поворот на случайную ортогональную матрицу сильно облегчает квантизацию.
И в этой работе ребята из Meta предложили развитие идеи, дающее лучшее качество на Weight + Activation (+cache) квантизации.
Метод
Наличие выбросов в отдельных каналах активаций сильно затрудняет квантизацию (так как per-channel квантизация обычно не поддерживается в железе). Ортогональные матрицы “размазывают” выбросы в весах и активациях между каналами, так что все активации имеют примерно один и тот же порядок. Но конкретный выбор ортогональной матрицы имеет значение.
Авторы замечают, что качество сильно варьируется от конкретного выбора матриц, если сэмплировать их произвольным образом (и редко бывает достаточно хороших).
Случайные Адамаровы матрицы из QuIP гораздо лучше, но все разброс существенен и нет гарантий на оптимальность.
Потому предлагается искать “хорошие” матрицы поворота с помощью оптимизации на Stiefel многообразиях, параметризующих ортогональные матрицы. Оптимизация представляет собой градиентный спуск на многообразии. А именно Кэли SGD.
Есть 4 места куда можно вкрутить поворот:
R1 - В residual перед Attention и FFN
R2 - Между V и O матрицами в Attention
R3 - В Query/Key
R4 - Между активацией в FFN
Первые два поворота можно влить в параметры модели без изменения выходов модели, последние же придется считать на каждом прогоне. Потому предложенная процедура оптимизации применяется для поиска оптимальных R1, R2 матриц. А в случаях R3, R4 используют дешевые Адамаровы матрицы, кои практически не замедляют работу LLMки и почти ничего не весят.
Для оптимизации используют небольшой набор из Wikitext-2.
Результаты
Процедура оптимизации матриц занимает час с небольшим на меньших представителях семейства 🦙 на 8 A100 и полдня для 70B моделей.
Замеряют по классике качество на перплексии и 0-шотах.
Рассматривают 3 сценария:
1️⃣ Weight only quantization
2️⃣ Weight + activation quantization
3️⃣ Weight + activation + KV cache quantization
По качеству операжают бейзлайны (ближайший QuaRot примерно на 1% в среднем). В Weight-only quantization где-то бага при замерах AQLM и QuIP#, ибо эти методы сжимают модели почти без просадки (если верить бенчам, а не здравому смыслу) почти без просадки.
Метод работает как с RTN (Round-to-nearest), так и c GPTQ.
Важны все матрицы, но большой прирост дает будто бы добавление R4 - вращение внутри FFN.
Вывод
Квантизация весов/активаций и кэша в 4 бита на текущий момент, наверное, то что дает самое большое ускорение инференса на современных GPU, потому и представляет значительный практический интерес. И улучшение качества - это хорошо. При квантизации активаций (и кэша) просадки все еще значительные и есть куда улучшаться.
[Статья][Код]
Если в названии статьи встречаются вместе Spin и Quant - это наверняка что-то из области физики. Но нет, это снова про квантизацию LLM…
Ранее в ряде работ (QuIP, QuIP#, QuaRot) было показано, что поворот на случайную ортогональную матрицу сильно облегчает квантизацию.
И в этой работе ребята из Meta предложили развитие идеи, дающее лучшее качество на Weight + Activation (+cache) квантизации.
Метод
Наличие выбросов в отдельных каналах активаций сильно затрудняет квантизацию (так как per-channel квантизация обычно не поддерживается в железе). Ортогональные матрицы “размазывают” выбросы в весах и активациях между каналами, так что все активации имеют примерно один и тот же порядок. Но конкретный выбор ортогональной матрицы имеет значение.
Авторы замечают, что качество сильно варьируется от конкретного выбора матриц, если сэмплировать их произвольным образом (и редко бывает достаточно хороших).
Случайные Адамаровы матрицы из QuIP гораздо лучше, но все разброс существенен и нет гарантий на оптимальность.
Потому предлагается искать “хорошие” матрицы поворота с помощью оптимизации на Stiefel многообразиях, параметризующих ортогональные матрицы. Оптимизация представляет собой градиентный спуск на многообразии. А именно Кэли SGD.
Есть 4 места куда можно вкрутить поворот:
R1 - В residual перед Attention и FFN
R2 - Между V и O матрицами в Attention
R3 - В Query/Key
R4 - Между активацией в FFN
Первые два поворота можно влить в параметры модели без изменения выходов модели, последние же придется считать на каждом прогоне. Потому предложенная процедура оптимизации применяется для поиска оптимальных R1, R2 матриц. А в случаях R3, R4 используют дешевые Адамаровы матрицы, кои практически не замедляют работу LLMки и почти ничего не весят.
Для оптимизации используют небольшой набор из Wikitext-2.
Результаты
Процедура оптимизации матриц занимает час с небольшим на меньших представителях семейства 🦙 на 8 A100 и полдня для 70B моделей.
Замеряют по классике качество на перплексии и 0-шотах.
Рассматривают 3 сценария:
1️⃣ Weight only quantization
2️⃣ Weight + activation quantization
3️⃣ Weight + activation + KV cache quantization
По качеству операжают бейзлайны (ближайший QuaRot примерно на 1% в среднем). В Weight-only quantization где-то бага при замерах AQLM и QuIP#, ибо эти методы сжимают модели почти без просадки (если верить бенчам, а не здравому смыслу) почти без просадки.
Метод работает как с RTN (Round-to-nearest), так и c GPTQ.
Важны все матрицы, но большой прирост дает будто бы добавление R4 - вращение внутри FFN.
Вывод
Квантизация весов/активаций и кэша в 4 бита на текущий момент, наверное, то что дает самое большое ускорение инференса на современных GPU, потому и представляет значительный практический интерес. И улучшение качества - это хорошо. При квантизации активаций (и кэша) просадки все еще значительные и есть куда улучшаться.
👍7
Fun with sparsity in PyTorch via Hadamard product parametrization
[Блог]
Занятный бложек про то, как можно сделать sparsity-inducing regularization.
Увидев слово Hadamard я триггернулся на Адамаровы матрицы, но нет, это Адамарово произведение.
Идея в следующем:
Коэффициент регуляризации определяет степень разреженности получившейся матрицы.
Подход валидируют на табличной задаче с 500 признаками и двумя классами.
Сначала рассматривают логистическую регрессию реализованную в cvxpy, затем в торче.
Потом рассматривают групповую регуляризацию применительно к нейронным сетям. Групповая регуляризация зануляет целые каналы и имеет меньше дополнительных параметров (для неструктурированной маски число параметров удваивается, что может быть накладно).
В эксперименте берется небольшая MLP обучается на california_housing (известном всем табличникам) с некоторым коэффициентом регуляризации. Исходно было ~4500 весов, в полученной сетке остается около 600 ненулевых коэффициентов. Большинство каналов можно взять и вырубить.
Вся кухня имеет довольно прикольную реализацию через модуль
В общем, прикольно. Но интересует масштабируемость.
[Блог]
Занятный бложек про то, как можно сделать sparsity-inducing regularization.
Увидев слово Hadamard я триггернулся на Адамаровы матрицы, но нет, это Адамарово произведение.
Идея в следующем:
L1-регуляризацию можно представить как L2, c добавлением вспомогательных параметров u, так что исходный вес w параметризуется как w = u ⊙ vдля пар тензоров u и v.
Коэффициент регуляризации определяет степень разреженности получившейся матрицы.
Подход валидируют на табличной задаче с 500 признаками и двумя классами.
Сначала рассматривают логистическую регрессию реализованную в cvxpy, затем в торче.
Потом рассматривают групповую регуляризацию применительно к нейронным сетям. Групповая регуляризация зануляет целые каналы и имеет меньше дополнительных параметров (для неструктурированной маски число параметров удваивается, что может быть накладно).
В эксперименте берется небольшая MLP обучается на california_housing (известном всем табличникам) с некоторым коэффициентом регуляризации. Исходно было ~4500 весов, в полученной сетке остается около 600 ненулевых коэффициентов. Большинство каналов можно взять и вырубить.
Вся кухня имеет довольно прикольную реализацию через модуль
torch.nn.utils.parametrize
(см туториал). После задания такой параметризации, сети можно обучать не задумываясь вашим любимым оптимизатором с weight decay. Разве что в данном случае логичнее было брать AdamW, а не Adam. В общем, прикольно. Но интересует масштабируемость.
❤6🔥3👍1
Если гитхаб и гитлаб заблочат, телегу с функционалом чатов можно использовать в качестве альтернативы)
⭐️ Сообщения с файлами - коммиты.
⭐️ Разные чаты - разные ветки.
⭐️ PR - пересылка файлов из одного чата в другой.
Прямо как в старые добрые времена на заре систем контроля версий.
⭐️ Сообщения с файлами - коммиты.
⭐️ Разные чаты - разные ветки.
⭐️ PR - пересылка файлов из одного чата в другой.
Прямо как в старые добрые времена на заре систем контроля версий.
😁26🥴8❤2👍1🔥1
[bibtex-tidy]
Наткнулся в интернетах на офигенную тулзу для наведения красоты в bibtex.
Если вы ссылаетесь на дохренища работ, в частности, пишете диссер или обзор, данный инструмент позволяет убирать дубликаты, чтобы overleaf не ругался 🤬 при компиляции.
Кроме того, можно красиво отформатировать все (как black), отсортировать в алфавитном, так что любо-дорого будет глядеть.
Наткнулся в интернетах на офигенную тулзу для наведения красоты в bibtex.
Если вы ссылаетесь на дохренища работ, в частности, пишете диссер или обзор, данный инструмент позволяет убирать дубликаты, чтобы overleaf не ругался 🤬 при компиляции.
Кроме того, можно красиво отформатировать все (как black), отсортировать в алфавитном, так что любо-дорого будет глядеть.
🔥8❤1
GIFT-SW: Gaussian noise Injected Fine-Tuning of Salient Weights for
LLMs
[Статья] [Код]
Введение
PEFT и квантизация - два понятия, которые за последние пару лет стали неразрывно связаны с большими языковыми моделями, особенно в контексте обучения и инференса в условии ограниченных ресурсов. И в сегодняшнем эфире будет сказ про немного необычное сочетание этих идей в работе от ребят из Cколтеха, AIRI и Вышки.
Метод
Вкратце напомню, что суть PEFT в до-обучении небольшого (по сравнению с размером исходной модели) числа параметров. Эти параметры могут быть как адаптерами к весами (как LoRA, DoRA, OFT), кои можно (или нельзя) влить в модель, а могут быть некоторым подмножеством весов исходной модели. Второй вариант еще называется в литературе Selective Finetuning и про него сегодня пойдет речь.
Метод основан на двух основных идеях:
1️⃣ Определении “чувствительных” весов, которые, с одной стороны не квантуются, а с другой являются тем самым подножеством обучаемых параметров.
2️⃣ Добавлении “шума” в процесс обучения.
Наличие выбросов в весах, затрудняющая квантизацию, известная особенность LLM (временами оспариваемая), и потому для улучшения качества их обычно держат в исходной точности. В данном случае, следуя LLM.int8() и QUIK выбросы определяются как уровне колонок матриц весов (входных размерностей). В качестве метрики берутся комбинации вида:
Где \rho - норма весов в колонке, а \gamma - степень - {-½, 1, ½}.
D_i - это пертурбация весов, и в качестве пертурбации рассматривается операция квантования (скалярные однородная симметричная).
Выбросы, для которых значение данной метрики самое большое - не квантуются.
Градиентный спуск с шумом, примененным к весам до или после шага градиентного спуска, как известно из литературы, помогает избегать седел и плохих оптимумов, повышает устойчивость. В данной работе шум применяется до шага SGD.
Итоговый метод выглядит следующим образом:
Квантизуем с помощью GPTQ все веса, за исключением “выбросов”. Затем до-обучаем через обычный бэкпроп эти колонки, а оставшимся весам добавляем нормальный i.i.d шум с std равным шагу квантизации.
Рассматриваются 3 стратегии:
1️⃣ Pre-GIFT-SW - сначала учим с шумом и выбросам, типа готовим модель к квантизации, а затем квантизуем
2️⃣ Salient FT - квантизуем и до-обучаем только “выбросы” без шума
3️⃣ Post-GIFT-SW - квантизуем и до-обучаем “выбросы” с шумом
LLMs
[Статья] [Код]
Введение
PEFT и квантизация - два понятия, которые за последние пару лет стали неразрывно связаны с большими языковыми моделями, особенно в контексте обучения и инференса в условии ограниченных ресурсов. И в сегодняшнем эфире будет сказ про немного необычное сочетание этих идей в работе от ребят из Cколтеха, AIRI и Вышки.
Метод
Вкратце напомню, что суть PEFT в до-обучении небольшого (по сравнению с размером исходной модели) числа параметров. Эти параметры могут быть как адаптерами к весами (как LoRA, DoRA, OFT), кои можно (или нельзя) влить в модель, а могут быть некоторым подмножеством весов исходной модели. Второй вариант еще называется в литературе Selective Finetuning и про него сегодня пойдет речь.
Метод основан на двух основных идеях:
1️⃣ Определении “чувствительных” весов, которые, с одной стороны не квантуются, а с другой являются тем самым подножеством обучаемых параметров.
2️⃣ Добавлении “шума” в процесс обучения.
Наличие выбросов в весах, затрудняющая квантизацию, известная особенность LLM (временами оспариваемая), и потому для улучшения качества их обычно держат в исходной точности. В данном случае, следуя LLM.int8() и QUIK выбросы определяются как уровне колонок матриц весов (входных размерностей). В качестве метрики берутся комбинации вида:
s_i = || D_i || ||X_i||_{\rho}^{\gamma}
Где \rho - норма весов в колонке, а \gamma - степень - {-½, 1, ½}.
D_i - это пертурбация весов, и в качестве пертурбации рассматривается операция квантования (скалярные однородная симметричная).
Выбросы, для которых значение данной метрики самое большое - не квантуются.
Градиентный спуск с шумом, примененным к весам до или после шага градиентного спуска, как известно из литературы, помогает избегать седел и плохих оптимумов, повышает устойчивость. В данной работе шум применяется до шага SGD.
Итоговый метод выглядит следующим образом:
Квантизуем с помощью GPTQ все веса, за исключением “выбросов”. Затем до-обучаем через обычный бэкпроп эти колонки, а оставшимся весам добавляем нормальный i.i.d шум с std равным шагу квантизации.
Рассматриваются 3 стратегии:
1️⃣ Pre-GIFT-SW - сначала учим с шумом и выбросам, типа готовим модель к квантизации, а затем квантизуем
2️⃣ Salient FT - квантизуем и до-обучаем только “выбросы” без шума
3️⃣ Post-GIFT-SW - квантизуем и до-обучаем “выбросы” с шумом
🔥6
Эксперименты
Эксперименты проводят на Llama-2,3 (7B, 8B, 13B). До-обучают на инструкциях TULU2 и OpenOrca. Обучение идет 500 шагов (т.е довольно короткое). “Выбросы” определяются на основе 500 сэмплов из Pile. Для оценки качества берут среднюю точность на 5 бенчмарках из lm-eval.
Есть 2 сценария:
1️⃣ Instruction-finetuning fp16 моделей. В качестве бейзлайнов рассматривается файтьюн всей модели, и LoRA/DoRA адаптеры с примерно тем же количеством обучаемых параметров. Непонятно, однако, какой шаг квантизации для шума в данном сценарии (если есть).
2️⃣ Квантизация (в 2/3/4 бита) + Instruction-finetuning. В качестве бейзлайнов берут QUIK + LoRA, и STE, где “выбросы” обучаются обычным бэкпропом, а квантизованные веса через STE. Я только не понял, QUIK без или с квантованием активаций? Больно уж грустно смотрится.
Предложенный подход достигает лучшего качества, чем адаптеры, и , как утверждается, ведет себя гораздо стабильнее от количества примеров (см Figure. 1 из статьи ). Данный график вызывает вопросы, ибо обыкновенно адаптеры демонстрируют довольно стабильную динамику обучения, будучи малыми возмущениями весов, если только не вкрутить чрезмерно большой шаг обучения.
При квантизации предложенный метод опережает QUIK и STE. Правда, есть более свежие и сильные бейзлайны - QuaRot и SpinQuant.
Из ablation study следует, что:
👉 Добавление шума во время до-обучения накидывает в качестве при квантизации в 2 бита.
👉 Большой разницы нет при разных опциях метрики определения выбросов. L∞ работает чуть лучше в среднем.
👉 Pre-GIFT-SW немного лучше при 4 битном сжатии, но при более аггресивном сжатии уступает альтернативам. При квантизации в 2 бита Post-GIFT-SW дает лучшее качество.
Вывод
Интересно, и неплохо по результатам. Сравнение с адаптерами, я бы рекомендовал перепроверить - не “шумят” они так на до-обучении. Еще любопытно, помогает ли добавление шума при до-обучении статистик квантования в методах типа PEQA и P-tuning (без V).
Эксперименты проводят на Llama-2,3 (7B, 8B, 13B). До-обучают на инструкциях TULU2 и OpenOrca. Обучение идет 500 шагов (т.е довольно короткое). “Выбросы” определяются на основе 500 сэмплов из Pile. Для оценки качества берут среднюю точность на 5 бенчмарках из lm-eval.
Есть 2 сценария:
1️⃣ Instruction-finetuning fp16 моделей. В качестве бейзлайнов рассматривается файтьюн всей модели, и LoRA/DoRA адаптеры с примерно тем же количеством обучаемых параметров. Непонятно, однако, какой шаг квантизации для шума в данном сценарии (если есть).
2️⃣ Квантизация (в 2/3/4 бита) + Instruction-finetuning. В качестве бейзлайнов берут QUIK + LoRA, и STE, где “выбросы” обучаются обычным бэкпропом, а квантизованные веса через STE. Я только не понял, QUIK без или с квантованием активаций? Больно уж грустно смотрится.
Предложенный подход достигает лучшего качества, чем адаптеры, и , как утверждается, ведет себя гораздо стабильнее от количества примеров (см Figure. 1 из статьи ). Данный график вызывает вопросы, ибо обыкновенно адаптеры демонстрируют довольно стабильную динамику обучения, будучи малыми возмущениями весов, если только не вкрутить чрезмерно большой шаг обучения.
При квантизации предложенный метод опережает QUIK и STE. Правда, есть более свежие и сильные бейзлайны - QuaRot и SpinQuant.
Из ablation study следует, что:
👉 Добавление шума во время до-обучения накидывает в качестве при квантизации в 2 бита.
👉 Большой разницы нет при разных опциях метрики определения выбросов. L∞ работает чуть лучше в среднем.
👉 Pre-GIFT-SW немного лучше при 4 битном сжатии, но при более аггресивном сжатии уступает альтернативам. При квантизации в 2 бита Post-GIFT-SW дает лучшее качество.
Вывод
Интересно, и неплохо по результатам. Сравнение с адаптерами, я бы рекомендовал перепроверить - не “шумят” они так на до-обучении. Еще любопытно, помогает ли добавление шума при до-обучении статистик квантования в методах типа PEQA и P-tuning (без V).
Вчера наша статейка Accurate Compression of Text-to-Image Diffusion Models via Vector Quantization попала в подборку статей Daily Papers на 🤗 про диффузию, что большая честь для нашего скромного авторского коллектива из Yandex Research.
Так-то не то, чтобы 🚀 science - по существу перенесли AQLM на задачу text-2-image генерации с помощью диффузионнок с учетом специфики и нюансов диффузионных архитектур (плохой из меня бизнесмен).
Проверяли подход на SDXL и SDXL-Turbo. В целом, вышло сносно, получше скалярной квантизации по качеству (c Q-Diffusion, PTQ4DM в качестве бейзлайнов). В 4 бита удается даже достичь паритета по Side-by-Side с оригинальной fp16 моделью. Здесь уместно заметить, что SbS куда более репрезентативная и содержательная характеристика, чем все эти ваши FIDы и CLIP-скоры. 3-битные модели по метрикам почти не отличаются от fp16 по метрикам, но просадка качества налицо (не у всех есть толока за пазухой, справедливости ради).
С практической точки зрения пока есть над чем работать: имеет место замедление инференса на 50%, ибо в отличие от огромных LLM, SDXL/SDXL-Turbo малипусики c 2.5B параметрами, которые кроме того обрабатывают большие тензоры активаций за раз, а не токен за токеном, потому вычисления compute-bound, а не memory-bound. Процедура деквантизации начинает сказываться на времени прогона через сеть. Потому модельки пока не выкладываем. Нынче модный FLUX-1 выглядит более перспективным кандидатом для прогонки метода, там и трансформер с большими матрицами, и 12B параметров. Как руки дойдут, попробуем и его посжимать.
Кроме того, запилили еще симпатичный сайтик а-ля Nerfies (credits to @Vahe527887).
Так-то не то, чтобы 🚀 science - по существу перенесли AQLM на задачу text-2-image генерации с помощью диффузионнок с учетом специфики и нюансов диффузионных архитектур (плохой из меня бизнесмен).
Проверяли подход на SDXL и SDXL-Turbo. В целом, вышло сносно, получше скалярной квантизации по качеству (c Q-Diffusion, PTQ4DM в качестве бейзлайнов). В 4 бита удается даже достичь паритета по Side-by-Side с оригинальной fp16 моделью. Здесь уместно заметить, что SbS куда более репрезентативная и содержательная характеристика, чем все эти ваши FIDы и CLIP-скоры. 3-битные модели по метрикам почти не отличаются от fp16 по метрикам, но просадка качества налицо (не у всех есть толока за пазухой, справедливости ради).
С практической точки зрения пока есть над чем работать: имеет место замедление инференса на 50%, ибо в отличие от огромных LLM, SDXL/SDXL-Turbo малипусики c 2.5B параметрами, которые кроме того обрабатывают большие тензоры активаций за раз, а не токен за токеном, потому вычисления compute-bound, а не memory-bound. Процедура деквантизации начинает сказываться на времени прогона через сеть. Потому модельки пока не выкладываем. Нынче модный FLUX-1 выглядит более перспективным кандидатом для прогонки метода, там и трансформер с большими матрицами, и 12B параметров. Как руки дойдут, попробуем и его посжимать.
Кроме того, запилили еще симпатичный сайтик а-ля Nerfies (credits to @Vahe527887).
🔥19👍4
Во вчерашнем посте на Kali Novskaya была разобрана статья Can LLMs Generate Novel Research Ideas? - про то, насколько хорошо нынешние LLMки умеют в генерацию наукоподобных статей.
И результат такой (вкратце) - что в некоторых аспектах (вездесущей аморфной плохоопределенной "научной новизны") по мнению ассесоров статзначимо лучше человеков. В то же время технические аспекты и экспериментальная постановка в ИИшных статьях слишком размыта и расплывчата. Да и по факту сгененированные статьи являются некоей сборной солянкой из известных фактов.
Отсюда возникает идея 🤔 - давать вступительный экзамен рецензентам Core A* конференций, где им будут даны несколько публикаций от кожаных мешков и сгененированных условной гопотой или Sonnet. Если рецензент не способен адекватно отличить зерна от плевел - отфутболиваем ⚽️.
Проблема правда одна: кто ж рецензировать то будет...
Хотя было бы интересно посмотреть на рецензию GPT-4 с системным промптом
И результат такой (вкратце) - что в некоторых аспектах (вездесущей аморфной плохоопределенной "научной новизны") по мнению ассесоров статзначимо лучше человеков. В то же время технические аспекты и экспериментальная постановка в ИИшных статьях слишком размыта и расплывчата. Да и по факту сгененированные статьи являются некоей сборной солянкой из известных фактов.
Отсюда возникает идея 🤔 - давать вступительный экзамен рецензентам Core A* конференций, где им будут даны несколько публикаций от кожаных мешков и сгененированных условной гопотой или Sonnet. Если рецензент не способен адекватно отличить зерна от плевел - отфутболиваем ⚽️.
Проблема правда одна: кто ж рецензировать то будет...
Хотя было бы интересно посмотреть на рецензию GPT-4 с системным промптом
Reviewer N2
😈.👍18
Есть просто банк, есть банк столбов и матриц, а есть банк оптимальных решеток для квантования данных из нормального распределения...
Если конректно, чуваки собрали MSE-оптимальные решетки для числа точек от 1 до 5000 для одномерного нормального распределения, и для всех размерностей от 2 до 10 и числа точек от 1 до 1450 для многомерной гауссианы (с нулевым средней и единичной матрицей ковариации).
Решетки были найдены через Lloyd-CLVQ algorithm.
Зачем оно надо? Если ваши данные нормально распределены, или вы можете каким-то образом привести их к этому виду, то такая квантизация при заданной битности будет оптимальной с точки зрения квадратичной ошибки.
[Сайт проекта]
Если конректно, чуваки собрали MSE-оптимальные решетки для числа точек от 1 до 5000 для одномерного нормального распределения, и для всех размерностей от 2 до 10 и числа точек от 1 до 1450 для многомерной гауссианы (с нулевым средней и единичной матрицей ковариации).
Решетки были найдены через Lloyd-CLVQ algorithm.
Зачем оно надо? Если ваши данные нормально распределены, или вы можете каким-то образом привести их к этому виду, то такая квантизация при заданной битности будет оптимальной с точки зрения квадратичной ошибки.
[Сайт проекта]
🔥9❤2👍1🤨1
EDEN: Communication-Efficient and Robust Distributed Mean Estimation for Federated Learning
[Статья] [Код]
Квантизовать можно веса, можно активации. А что еще можно?
Правильно, градиенты! 👻
И это очень даже нужно и полезно в контексте распределенной оптимизации.
Если обучение на многих хостах, а скорость передачи информации между серверами не очень высока, то на синхронизацию между процессами может уходить основная доля времени, а не на сами вычисления. Дабы уменьшить трафик можно сжимать 🗜 градиенты - прунить, квантовать - что душе угодно. При этом, само собой, хочется их не слишком испортить, иначе все обучение пойдет прахом.
Метод
Идея квантовать градиенты для распределенного не нова - датируется еще 2016 годом (QSGD). Но данная работа предлагает ряд интересных идей (некоторые из которых мы узнаем в литературе вышедшей позднее, а сама статья 2021 года).
1️⃣ Случайные повороты
2️⃣ Оптимальные решетки квантования
3️⃣ Случайный прунинг
4️⃣ Энтропийное кодирование
В тензоре значения могут быть распределены, вообще говоря, самым произвольным и поганым (с точки зрения удобства квантования) образом. Но, известно, что если “повернуть” тензор некоей случайной матрицей, то с большой вероятностью полученные значения будут распределены как N(0, sigma^2). В качестве случайных поворотов используют (кто бы мог подумать!) - случайные Адамаровы матрицы. Каждый процесс хранит seed генерации, а главный сервер, зная этот seed на деквантизации, может применить обратное преобразование.
Решетку квантизации (а тут дело идет о квантовании в 1 и 2 бита) надо выбирать с умом. Потому берут не абы какие, а MSE-оптимальные (для 1 бита находится аналитически, для 2-ух численно).
Дабы увеличить сжатие - можно еще случайным образом запрунить ☠️ часть весов. Маску передавать при этом не надо - она как и вращение задается состоянием случайного генератора.
Решетки квантизации можно еще дотюнить при заданном ограничении на битность посредством Entropy-Constrained Vector Quantization.
Таким образом, каждый процесс квантует градиенты, посылает главному серверу, тот их усредняет и получает средний градиент по всем батчам.
И вся эта кухня идет с теоретическими гарантиями на ошибку аппроксимации.
Эксперименты
Метод валидируют на синтетических распределениях и распределенном обучении. В качестве бейзлайнов рассматривают QSGD, Hadamard + SQ (Stohastic Quantization), Kashin + SQ. В качестве бенчей для распределенного обучения рассматривают EMNIST (с маленькой CNNкой) и Shakespeare (с LSTM). Не самые свежие и впечатляющие бенчи, но что поделаешь 😞.
EDEN наиболее точно приближает исходные данные (в сравнении с бейзлайнами), при этом по скорости не такой быстрый как QSGD, но быстрее Kashin + SQ (ближайший с точки зрения качества подход).
В 4 бита разницы вообще нет между EDEN и float обучением, в 2 и 1 бит появляется некий зазор в качестве, но не критичный, и EDEN стабильно лучше конкурентных подходов.
Вывод
Интересная с точки зрения математики и методологии статья. Кажется, что если бы публикация чуть дотерпела до тех времен (и у авторов был на то ресурс), когда квантовать LLMки стало мейнстримом предложенные идеи были бы обязательно применены в контексте сжатия LLM.
[Статья] [Код]
Квантизовать можно веса, можно активации. А что еще можно?
Правильно, градиенты! 👻
И это очень даже нужно и полезно в контексте распределенной оптимизации.
Если обучение на многих хостах, а скорость передачи информации между серверами не очень высока, то на синхронизацию между процессами может уходить основная доля времени, а не на сами вычисления. Дабы уменьшить трафик можно сжимать 🗜 градиенты - прунить, квантовать - что душе угодно. При этом, само собой, хочется их не слишком испортить, иначе все обучение пойдет прахом.
Метод
Идея квантовать градиенты для распределенного не нова - датируется еще 2016 годом (QSGD). Но данная работа предлагает ряд интересных идей (некоторые из которых мы узнаем в литературе вышедшей позднее, а сама статья 2021 года).
1️⃣ Случайные повороты
2️⃣ Оптимальные решетки квантования
3️⃣ Случайный прунинг
4️⃣ Энтропийное кодирование
В тензоре значения могут быть распределены, вообще говоря, самым произвольным и поганым (с точки зрения удобства квантования) образом. Но, известно, что если “повернуть” тензор некоей случайной матрицей, то с большой вероятностью полученные значения будут распределены как N(0, sigma^2). В качестве случайных поворотов используют (кто бы мог подумать!) - случайные Адамаровы матрицы. Каждый процесс хранит seed генерации, а главный сервер, зная этот seed на деквантизации, может применить обратное преобразование.
Решетку квантизации (а тут дело идет о квантовании в 1 и 2 бита) надо выбирать с умом. Потому берут не абы какие, а MSE-оптимальные (для 1 бита находится аналитически, для 2-ух численно).
Дабы увеличить сжатие - можно еще случайным образом запрунить ☠️ часть весов. Маску передавать при этом не надо - она как и вращение задается состоянием случайного генератора.
Решетки квантизации можно еще дотюнить при заданном ограничении на битность посредством Entropy-Constrained Vector Quantization.
Таким образом, каждый процесс квантует градиенты, посылает главному серверу, тот их усредняет и получает средний градиент по всем батчам.
И вся эта кухня идет с теоретическими гарантиями на ошибку аппроксимации.
Эксперименты
Метод валидируют на синтетических распределениях и распределенном обучении. В качестве бейзлайнов рассматривают QSGD, Hadamard + SQ (Stohastic Quantization), Kashin + SQ. В качестве бенчей для распределенного обучения рассматривают EMNIST (с маленькой CNNкой) и Shakespeare (с LSTM). Не самые свежие и впечатляющие бенчи, но что поделаешь 😞.
EDEN наиболее точно приближает исходные данные (в сравнении с бейзлайнами), при этом по скорости не такой быстрый как QSGD, но быстрее Kashin + SQ (ближайший с точки зрения качества подход).
В 4 бита разницы вообще нет между EDEN и float обучением, в 2 и 1 бит появляется некий зазор в качестве, но не критичный, и EDEN стабильно лучше конкурентных подходов.
Вывод
Интересная с точки зрения математики и методологии статья. Кажется, что если бы публикация чуть дотерпела до тех времен (и у авторов был на то ресурс), когда квантовать LLMки стало мейнстримом предложенные идеи были бы обязательно применены в контексте сжатия LLM.
👍7❤1🔥1🤯1
Fine-tuning LLMs to 1.58bit: extreme quantization made easy
[Блог] [Model card] [PR с добавлением BitNet в transformers]
Некоторое время назад здесь мы разбирали статью от мелкософта про BitNet-1.58, где авторам удалось завести QAT c тернарной квантизацией и добиться вполне сносного качества при обучении с нуля.
Лицехваты 🤗 недавно опубликовали весьма занятный и содержательный длиннопост про дообучение LLM в 1.58 (log2(3)) бит.
Метод и эксперименты
Напомню, что при тернарной квантизации каждый элемент тензора принимает одно из трех значений - {-1, 0, 1} и еще есть floating-point масштаб (вместо absmax берут среднюю абсолютную величину элемента тензора).
Дабы квантовалось лучше, перед каждым линейным слоем ставится LayerNorm, и это накидывает на предобучении.
При попытке наивно затюнить Llama-3-8B в BitNet сходимость по лоссу не сильно лучше, чем у случайно инициализированной модели, и авторы начинают копать глубже.
Тернарная квантизация это довольно болезненное надругательство над весами после которого сетке тяжело оправиться, потому авторы предлагают переходить к квантованной модели не сразу а интерполировать из fp16 состояния в квантизованное постепенно. Пробуют разные функции - степенную, экспоненциальную интерполяцию. Одна опция степенной в итоге завелась лучше всего.
Шаг обучения тоже пришлось основательно подбирать, чтобы выжать приемлемое качество. После подбора удачных гиперпараметров на коротких запусках, лучшую конфигурацию учат уже 100B токенов (0.6% бюджета обучения Llama-3-8B). Тем не менее, итоговая просадка по сравнению с исходной моделью довольно значительная.
Для маленьких LM (SmolLM 125M) разогрев (постепенная квантизация) не дает улучшений.
По бенчам просадки значительные по сравнению с fp16, но лучше чем у прошлых квантизаций в похожую битность. Сам протокол сравнения спорный 🤔, не у всех вариантов есть результаты, сравниваются перплексии разных версий Llama с разными словарями. Да и Llama-3 выбивает 65, а не 49 на MMLU 5-shot.
Авторы реализовали kernel для инференса на Тритоне, который дает некоторое ускорение. А с библиотекой BitBlas ускорение становится еще более заметным. Однако работа с ней требует небыстрой компиляции.
Вывод
Неплохой результат и исследование. Но есть вопросы 🙋♂️ к протоколу замеров качества, и пока BitNet теряет слишком много в качестве для того чтобы стать общепринятой практикой. Чтобы пользоваться модельками надо поставить версию transformers из PR.
[Блог] [Model card] [PR с добавлением BitNet в transformers]
Некоторое время назад здесь мы разбирали статью от мелкософта про BitNet-1.58, где авторам удалось завести QAT c тернарной квантизацией и добиться вполне сносного качества при обучении с нуля.
Лицехваты 🤗 недавно опубликовали весьма занятный и содержательный длиннопост про дообучение LLM в 1.58 (log2(3)) бит.
Метод и эксперименты
Напомню, что при тернарной квантизации каждый элемент тензора принимает одно из трех значений - {-1, 0, 1} и еще есть floating-point масштаб (вместо absmax берут среднюю абсолютную величину элемента тензора).
Дабы квантовалось лучше, перед каждым линейным слоем ставится LayerNorm, и это накидывает на предобучении.
При попытке наивно затюнить Llama-3-8B в BitNet сходимость по лоссу не сильно лучше, чем у случайно инициализированной модели, и авторы начинают копать глубже.
Тернарная квантизация это довольно болезненное надругательство над весами после которого сетке тяжело оправиться, потому авторы предлагают переходить к квантованной модели не сразу а интерполировать из fp16 состояния в квантизованное постепенно. Пробуют разные функции - степенную, экспоненциальную интерполяцию. Одна опция степенной в итоге завелась лучше всего.
Шаг обучения тоже пришлось основательно подбирать, чтобы выжать приемлемое качество. После подбора удачных гиперпараметров на коротких запусках, лучшую конфигурацию учат уже 100B токенов (0.6% бюджета обучения Llama-3-8B). Тем не менее, итоговая просадка по сравнению с исходной моделью довольно значительная.
Для маленьких LM (SmolLM 125M) разогрев (постепенная квантизация) не дает улучшений.
По бенчам просадки значительные по сравнению с fp16, но лучше чем у прошлых квантизаций в похожую битность. Сам протокол сравнения спорный 🤔, не у всех вариантов есть результаты, сравниваются перплексии разных версий Llama с разными словарями. Да и Llama-3 выбивает 65, а не 49 на MMLU 5-shot.
Авторы реализовали kernel для инференса на Тритоне, который дает некоторое ускорение. А с библиотекой BitBlas ускорение становится еще более заметным. Однако работа с ней требует небыстрой компиляции.
Вывод
Неплохой результат и исследование. Но есть вопросы 🙋♂️ к протоколу замеров качества, и пока BitNet теряет слишком много в качестве для того чтобы стать общепринятой практикой. Чтобы пользоваться модельками надо поставить версию transformers из PR.
👍3🤔1
Зальем чем-нить на ICLR и засядем за квантование.
Тока сначала надо раздобыть веса.
Тока сначала надо раздобыть веса.
🔥12
VPTQ: EXTREME LOW-BIT VECTOR POST-TRAINING QUANTIZATION FOR LARGE LANGUAGE MODELS
[Статья][Код]
Пристегните ремни, а лучше прячьтесь в бомбоубежище 💣. Будет горячо 🔥.
На текущий момент, векторная квантизация является наиболее эффективным (с точки зрения качества) методом сжатия LLM (AQLM, AQLM+PV, QuiP#, GPTVQ). И ребяты из китайского 🇨🇳 отделения Мелкософта выкатили Yet Another Vector Quantization for LLM.
Метод
По существу метод представляет собой GPTQ с векторной (single- и multi- codebook) квантизацией с рядом нюансов:
1️⃣ Эффективной инициализацией центроид (векторов в кодбуках). Используют Hessian-weighted K-Means. Для полного Гессиана считать сложно и дорого, потому в этом месте прибегают в диагональному приближению. Подобное я в свое время заводил, когда работали с коллегами над SpQR и думали про неоднородную 1-мерную квантизацию.
2️⃣ Точность квантизации за счет повышения битности можно повысить за счет нескольких кодбуков. Используют Residual Quantization как в QuIP#, где новые кодбуки приближают ошибку квантования с прошлых шагов.
3️⃣ Outlierы. Находят outlierные колонки (входные размерности), которые выдают большую ошибку на выходе слоя и квантуют их отдельно. Часть без outlierов обрабатывается стандартным алгоритмом.
Далее прогоняется поблочный файнтьюн, как в AQLM/QuiP# и end-to-end дистилляция.
Результаты
Метод валидируют на моделях семейств 🦙-2, 🦙-3 и Mistral. В качестве бейзлайнов берут GPTVQ, AQLM, QuiP#.
И далее начинается самое интересное 😈)
Они применяют поблочный и end-2-end finetuning, как в QuIP# и обновленной версии AQLM, но при этом сравниваются со старой версией AQLM (а надо тогда с таблицей 4, где метрики на 7B и 13B примерно такие же, и немного даже лучше на 70B).
При сравнении скорости инференса разных подходов криво завели QuIP#, при этом мотивируя низкую скорость тем, что перемножение на Адамаровы матрицы требует
Статья вышла в конце сентября, но про PV-tuning и QTIP , вышедшие в конце мая и июня, соотвественно, ни слова, как будто весть еще не успела дойти по Великому Шелковому Пути 🐫 в Поднебесную.
И вишенка 🍒 на торте 🍰 - отсутствие AQLM/QuIP# среди бейзлайнов мотивируют тем, что модели новые, никто не выложил, а самим впадлу и напряжно квантовать. На что можно тактично заметить, что AQLM модели лежат на хабе, и не просто лежат, а там еще есть и метрики, с которыми можно сравниться. Только одна беда - они несколько получше будут. Что делать, притворимся, что мы ничего не видели 🙈)
Моделей, кстати неплохо так выложили.
[Статья][Код]
Пристегните ремни, а лучше прячьтесь в бомбоубежище 💣. Будет горячо 🔥.
На текущий момент, векторная квантизация является наиболее эффективным (с точки зрения качества) методом сжатия LLM (AQLM, AQLM+PV, QuiP#, GPTVQ). И ребяты из китайского 🇨🇳 отделения Мелкософта выкатили Yet Another Vector Quantization for LLM.
Метод
По существу метод представляет собой GPTQ с векторной (single- и multi- codebook) квантизацией с рядом нюансов:
1️⃣ Эффективной инициализацией центроид (векторов в кодбуках). Используют Hessian-weighted K-Means. Для полного Гессиана считать сложно и дорого, потому в этом месте прибегают в диагональному приближению. Подобное я в свое время заводил, когда работали с коллегами над SpQR и думали про неоднородную 1-мерную квантизацию.
2️⃣ Точность квантизации за счет повышения битности можно повысить за счет нескольких кодбуков. Используют Residual Quantization как в QuIP#, где новые кодбуки приближают ошибку квантования с прошлых шагов.
3️⃣ Outlierы. Находят outlierные колонки (входные размерности), которые выдают большую ошибку на выходе слоя и квантуют их отдельно. Часть без outlierов обрабатывается стандартным алгоритмом.
Далее прогоняется поблочный файнтьюн, как в AQLM/QuiP# и end-to-end дистилляция.
Результаты
Метод валидируют на моделях семейств 🦙-2, 🦙-3 и Mistral. В качестве бейзлайнов берут GPTVQ, AQLM, QuiP#.
И далее начинается самое интересное 😈)
Они применяют поблочный и end-2-end finetuning, как в QuIP# и обновленной версии AQLM, но при этом сравниваются со старой версией AQLM (а надо тогда с таблицей 4, где метрики на 7B и 13B примерно такие же, и немного даже лучше на 70B).
При сравнении скорости инференса разных подходов криво завели QuIP#, при этом мотивируя низкую скорость тем, что перемножение на Адамаровы матрицы требует
O(n^2)
операций, хотя любой детсадовец знает, что O(n log n)
. Статья вышла в конце сентября, но про PV-tuning и QTIP , вышедшие в конце мая и июня, соотвественно, ни слова, как будто весть еще не успела дойти по Великому Шелковому Пути 🐫 в Поднебесную.
И вишенка 🍒 на торте 🍰 - отсутствие AQLM/QuIP# среди бейзлайнов мотивируют тем, что модели новые, никто не выложил, а самим впадлу и напряжно квантовать. На что можно тактично заметить, что AQLM модели лежат на хабе, и не просто лежат, а там еще есть и метрики, с которыми можно сравниться. Только одна беда - они несколько получше будут. Что делать, притворимся, что мы ничего не видели 🙈)
Моделей, кстати неплохо так выложили.
❤12😁8👍3
Лернинг Рейт, Бач Сайз и Вейт Декей звучат как отличные имена для героев фантастического романа.
😁29❤1
За что большое уважение компании Meta, помимо многого прочего, так это за реально подробные и занимательные технические отчеты.
Техрепорты по 🦙-м были довольно содержательными и полезными, и, полагаю, во многом опредилили направления развития LLM, хоть и основывались по большей части на идеях из прошлых работ.
Отчет по MovieGen не уступает по качеству и полноте содержания техрепортам по Llama и может служить своего рода обзором (с рассмотрением и ablation) современных техник и достижений в области генеративных моделей.
Прекрасная работа, @asanakoy!
Сам бы у себя разобрал в серии постов, но лучше, чем причастный к созданию MovieGen, это никто не сделает)
Техрепорты по 🦙-м были довольно содержательными и полезными, и, полагаю, во многом опредилили направления развития LLM, хоть и основывались по большей части на идеях из прошлых работ.
Отчет по MovieGen не уступает по качеству и полноте содержания техрепортам по Llama и может служить своего рода обзором (с рассмотрением и ablation) современных техник и достижений в области генеративных моделей.
Прекрасная работа, @asanakoy!
Сам бы у себя разобрал в серии постов, но лучше, чем причастный к созданию MovieGen, это никто не сделает)
👍19