YDS - Efficient models (Сжатие LLM).pdf
6.1 MB
Презентация с моей сегодняшней лекции про методы сжатия БЯМ на курсе Школы Анализа Данных Яндекса "Эффективные Модели".
В ней даю краткий обзор по существующим подходам, актуальным работам в области и некоторые общие рекомендации.
В ней даю краткий обзор по существующим подходам, актуальным работам в области и некоторые общие рекомендации.
Релиз несколько затянулся ("Мыши плакали, кололись, но продолжали грызть кактус"), но в итоге допинали, как появилась полноценная поддержка в vLLM
Речь пока не идет о том, что можно запустить у себя на калькуляторе, и даже на consumer-grade GPU, но в одну ноду (
Модели на 🤗
-🎯 DeepSeek-R1-GPTQ-4b-128g (квантизуются все слои в трансформерных блоках)
-🎯 DeepSeek-R1-GPTQ-4b-128g-experts (квантизуются только non-shared experts)
Код 👨💻 квантизации
- MoE-Quant
compressed_tensors
, релиз квантизованных GPTQ в 4 бита моделей DeepSeek-R1 и самого кода квантизации моделей.Речь пока не идет о том, что можно запустить у себя на калькуляторе, и даже на consumer-grade GPU, но в одну ноду (
8x A100/H100
) влезает уже без приседаний и с контекстом, достаточным для reasoning задач а-ля AIME, GPQA, MATH500.Модели на 🤗
-🎯 DeepSeek-R1-GPTQ-4b-128g (квантизуются все слои в трансформерных блоках)
-🎯 DeepSeek-R1-GPTQ-4b-128g-experts (квантизуются только non-shared experts)
Код 👨💻 квантизации
- MoE-Quant
Hogwild! Inference: Parallel LLM Generation via Concurrent Attention
[Статья] [Репозиторий][Страница проекта]
Введение
Для человеческих особей биполярное расстройство считается тяжелой психической болезнью 🤪, но для больших языковых моделей способность рассуждать в несколько взаимодействующих между собой потоков, как будто от лица разных персонажей, может быть полезна в контексте решения логических задач.
Коллеги из Yandex Research, где ваш покорный слуга выступал скорее в роли моральной поддержки, реализовали training-free подход параллельного инференса для LLM.
[Статья] [Репозиторий][Страница проекта]
Введение
Для человеческих особей биполярное расстройство считается тяжелой психической болезнью 🤪, но для больших языковых моделей способность рассуждать в несколько взаимодействующих между собой потоков, как будто от лица разных персонажей, может быть полезна в контексте решения логических задач.
Коллеги из Yandex Research, где ваш покорный слуга выступал скорее в роли моральной поддержки, реализовали training-free подход параллельного инференса для LLM.
Метод
Современные LLM видали всякое в процессе своего обучения, но прямых указаний на то, что в конкретном месте можно распараллелиться и разбить задачу на части, которые можно решать независимо скорее всего особо не встречали 🤔.
Тем не менее, рассчитывая на то, что современные модели достаточно умны, подав подходящую инструкцию и организовав нужным образом KV-кэш, можно рассчитывать на продуктивную коллаборацию потоков.
Благодаря RoPE позиционным эмбеддингам можно задавать произвольные позиции токенам в последовательностях, не меняя расположение токенов в KV-кэше в физической памяти.
Организовать кэш можно следующим образом:
📌 Interleaved layout. Процессы по очереди пишут общую память и видят чередующиеся шаги друг друга в прошлом.
📌 Contiguous layout. Процессы видят кэш другого процесса непрерывным блоком в прошлом.
📌 Combined layout. Промежуточный вариант. Процессы видят перемежающиеся шаги друг друга и текущий логический шаг рассуждения сплошным куском.
Промптинг состоит из 3 компонент:
1️⃣ Системного промпта, поясняющего LLMке, что надо работать в несколько потоков.
2️⃣ Few-shot примеры коллаборации потоков.
3️⃣ Вставка s1-like промптов, периодически спрашивающих процесс, занимается ли он полезной работой
Потенциальная польза от использования методов, что за меньшее количество прямых проходов по сети (инференс LLM memory-bound), можно прийти раньше к правильному решению, а в идеале, за счет самопроверки процессов - и поднять качество.
Эксперименты
Эксперименты прогоняли на Qwen/QwQ-32B, как на модели достаточно хорошей и влезающей легко на 1 GPU.
Подход проверяли на модифицированной версии GSM8k и наборе примеров из LIMO.
Для GSM8k сравнивается работа в 1/2/4 потока. В большинстве случаев многопроцессовый режим работает лучше стандартной генерации при фиксированном бюджете.
На LIMO разные опции Hogwild! кэша с наивным бейзлайном с выдачей ответа одним процессом в заданном формате, с early stopping промптингом и независимыми процессами (Self-consistency). Hogwild! работает стабильно лучше. Разные стратегии обработки KV-кэша близки по качеству (за исключением совсем малых бюджетов), комбинированный выглядит немного предпочтительнее альтернатив. При бюджете в 8к прямых проходов в 2 потока достигается то же качество, что и генерация одним потоком 16к токенов.
Вывод
Научно-технический процесс достиг того уровня, что LLM способны заменять даже не одного, а нескольких кожаных мешков 🧍♂. Те не менее, удачная коллаборация происходит на практике далеко не всегда - иногда процессы вроде бы договорившись, начинают все равно дублировать друг друга или просто теряются. В дальнейшем планируется развитие подхода, в частности, специальное дообучение, для улучшения взаимодействия процессов друг с другом.
Современные LLM видали всякое в процессе своего обучения, но прямых указаний на то, что в конкретном месте можно распараллелиться и разбить задачу на части, которые можно решать независимо скорее всего особо не встречали 🤔.
Тем не менее, рассчитывая на то, что современные модели достаточно умны, подав подходящую инструкцию и организовав нужным образом KV-кэш, можно рассчитывать на продуктивную коллаборацию потоков.
Благодаря RoPE позиционным эмбеддингам можно задавать произвольные позиции токенам в последовательностях, не меняя расположение токенов в KV-кэше в физической памяти.
Организовать кэш можно следующим образом:
📌 Interleaved layout. Процессы по очереди пишут общую память и видят чередующиеся шаги друг друга в прошлом.
📌 Contiguous layout. Процессы видят кэш другого процесса непрерывным блоком в прошлом.
📌 Combined layout. Промежуточный вариант. Процессы видят перемежающиеся шаги друг друга и текущий логический шаг рассуждения сплошным куском.
Промптинг состоит из 3 компонент:
1️⃣ Системного промпта, поясняющего LLMке, что надо работать в несколько потоков.
2️⃣ Few-shot примеры коллаборации потоков.
3️⃣ Вставка s1-like промптов, периодически спрашивающих процесс, занимается ли он полезной работой
Потенциальная польза от использования методов, что за меньшее количество прямых проходов по сети (инференс LLM memory-bound), можно прийти раньше к правильному решению, а в идеале, за счет самопроверки процессов - и поднять качество.
Эксперименты
Эксперименты прогоняли на Qwen/QwQ-32B, как на модели достаточно хорошей и влезающей легко на 1 GPU.
Подход проверяли на модифицированной версии GSM8k и наборе примеров из LIMO.
Для GSM8k сравнивается работа в 1/2/4 потока. В большинстве случаев многопроцессовый режим работает лучше стандартной генерации при фиксированном бюджете.
На LIMO разные опции Hogwild! кэша с наивным бейзлайном с выдачей ответа одним процессом в заданном формате, с early stopping промптингом и независимыми процессами (Self-consistency). Hogwild! работает стабильно лучше. Разные стратегии обработки KV-кэша близки по качеству (за исключением совсем малых бюджетов), комбинированный выглядит немного предпочтительнее альтернатив. При бюджете в 8к прямых проходов в 2 потока достигается то же качество, что и генерация одним потоком 16к токенов.
Вывод
Научно-технический процесс достиг того уровня, что LLM способны заменять даже не одного, а нескольких кожаных мешков 🧍♂. Те не менее, удачная коллаборация происходит на практике далеко не всегда - иногда процессы вроде бы договорившись, начинают все равно дублировать друг друга или просто теряются. В дальнейшем планируется развитие подхода, в частности, специальное дообучение, для улучшения взаимодействия процессов друг с другом.
ExLlamaV3
[Репозиторий][Чекпоинты]
На этой неделе turboderp выпустил 3-ую версию своего фреймворка для инференса LLM.
На данный момент либа находится на стадии разработки:
📌 Есть куда расти в плане оптимизации (неоптимальная утилизация на Ampere GPU)
📌 AMD GPU (если у кого есть такие) не поддерживаются
📌 Планируют накатить интеграцию с FlashInfer
📌 На данный момент поддерживаются только Llama, Qwen, Gemma2, Mistral архитектуры.
Прошлая версия ExLlama в качестве метода квантизации брала GPTQ, но в этот раз за основу взяли тяжелую артиллерию среди низкобитных методов квантизации - адаптацию QTIP, тем самым гарантируя качество значительно лучше GGUF, особенно при экстремальном сжатии (в 2 и менее бит).
По перплексии качество выглядит и правда хорошо, интересно было бы оценить на других задачах.
[Репозиторий][Чекпоинты]
На этой неделе turboderp выпустил 3-ую версию своего фреймворка для инференса LLM.
На данный момент либа находится на стадии разработки:
📌 Есть куда расти в плане оптимизации (неоптимальная утилизация на Ampere GPU)
📌 AMD GPU (если у кого есть такие) не поддерживаются
📌 Планируют накатить интеграцию с FlashInfer
📌 На данный момент поддерживаются только Llama, Qwen, Gemma2, Mistral архитектуры.
Прошлая версия ExLlama в качестве метода квантизации брала GPTQ, но в этот раз за основу взяли тяжелую артиллерию среди низкобитных методов квантизации - адаптацию QTIP, тем самым гарантируя качество значительно лучше GGUF, особенно при экстремальном сжатии (в 2 и менее бит).
По перплексии качество выглядит и правда хорошо, интересно было бы оценить на других задачах.
Старческий склероз - это не болезнь, а фундаментальное ограничение кожаных мешков на размер контекстного окна.
По итогу конференции ICLR 2025, проходящей сейчас в Сингапуре, планирую сделать подборку заинтересовавших постеров по теме EfficientDL и смежным вопросам, а также разобрать некоторые из них вид в виде лонгридов, а пока хотел бы поделиться общими впечатлениями от конференции:
1️⃣ Поездки на такие мероприятия очень полезны с научной точки зрения, так как даже пристально следя за областью, какие-то работы упускаешь из внимания, и наталкиваешься на интересные и релевантые своему ресерчу на самой конференции.
2️⃣ После данных мероприятий сильно возрастает мотивация заниматься наукой. Под впечатлением результатов от других работ, обсуждений с авторами возникает желание опробовать приглянувшуюся идейку у себя в коде или эксперименте.
3️⃣ Классная русская 🇷🇺 тусовка. На ICLR постоянно встречаешь русскоязычных ребят - как из Яндекса, AIRI, Т-банка, так и обосновавшихся в зарубежных лабах, компаниях и институтах - Google, Meta, ETH, NYU, и т.п и т.д.
4️⃣ Китайцы 🇨🇳 частенько говорят по английски плохо. Ну прям из ряда вон плохо. Как читаешь статейки прямо все по маслу, такие вычурные обороты, достойные Джейн Остин, Толкина и Байрона, а как доходит дело до устной речи, не понимают даже вроде бы довольно простые вопросы... Один даже честно признался, что не могет в инглиш и включил Google Translate с английского на китайский на планшете... Тем не менее, с некоторыми возникали прямо содержательные и интересные обсуждения. Например, с авторами SANA и SVD-Quant. Китайцы наиболее широко представлены среди всех национальностей, что , впрочем, неудивительно.
5️⃣ Имеет место явление, что на конференцию подаются несколько статей +/- про одно и тоже. На текущем ICLR я видел 3-4 статьи про комбинирование вращения + smoothquant для лучшей квантизации весов и активаций, и так же 3/4 статьи про sliding window + prefix attention с небольшими концептуальными отличиями.
6️⃣ В Сингапуре жарко снаружи и холодно внутри в помещениях. Прямо как в баньке с контрастным душем. Мерзнешь от кондиционеров и бежишь наружу париться, и когда напаришься вдоволь - идешь охлаждаться.
7️⃣ Все дорого. Прямо от слова совсем. И кофий не чета тому, что в Москве. За 8-9 баксов наливают бурду, которую в условном cofix / one price coffee постесняются налить за вчетверо меньшую сумму.
8️⃣ Город богатый и впечатляет. Возможно, меня покусал Варламов, но небоскребы тут смотрятся как-то гармонично и естественно в отличие от Москва-сити.
9️⃣ С алкашкой грустненько. И зожников много, везде видишь бегунов и велосипедистов.
1️⃣0️⃣ Дуриан выглядит классно. Прям хочется взять к себе домой эту здоровенную шишку, но запрещено законом.
1️⃣ Поездки на такие мероприятия очень полезны с научной точки зрения, так как даже пристально следя за областью, какие-то работы упускаешь из внимания, и наталкиваешься на интересные и релевантые своему ресерчу на самой конференции.
2️⃣ После данных мероприятий сильно возрастает мотивация заниматься наукой. Под впечатлением результатов от других работ, обсуждений с авторами возникает желание опробовать приглянувшуюся идейку у себя в коде или эксперименте.
3️⃣ Классная русская 🇷🇺 тусовка. На ICLR постоянно встречаешь русскоязычных ребят - как из Яндекса, AIRI, Т-банка, так и обосновавшихся в зарубежных лабах, компаниях и институтах - Google, Meta, ETH, NYU, и т.п и т.д.
4️⃣ Китайцы 🇨🇳 частенько говорят по английски плохо. Ну прям из ряда вон плохо. Как читаешь статейки прямо все по маслу, такие вычурные обороты, достойные Джейн Остин, Толкина и Байрона, а как доходит дело до устной речи, не понимают даже вроде бы довольно простые вопросы... Один даже честно признался, что не могет в инглиш и включил Google Translate с английского на китайский на планшете... Тем не менее, с некоторыми возникали прямо содержательные и интересные обсуждения. Например, с авторами SANA и SVD-Quant. Китайцы наиболее широко представлены среди всех национальностей, что , впрочем, неудивительно.
5️⃣ Имеет место явление, что на конференцию подаются несколько статей +/- про одно и тоже. На текущем ICLR я видел 3-4 статьи про комбинирование вращения + smoothquant для лучшей квантизации весов и активаций, и так же 3/4 статьи про sliding window + prefix attention с небольшими концептуальными отличиями.
6️⃣ В Сингапуре жарко снаружи и холодно внутри в помещениях. Прямо как в баньке с контрастным душем. Мерзнешь от кондиционеров и бежишь наружу париться, и когда напаришься вдоволь - идешь охлаждаться.
7️⃣ Все дорого. Прямо от слова совсем. И кофий не чета тому, что в Москве. За 8-9 баксов наливают бурду, которую в условном cofix / one price coffee постесняются налить за вчетверо меньшую сумму.
8️⃣ Город богатый и впечатляет. Возможно, меня покусал Варламов, но небоскребы тут смотрятся как-то гармонично и естественно в отличие от Москва-сити.
9️⃣ С алкашкой грустненько. И зожников много, везде видишь бегунов и велосипедистов.
1️⃣0️⃣ Дуриан выглядит классно. Прям хочется взять к себе домой эту здоровенную шишку, но запрещено законом.
Autoregressive Distillation of Diffusion Transformers
[Статья][Код]
Введение
Как известно всем еще с материнской утробы, основной проблемой диффузионных моделей в разных ипостасях является долгая итеративная генерация. Было придумано множество способов ускорения генерации за счет дистилляции, но при стремлении количества шагов к единице качество неизбежно уступает учительской модели.
В существующих подходах ускорения генерации модель принимает на вход только текущий зашумленный сэмпл и потому подвержена накоплению ошибки при более ранних шагах, что может приводить к
И команда из Meta, среди которой можно заметить небезывестного Артема, автора канала @ai_newz и просто хорошего человека предложила подход, направленный на решение вышеописанной проблемы.
[Статья][Код]
Введение
Как известно всем еще с материнской утробы, основной проблемой диффузионных моделей в разных ипостасях является долгая итеративная генерация. Было придумано множество способов ускорения генерации за счет дистилляции, но при стремлении количества шагов к единице качество неизбежно уступает учительской модели.
В существующих подходах ускорения генерации модель принимает на вход только текущий зашумленный сэмпл и потому подвержена накоплению ошибки при более ранних шагах, что может приводить к
exposure bias
(для желающих лучше разобраться в теме рекомендую посты на Concise Research @c_research).И команда из Meta, среди которой можно заметить небезывестного Артема, автора канала @ai_newz и просто хорошего человека предложила подход, направленный на решение вышеописанной проблемы.
Метод
Знание всей прошлой траектории сэмплирования при малошаговом сэмплировании потенциально дает более богатую информацию модели и позволяет скорректировать ошибку. Формально существует однозначное отображение (при детерминированном сэмплере) между шумом и конечной генерацией и хотелось бы быть как можно ближе к этой траектории.
Однако, возникает вопрос - каким образом можно подать прошлые шаги в модель?
И авторы предлагают интересное решение:
🎯 Модель на текущем шаге генерации делает Self Attention на текущий и прошлые шаги сэмплирования с причинной маской (прошлые шаги не аттендятся на будущие).
🎯 В модель добавляется дополнительный эмбеддинг на шаг зашумления. Разные шаги зашумления при генерации получают разные временные эмбеддинги. Пространственные при этом одинаковы.
🎯 Обусловливание на прошлые шаги проводится только в первых N трансформерных блоках. C одной стороны, Attention на прошлые шаги довольно шумный в поздних слоях и даже слегка просаживает качество. В то же время, Self Attention только в первых блоках удешевляет forward pass.
🎯 Выходы KV-кэшей с прошлых шагов можно закэшировать, как в авторегрессионных моделях. Дополнительные вычисления возникают только при вычислении непосресдственно Self Attention.
В качестве базового метода дистилляции используют простой Step Distillation (без Progressive), где модель-ученик пытается воспроизвести траекторию учителя. Для улучшения качества можно дополнительно накинуть адверсариальный лосс на x0.
Также предлагаются два альтернативных подхода маскирования:
1️⃣ Скользящее окно attention (обусловливание на несколько последних шагов)
2️⃣ Attention на текущий сэмпл и начальный шум.
Эксперименты
Метод валидируют на DiT-XL/2 для class-conditional генерации на ImageNet (256x256) и на проприетарной EMU модели для text-2-image. Про последнюю известно, что это трансформер на 1.7B параметров, обученный на некотором проприетарном датасете.
Для дистилляции DiT-XL/2 учителем сэмплируют ~2.5M траекторий при 25 шагах сэмплирования при этом стремясь добиться качественной 4-шаговой генерации. Качество оценивают по FID (на каком количестве сэмплов?), IS, Precision и Recall.
Обусловливание на траекторию значительно улучшает качество по сравнению с ванильной Step Distiilation. Альтернативные варианты масок будто бы чуть хуже по метрикам, но возможно, не статзначимо. GAN-лосс сильно улучшает качество и конечная модель имеет даже меньший FID, чем учитель.
В конечном варианте модель учитывает явно прошлые шаги в первых 6 блоках из 28-ми, а далее работает как исходный DiT.
При генерации 256x256 дополнительный condition на прошлые шаги (несмотря на увеличение количества токенов в Self-Attention на последнем шаге генерации почти в 4 раза) почти не замедляет генерацию. End-to-end время генерации возрастает только на 2% по сравнению с инференсом, использующим только текущий сэмпл. Однако, здесь стоит заметить, что для 256x256 последовательность токенов довольно короткая - (
На text-2-image генерации качество оценивают на CompBench - бенчмарке, оценивающем релеватность и сравнивают с другими публичными и непубличными дистилированными моделями - SDXL-Lightning, DMD2, ADD, LCM-LoRA, и ImagineFlash и по FID на MSCOCO.
Предложенный подход ARD достигает самого хорошего качества при 3-шаговой генерации слегка опережая 4-шаговую DMD2 по метрикам.
Знание всей прошлой траектории сэмплирования при малошаговом сэмплировании потенциально дает более богатую информацию модели и позволяет скорректировать ошибку. Формально существует однозначное отображение (при детерминированном сэмплере) между шумом и конечной генерацией и хотелось бы быть как можно ближе к этой траектории.
Однако, возникает вопрос - каким образом можно подать прошлые шаги в модель?
И авторы предлагают интересное решение:
🎯 Модель на текущем шаге генерации делает Self Attention на текущий и прошлые шаги сэмплирования с причинной маской (прошлые шаги не аттендятся на будущие).
🎯 В модель добавляется дополнительный эмбеддинг на шаг зашумления. Разные шаги зашумления при генерации получают разные временные эмбеддинги. Пространственные при этом одинаковы.
🎯 Обусловливание на прошлые шаги проводится только в первых N трансформерных блоках. C одной стороны, Attention на прошлые шаги довольно шумный в поздних слоях и даже слегка просаживает качество. В то же время, Self Attention только в первых блоках удешевляет forward pass.
🎯 Выходы KV-кэшей с прошлых шагов можно закэшировать, как в авторегрессионных моделях. Дополнительные вычисления возникают только при вычислении непосресдственно Self Attention.
В качестве базового метода дистилляции используют простой Step Distillation (без Progressive), где модель-ученик пытается воспроизвести траекторию учителя. Для улучшения качества можно дополнительно накинуть адверсариальный лосс на x0.
Также предлагаются два альтернативных подхода маскирования:
1️⃣ Скользящее окно attention (обусловливание на несколько последних шагов)
2️⃣ Attention на текущий сэмпл и начальный шум.
Эксперименты
Метод валидируют на DiT-XL/2 для class-conditional генерации на ImageNet (256x256) и на проприетарной EMU модели для text-2-image. Про последнюю известно, что это трансформер на 1.7B параметров, обученный на некотором проприетарном датасете.
Для дистилляции DiT-XL/2 учителем сэмплируют ~2.5M траекторий при 25 шагах сэмплирования при этом стремясь добиться качественной 4-шаговой генерации. Качество оценивают по FID (на каком количестве сэмплов?), IS, Precision и Recall.
Обусловливание на траекторию значительно улучшает качество по сравнению с ванильной Step Distiilation. Альтернативные варианты масок будто бы чуть хуже по метрикам, но возможно, не статзначимо. GAN-лосс сильно улучшает качество и конечная модель имеет даже меньший FID, чем учитель.
В конечном варианте модель учитывает явно прошлые шаги в первых 6 блоках из 28-ми, а далее работает как исходный DiT.
При генерации 256x256 дополнительный condition на прошлые шаги (несмотря на увеличение количества токенов в Self-Attention на последнем шаге генерации почти в 4 раза) почти не замедляет генерацию. End-to-end время генерации возрастает только на 2% по сравнению с инференсом, использующим только текущий сэмпл. Однако, здесь стоит заметить, что для 256x256 последовательность токенов довольно короткая - (
256 = (256/8/2)^2
токенов на одно изображение, т.е 1024 на последнем шаге). Потому вычисление Attention сравнительно недорогое и дополнительный оверхед (благодаря kv-кэшам и включению прошлых шагов только в первых блоках трансформера) должен быть действительно невелик.На text-2-image генерации качество оценивают на CompBench - бенчмарке, оценивающем релеватность и сравнивают с другими публичными и непубличными дистилированными моделями - SDXL-Lightning, DMD2, ADD, LCM-LoRA, и ImagineFlash и по FID на MSCOCO.
Предложенный подход ARD достигает самого хорошего качества при 3-шаговой генерации слегка опережая 4-шаговую DMD2 по метрикам.
Однако данное сравнение вызывает ряд вопросов:
1️⃣ Разные подходы используют разные модели. Поэтому невозможно достоверно определить, вызвана ли разница превосходством ARD метода или тем, что базовая EMU модель просто лучше бейзлайнов.
2️⃣ FID считается на 5к сэмплах, что может быть недостаточно (учитывая шумность FID). Полагаю, что Meta не испытывает такую нехватку в ресурсах, что им неподьемно посчитать метрики в стандартном протоколе на 30к промптов.
3️⃣ Авторы замечают, что на больших моделях просадки метрик меньше - и так EMU модель меньше SDXL, и просадка меньше, то якобы подход меньше сажает качество по сравнению с альтернативными дистилляционными подходами. Данный аргумент не убедителен, так как сложность дистилляции определяется рядом факторов - таких как обучающие данные, архитектура модели (UNet или DiT), специфика SFT и RL (если он был). Кроме того данная EMU модель, скорее всего. обучалась на Flow Matching.
4️⃣ Нет чисел по скорости 🏃 инференса для EMU моделей. Для генерации в 1k, где картиночных токенов становится достаточно много, Self Attention на расширенную последовательность перестанет быть настолько безобидным (даже при учете того, что он возникает только в первых блоках).
Выводы
Сама идея и реализация выглядит довольно интересной с нетривиальным архитектурными решениями. Однако, протокол сравнения в text-2-image вызывает смутные сомнения. Как мне кажется, валидация всякого метода должна проводиться в контролируемых условиях - когда предложенный метод и альтернативы находятся в равных условиях. В данном случае более, чем уместно было бы провести эксперименты на публичных моделях (SDXL, SD-3.5) при сравнении с DMD2 и прочими дистилляциями на тех же самых данных, либо уж все на EMU. А также привести время инференса для дистилированной EMU модели и какой-то user preference study 🧍♂.
1️⃣ Разные подходы используют разные модели. Поэтому невозможно достоверно определить, вызвана ли разница превосходством ARD метода или тем, что базовая EMU модель просто лучше бейзлайнов.
2️⃣ FID считается на 5к сэмплах, что может быть недостаточно (учитывая шумность FID). Полагаю, что Meta не испытывает такую нехватку в ресурсах, что им неподьемно посчитать метрики в стандартном протоколе на 30к промптов.
3️⃣ Авторы замечают, что на больших моделях просадки метрик меньше - и так EMU модель меньше SDXL, и просадка меньше, то якобы подход меньше сажает качество по сравнению с альтернативными дистилляционными подходами. Данный аргумент не убедителен, так как сложность дистилляции определяется рядом факторов - таких как обучающие данные, архитектура модели (UNet или DiT), специфика SFT и RL (если он был). Кроме того данная EMU модель, скорее всего. обучалась на Flow Matching.
4️⃣ Нет чисел по скорости 🏃 инференса для EMU моделей. Для генерации в 1k, где картиночных токенов становится достаточно много, Self Attention на расширенную последовательность перестанет быть настолько безобидным (даже при учете того, что он возникает только в первых блоках).
Выводы
Сама идея и реализация выглядит довольно интересной с нетривиальным архитектурными решениями. Однако, протокол сравнения в text-2-image вызывает смутные сомнения. Как мне кажется, валидация всякого метода должна проводиться в контролируемых условиях - когда предложенный метод и альтернативы находятся в равных условиях. В данном случае более, чем уместно было бы провести эксперименты на публичных моделях (SDXL, SD-3.5) при сравнении с DMD2 и прочими дистилляциями на тех же самых данных, либо уж все на EMU. А также привести время инференса для дистилированной EMU модели и какой-то user preference study 🧍♂.
Некоторое время назад. еще до ICLR, мы с ребятами из Т-банк Research обсудили структуру и организацию исследований в компаниях, а также настоящее и будущее мира больших языковых моделей.
Спасибо коллегам за содержательную и интересную дискуссию!
[Запись беседы]
Спасибо коллегам за содержательную и интересную дискуссию!
[Запись беседы]
Forwarded from Love. Death. Transformers.
AI модерацию очень сложно мерить — нужно учитывать разные виды контента, быстро отвечать, не false positiвить. Челы из https://whitecircle.ai озаботились и сделали первый бенчмарк для гардрейлов, а еще измерили на нем все самые популярные LLM, в том числе давая моделям поррасуждать над ответом.
Твиттер
Полистать подробнее в блоге
Твиттер
Полистать подробнее в блоге
[Статус работ]
Кажется, Юдковский решил, что слишком много сабмитов в этом году на NeurIPS, и положил overleaf дабы тормознуть AGI.
Кажется, Юдковский решил, что слишком много сабмитов в этом году на NeurIPS, и положил overleaf дабы тормознуть AGI.
Сильно запоздалый пост из-за праздников и NeurIPS дедлайна, но все же дошли 🚶♀️ в итоге руки ✋.
Ниже подборка статей с 1️⃣ постерной сессии на ICLR, которые так или иначе были связаны с EfficientDL:
MambaQuant: Quantizing the Mamba Family with Variance Aligned Rotation Methods
В данной статье акцентируют внимание на квантизации Mamba 🐍- архитектур в разных задачах. Наивная адаптация методов квантизации для трансформерных LLM просаживает сильно качество на S6 моделях. Авторы анализируют проблемные места в квантизации мамб, где накапливается большая ошибка и предлагают свое решение:
🎯 Whitening преобразование вместо Адамара в offline rotations.
🎯 Добавление scaling факторов в модель в стиле SmoothQuant, учитывающих специфику Mamba, для упрощения задачи квантизации.
Метод валидируется на ряде NLP/Vision задач, где показывает заметное улучшение по сравнению с бейзлайнами при квантизации весов и активаций.
FlashRNN: I/O-Aware Optimization of Traditional RNNs on modern hardware
Трансформеры нынче SOTA во многих приложениях, однако в некоторых задачах (типа определении четности), показывают себе плохо, а RNN - хорошо. Однако RNN плохо параллелизуются и вообще неэффективно используют ресурсы GPU. Ребята написали кастомные fused CUDA/Triton кернелы, эффективно использующие иерархию памяти, для forward и backward и смогли добиться ускорения до 50 раз по сравнению с ванильной торчовой реализацией.
OSTQuant: Refining Large Language Model Quantization with Orthogonal and Scaling Transformations for Better Distribution Fitting
В данной статье предлагают оценивать эффективность квантизации по тому, насколько плотно покрывает сетка квантизации целевое распределение. При наивном round-to-nearest подходе из-за выбросов, большая часть объема не используется. Добавление обучаемых вращений из SpinQuant и scaling факторов а-ля SmoothQuant позволяет более равномерно распределять распределение весов по решетке и тем самым улучшает качество квантования. К сожалению, на постере не было ни одного из авторов, а какой-то левый чувак, который не особо был в теме, потому содержательного разговора не получилось.
Approaching Rate-Distortion Limits in Neural Compression with Lattice Transform Coding
В данной работе авторы ставят своей задачу добиться сжатия сигналов любой природы как можно ближе к теоретико-информационному пределу. Для этого обучают автокодировщик (маленькую MLP), чтобы преобразовывать входные данные (с возможными выбросами и широким диапазоном значение), в некоторое более регулярное множество, и затем проектируют на оптимальную сетку (E8 для 8-мерной векторной квантизации, Λ24 для 24-мерной квантизации). Валидируют преимущественно на синтетике. Когда я спросил авторов про trellis-based квантизацию из QTIP, который потенциально может быть еще ближе к rate-distortion limit, авторы ответили, что не знают, что это такое.
Streamlining Redundant Layers to Compress Large Language Models
Идея простая - находим последовательность наименее важных блоков в трансформере по косинусной близости (по аналогии с The Unreasonable Ineffectiveness of the Deeper Layers), пруним, вставляем один трансформерный блок / FFN и дообучаем немного. Работает несколько лучше, чем просто прунинг блоков (кто бы сомневался).
DuoAttention: Efficient Long-Context LLM Inference with Retrieval and Streaming Heads
Головы Attention делятся на 2 типа - Retrieval heads, которые могут аттендиться на любой токен в последовательности, и Streaming heads, которые смотрят только на последние токены и attention sinks в начале последовательности. Для вторых можно сэкономить на вычислениях и памяти, храня только кэш для самого начала и некоторого фиксированного количества последних токенов. Для определения streaming голов маску в каждом attention параметризуют как взвешенную сумму полного causal attention и streaming attention. И те головы, где коэффициент streaming attention наибольший далее обрабатываются как streaming heads. Предложенная техника позволяет уменьшить кэш почти вдвое без просадки на LongBench задачах.
Ниже подборка статей с 1️⃣ постерной сессии на ICLR, которые так или иначе были связаны с EfficientDL:
MambaQuant: Quantizing the Mamba Family with Variance Aligned Rotation Methods
В данной статье акцентируют внимание на квантизации Mamba 🐍- архитектур в разных задачах. Наивная адаптация методов квантизации для трансформерных LLM просаживает сильно качество на S6 моделях. Авторы анализируют проблемные места в квантизации мамб, где накапливается большая ошибка и предлагают свое решение:
🎯 Whitening преобразование вместо Адамара в offline rotations.
🎯 Добавление scaling факторов в модель в стиле SmoothQuant, учитывающих специфику Mamba, для упрощения задачи квантизации.
Метод валидируется на ряде NLP/Vision задач, где показывает заметное улучшение по сравнению с бейзлайнами при квантизации весов и активаций.
FlashRNN: I/O-Aware Optimization of Traditional RNNs on modern hardware
Трансформеры нынче SOTA во многих приложениях, однако в некоторых задачах (типа определении четности), показывают себе плохо, а RNN - хорошо. Однако RNN плохо параллелизуются и вообще неэффективно используют ресурсы GPU. Ребята написали кастомные fused CUDA/Triton кернелы, эффективно использующие иерархию памяти, для forward и backward и смогли добиться ускорения до 50 раз по сравнению с ванильной торчовой реализацией.
OSTQuant: Refining Large Language Model Quantization with Orthogonal and Scaling Transformations for Better Distribution Fitting
В данной статье предлагают оценивать эффективность квантизации по тому, насколько плотно покрывает сетка квантизации целевое распределение. При наивном round-to-nearest подходе из-за выбросов, большая часть объема не используется. Добавление обучаемых вращений из SpinQuant и scaling факторов а-ля SmoothQuant позволяет более равномерно распределять распределение весов по решетке и тем самым улучшает качество квантования. К сожалению, на постере не было ни одного из авторов, а какой-то левый чувак, который не особо был в теме, потому содержательного разговора не получилось.
Approaching Rate-Distortion Limits in Neural Compression with Lattice Transform Coding
В данной работе авторы ставят своей задачу добиться сжатия сигналов любой природы как можно ближе к теоретико-информационному пределу. Для этого обучают автокодировщик (маленькую MLP), чтобы преобразовывать входные данные (с возможными выбросами и широким диапазоном значение), в некоторое более регулярное множество, и затем проектируют на оптимальную сетку (E8 для 8-мерной векторной квантизации, Λ24 для 24-мерной квантизации). Валидируют преимущественно на синтетике. Когда я спросил авторов про trellis-based квантизацию из QTIP, который потенциально может быть еще ближе к rate-distortion limit, авторы ответили, что не знают, что это такое.
Streamlining Redundant Layers to Compress Large Language Models
Идея простая - находим последовательность наименее важных блоков в трансформере по косинусной близости (по аналогии с The Unreasonable Ineffectiveness of the Deeper Layers), пруним, вставляем один трансформерный блок / FFN и дообучаем немного. Работает несколько лучше, чем просто прунинг блоков (кто бы сомневался).
DuoAttention: Efficient Long-Context LLM Inference with Retrieval and Streaming Heads
Головы Attention делятся на 2 типа - Retrieval heads, которые могут аттендиться на любой токен в последовательности, и Streaming heads, которые смотрят только на последние токены и attention sinks в начале последовательности. Для вторых можно сэкономить на вычислениях и памяти, храня только кэш для самого начала и некоторого фиксированного количества последних токенов. Для определения streaming голов маску в каждом attention параметризуют как взвешенную сумму полного causal attention и streaming attention. И те головы, где коэффициент streaming attention наибольший далее обрабатываются как streaming heads. Предложенная техника позволяет уменьшить кэш почти вдвое без просадки на LongBench задачах.
Beware of Calibration Data for Pruning Large Language Models
Авторы замечают, что для прунинга SparseGPT/Wanda выбор данных имеет значение. Данные из обучающей выборки предпочтительны (часть экспериментов делают на своей модели DCLM-7B), но если их нет, можно сгенерировать самой сжимаемой LLMкой взяв некоторый префикс. При генерации выкидывают последовательности с самой большой перплексией. Далее авторы обнаруживают, что сгенерированные данные ближе к обучающей выборке чем варианты калибровочных данных c4/wikitext2/red pajama. Бешеного прироста качества нет, но улучшение на 0.5-1% при 50% / 2:4 sparsity консистентно для разных моделей.
Продолжение следует... (надеюсь 😅)
Авторы замечают, что для прунинга SparseGPT/Wanda выбор данных имеет значение. Данные из обучающей выборки предпочтительны (часть экспериментов делают на своей модели DCLM-7B), но если их нет, можно сгенерировать самой сжимаемой LLMкой взяв некоторый префикс. При генерации выкидывают последовательности с самой большой перплексией. Далее авторы обнаруживают, что сгенерированные данные ближе к обучающей выборке чем варианты калибровочных данных c4/wikitext2/red pajama. Бешеного прироста качества нет, но улучшение на 0.5-1% при 50% / 2:4 sparsity консистентно для разных моделей.
Продолжение следует... (надеюсь 😅)