Controlling Text-to-Image Diffusion by Orthogonal Finetuning
[Статья]
[Cтраница проекта]
[Страница документации в PEFT]
Введение
Разнообразные адаптеры и методы PEFT стали общепринятым способом дообучения. Хороший адаптер должен быстро и эффективно обучаться выучивать специфику конкретной задачи, при этом сохраняя накопленное с таким трудом в модели знание.
Пресловутая LoRA обучает добавки низкого ранга к матрицам весов.
В этой статье же предлагается обучать ортогональное преобразование исходной матрицы весов (Orthogonal Finetuning), сохраняя похожесть разных признаков между друг другом.
Метод
Авторы мотивируют использование ортогональных преобразований следующим экспериментом: обучают сверточный автоэнкодер с уменьшением разрешения и последующим повышением не нормируя веса и активации. Если на инференсе модели вход и веса сверточного фильтра на их норму, то результат реконструкции не испортится, в то время, как если сохранить только информацию о величине фильтра и входной активации - то на выходе будет что-то не очень красивое. То есть угол между векторами более информативен, чем норма.
Конечный адаптер имеет вид
Но как добиться условия на ортогональность матрицы R? Авторы используют параметризацию Кэли -
Однако в исходной форме метод имеет слишком много обучаемых параметров -
В качестве конкретного примера, авторы сравнивают LoRA адаптер ранга 8 и OFT с 8 блоками. В первом случае - 2048 обучаемых параметров, против 960 во втором. Однако, для больших матриц выигрыш будет не пользу OFT, ибо OFT масштабируется квадратично по размерам исходных весов)
Вообще говоря, ортогональное преобразование, может далеко увести от исходных весов, потому авторы предлагают накладывать условие, чтобы выученная матрица не сильно отличалась от единичной. Такая модификация называется COFT (Constrained OFT). Предполагая малое отклонение от единичной матрицы, выполнение данного условия можно достичь с помощью проектированного градиентного спуска. Утверждается, что данная опция обладает большей стабильностью
[Статья]
[Cтраница проекта]
[Страница документации в PEFT]
Введение
Разнообразные адаптеры и методы PEFT стали общепринятым способом дообучения. Хороший адаптер должен быстро и эффективно обучаться выучивать специфику конкретной задачи, при этом сохраняя накопленное с таким трудом в модели знание.
Пресловутая LoRA обучает добавки низкого ранга к матрицам весов.
В этой статье же предлагается обучать ортогональное преобразование исходной матрицы весов (Orthogonal Finetuning), сохраняя похожесть разных признаков между друг другом.
Метод
Авторы мотивируют использование ортогональных преобразований следующим экспериментом: обучают сверточный автоэнкодер с уменьшением разрешения и последующим повышением не нормируя веса и активации. Если на инференсе модели вход и веса сверточного фильтра на их норму, то результат реконструкции не испортится, в то время, как если сохранить только информацию о величине фильтра и входной активации - то на выходе будет что-то не очень красивое. То есть угол между векторами более информативен, чем норма.
Конечный адаптер имеет вид
W = R W0, где R - обучаемое ортогональное преобразование, а W0 - исходная матрица весов. Такой адаптер сохраняет сущность с устрашающим и внушающим благоговейный трепет названием - гиперсферическую энергию. Однако суть на самом деле проста, и по факту мы хотим сохранить попарные углы между весами матриц. Но как добиться условия на ортогональность матрицы R? Авторы используют параметризацию Кэли -
R = (1 + Q)(1 - Q)^-1 c кососимметричной Q = -Q^T. Однако в исходной форме метод имеет слишком много обучаемых параметров -
O(d^2), примерно столько же, сколько и исходная сеть. Потому предлагается рассматривать блочно-диагональные адаптеры, тем самым снизив сложность до O(d^2/r), r - число блоков. Можно еще сильнее уменьшить число параметров, продублировав адаптер во всех блоках (до O(d^2/r^2)). В качестве конкретного примера, авторы сравнивают LoRA адаптер ранга 8 и OFT с 8 блоками. В первом случае - 2048 обучаемых параметров, против 960 во втором. Однако, для больших матриц выигрыш будет не пользу OFT, ибо OFT масштабируется квадратично по размерам исходных весов)
Вообще говоря, ортогональное преобразование, может далеко увести от исходных весов, потому авторы предлагают накладывать условие, чтобы выученная матрица не сильно отличалась от единичной. Такая модификация называется COFT (Constrained OFT). Предполагая малое отклонение от единичной матрицы, выполнение данного условия можно достичь с помощью проектированного градиентного спуска. Утверждается, что данная опция обладает большей стабильностью
👍2
Эксперименты
Метод валидируют на DreamBooth и других задачах conditional генерации - на основе keypoints и сегментационных масок.
Дообучение всей модели методом DreamBooth сколь-либо продолжительное время приводит к генерации сильных артефактов. LoRA выглядит несколько лучше, но все равно начинает генерировать артефакты. OFT и COFT даже после большого числа шагов выдают хорошие картинки в приведенных примерах.
По метрикам качества - похожести DINO эмбедов, соотвествия текстовому и картичному промпту OFT опережает бейзлайны.
В задаче контролируемой генерации лиц по ключевым точкам OFT сходится быстрее чем конкуретные LoRA, Text2Image адаптер и ControlNet, при этом достигая более высокого качества.
Аналогичный результат достигается и для генерации по маскам сегментации.
Вывод
Выглядит как вполне неплохой и разумный адаптер. Основной областью применения скорее всего будут диффузионные модели, тушки из компьютерного зрения и небольшие по современным меркам языковые модели. А вообще интересный вопрос - какой самый эффективный адаптер по числу параметров в зависимости от задачи, и какие исходя из каких соображений следует выбирать тот или иной метод PEFT под конкретное приложение?
Метод валидируют на DreamBooth и других задачах conditional генерации - на основе keypoints и сегментационных масок.
Дообучение всей модели методом DreamBooth сколь-либо продолжительное время приводит к генерации сильных артефактов. LoRA выглядит несколько лучше, но все равно начинает генерировать артефакты. OFT и COFT даже после большого числа шагов выдают хорошие картинки в приведенных примерах.
По метрикам качества - похожести DINO эмбедов, соотвествия текстовому и картичному промпту OFT опережает бейзлайны.
В задаче контролируемой генерации лиц по ключевым точкам OFT сходится быстрее чем конкуретные LoRA, Text2Image адаптер и ControlNet, при этом достигая более высокого качества.
Аналогичный результат достигается и для генерации по маскам сегментации.
Вывод
Выглядит как вполне неплохой и разумный адаптер. Основной областью применения скорее всего будут диффузионные модели, тушки из компьютерного зрения и небольшие по современным меркам языковые модели. А вообще интересный вопрос - какой самый эффективный адаптер по числу параметров в зависимости от задачи, и какие исходя из каких соображений следует выбирать тот или иной метод PEFT под конкретное приложение?
👍1
SwitchHead: Accelerating Transformers with Mixture-of-Experts Attention
[Статья] [Код]
Смеси экспертов для MLP блоков были неоднократно с успехом применены в больших языковых моделях (в частности в недавно вышедшей Mixtral, и GPT-4 по слухам тоже ей является). Однако, кроме MLP в трансформере можно добиться ускорения за счет использования за счет части голов в MultiHeadAttention. На больших последовательностях Attention слои требуют много вычислений и памяти, и использование части голов даст некоторую экономию.
Даже если бы статья была анонимной, то по цитированиям Шмидхубера при каждом упоминании Attention, можно было бы угадать одного из авторов)
Метод
Наивный подход был бы следующий - иметь предиктор, который предсказывает скор для каждой головы и берет только с наибольшим скором. Однако, проблема в том, что при авторегрессивной генерации могут активироваться разные эксперты и в итоге придется все равно хранить кэш keys и values на все головы (проблема, правда, нынче лечится MultiQueryAttention).
Авторы предлагают следующее - иметь экспертов внутри каждой головы и активировать только часть экспертов на прямом проходе. В этом по сути и вся суть метода.
Эксперименты
Подход валидируют на TransformerXL, который обучают на С4/peS2o 100к шагов. Не самый типичный setting для 2023. Качество замеряют по перплексии на WikiText103, C4, peS2o.
В бейзлайновом трансформере 2 или 10 голов (с одинаковым числом параметров), в предложенном SwitchHead 2 головы с 5 экспертами. Во всех случаях смесь экспертов имеет столько же параметров, сколько и исходная модель. В разных конфигурациях Q, K, V и O проекции могут быть как разбиты на экспертов, так и нет. Перплексия везде примерно +/- одинаковая и будто бы метод не проигрывает сильно в качестве исходному трансформеру с 10 головами (и уверенно опережает двуглавый). Вопрос в том, правда, насколько хорош бейзлайн.
Сравниваются с работой MoA, при том же качестве их подход гораздо экономичнее по памяти, с экономией в ~4-5 раз, в то время, как у MoA выходит ~1.5-3 раза.
Далее, можно сделать MLP тоже экспертами и получить Switch-All модель.
И Switch-All при примерно той же перплексии расходует снова заметно меньше памяти.
Выводы
Специализация attention в трансформере - полезное направление, однако эксперименты выглядят не слишком убедительно. Нет и замеров ускорения, а лишь сравнение MACs между SwitchHead(All) и бейзлайном. Да и в популярном нынче MultiQueryAttention можно было бы активировать часть query проекций и иметь профит в плане памяти и вычислений.
[Статья] [Код]
Смеси экспертов для MLP блоков были неоднократно с успехом применены в больших языковых моделях (в частности в недавно вышедшей Mixtral, и GPT-4 по слухам тоже ей является). Однако, кроме MLP в трансформере можно добиться ускорения за счет использования за счет части голов в MultiHeadAttention. На больших последовательностях Attention слои требуют много вычислений и памяти, и использование части голов даст некоторую экономию.
Даже если бы статья была анонимной, то по цитированиям Шмидхубера при каждом упоминании Attention, можно было бы угадать одного из авторов)
Метод
Наивный подход был бы следующий - иметь предиктор, который предсказывает скор для каждой головы и берет только с наибольшим скором. Однако, проблема в том, что при авторегрессивной генерации могут активироваться разные эксперты и в итоге придется все равно хранить кэш keys и values на все головы (проблема, правда, нынче лечится MultiQueryAttention).
Авторы предлагают следующее - иметь экспертов внутри каждой головы и активировать только часть экспертов на прямом проходе. В этом по сути и вся суть метода.
Эксперименты
Подход валидируют на TransformerXL, который обучают на С4/peS2o 100к шагов. Не самый типичный setting для 2023. Качество замеряют по перплексии на WikiText103, C4, peS2o.
В бейзлайновом трансформере 2 или 10 голов (с одинаковым числом параметров), в предложенном SwitchHead 2 головы с 5 экспертами. Во всех случаях смесь экспертов имеет столько же параметров, сколько и исходная модель. В разных конфигурациях Q, K, V и O проекции могут быть как разбиты на экспертов, так и нет. Перплексия везде примерно +/- одинаковая и будто бы метод не проигрывает сильно в качестве исходному трансформеру с 10 головами (и уверенно опережает двуглавый). Вопрос в том, правда, насколько хорош бейзлайн.
Сравниваются с работой MoA, при том же качестве их подход гораздо экономичнее по памяти, с экономией в ~4-5 раз, в то время, как у MoA выходит ~1.5-3 раза.
Далее, можно сделать MLP тоже экспертами и получить Switch-All модель.
И Switch-All при примерно той же перплексии расходует снова заметно меньше памяти.
Выводы
Специализация attention в трансформере - полезное направление, однако эксперименты выглядят не слишком убедительно. Нет и замеров ускорения, а лишь сравнение MACs между SwitchHead(All) и бейзлайном. Да и в популярном нынче MultiQueryAttention можно было бы активировать часть query проекций и иметь профит в плане памяти и вычислений.
👍7
Не проплаченной рекламы пост)
Год близится к концу и я захотел поделиться подборкой ТГ каналов по машинке и глубокому обучению. С многими из них многие из вас уже, полагаю, знакомы, но некоторые среди них могут стать для кого-то открытием. Список не имеет четкого порядка и элементы ниже в том порядке, в каком доставались из сознания автора:
1) gonzo-обзоры ML статей
Классный канал с детальными и подробными разборами, во многом вдохновивший меня на создание собственного канала. Кроме того там публикуются новости из мира AI, математики, философии и всякая сборная солянка.
2) Abstract DL
Короткие разборы и анонсы разных вкусностей из мира CV, NLP.
3) Concise Research
Краткий, но исчерпывающий рисерч в области компьютерного зрения и не только. Если хотите в компактной форме, но при этом в достаточном содержании понять суть статьи - вам сюда.
4) Сиолошная
Новости из мира NLP, где иногда разьясняют всякие прикольные штуки и фишки в современном NLP. Новости из мира AI и еще про космос.
5) Что-то на DL-ском
Классный блог с аннотациями статей по NLP, CV, находками автора и обзором полезных инструментов и хаков.
6) Love, Death, Transformers
Классная подборка всякой всячины из мира AI, от образовательных статей до социальных и житейских моментов. Культура, мемы, веселье.
7) Voronkov_AI_RU_public: ChatGPT, langchain, LLM
Анонсы и новости из мира глубокого обучения и AI. Преимущественно про NLP, но не только. Сборник новостей, образовательных и обучающих материалов с разных источников.
8 ) grokaem себя
Милый и уютный канал, где время от времени появляются хорошие статьи, проясняющие тот или иной концепт из области NLP. Саморазвитие, опросы, разьяснение и разбор распостраненных и не очень ошибок. Классные истории из жизни с счастливым концом.
9) Machine Learning
Краткие анонсы и ссылки на разные новинки в области машинного обучения. Преимущественно прикладного толка и с ориентацией на репозитории, где есть разные красивые демки.
10) Awesome DL
Отличный канал с разборами статей из разных областей DL разной длины, в том числе и с видеоразборами.
11) Kali Novskaya
Преимущественно про NLP, но и не только. Подборка новостей из разных областей. Мемы, культура, искусство.
12) эйай ньюз
Просто самый лучший канал.
Год близится к концу и я захотел поделиться подборкой ТГ каналов по машинке и глубокому обучению. С многими из них многие из вас уже, полагаю, знакомы, но некоторые среди них могут стать для кого-то открытием. Список не имеет четкого порядка и элементы ниже в том порядке, в каком доставались из сознания автора:
1) gonzo-обзоры ML статей
Классный канал с детальными и подробными разборами, во многом вдохновивший меня на создание собственного канала. Кроме того там публикуются новости из мира AI, математики, философии и всякая сборная солянка.
2) Abstract DL
Короткие разборы и анонсы разных вкусностей из мира CV, NLP.
3) Concise Research
Краткий, но исчерпывающий рисерч в области компьютерного зрения и не только. Если хотите в компактной форме, но при этом в достаточном содержании понять суть статьи - вам сюда.
4) Сиолошная
Новости из мира NLP, где иногда разьясняют всякие прикольные штуки и фишки в современном NLP. Новости из мира AI и еще про космос.
5) Что-то на DL-ском
Классный блог с аннотациями статей по NLP, CV, находками автора и обзором полезных инструментов и хаков.
6) Love, Death, Transformers
Классная подборка всякой всячины из мира AI, от образовательных статей до социальных и житейских моментов. Культура, мемы, веселье.
7) Voronkov_AI_RU_public: ChatGPT, langchain, LLM
Анонсы и новости из мира глубокого обучения и AI. Преимущественно про NLP, но не только. Сборник новостей, образовательных и обучающих материалов с разных источников.
8 ) grokaem себя
Милый и уютный канал, где время от времени появляются хорошие статьи, проясняющие тот или иной концепт из области NLP. Саморазвитие, опросы, разьяснение и разбор распостраненных и не очень ошибок. Классные истории из жизни с счастливым концом.
9) Machine Learning
Краткие анонсы и ссылки на разные новинки в области машинного обучения. Преимущественно прикладного толка и с ориентацией на репозитории, где есть разные красивые демки.
10) Awesome DL
Отличный канал с разборами статей из разных областей DL разной длины, в том числе и с видеоразборами.
11) Kali Novskaya
Преимущественно про NLP, но и не только. Подборка новостей из разных областей. Мемы, культура, искусство.
12) эйай ньюз
Просто самый лучший канал.
❤12🔥3🥰2👍1
Your Student is Better Than Expected: Adaptive Teacher-Student Collaboration for Text-Conditional Diffusion Models
[Статья]
[Код]
Введение
Человечество добилось значительных успехов в ускорении диффузионных моделей путем разработки более совершенных солверов и различных стратегий дистилляции по шагам. Однако, методы генерирующие в один или малое количество шагов так или иначе уступают многошаговым моделям — либо по качеству генераций, либо по их разнообразию.
Отсюда возникает мысль 🤔️️️️️️ — а что если не отправлять сразу учителя на пенсию, а призывать по мере необходимости, когда ученик не способен достичь желаемого качества. За счёт этого можно убить двух зайцев — иметь в среднем более быстрый инференс и хорошее качество.
И на данном соображении построена рассматриваемая статья.
Метод
В качестве учителя берут предобученную Stable Diffusion (SD v1.5 или SDXL) модель. Ученика инициализируют весами учителя и проводят процедуру Consistency Distillation.
Полученная модель может за малое число шагов (в большинстве экспериментов используют 5) выдавать генерации неплохого качества. Тем не менее, дистиллированная модель все же уступает учителю по оценке разметчиков (50% за учителя против 30% за студента).
Дальнейший анализ весьма примечателен и интересен.
Чем меньше модель—ученик подражает учителю, тем больше доля голосов ассесоров, сделавших выбор в пользу модели-студента. (Примечание: гистограммы отнормированы на суммарное число побед конкретной модели, а не число побед для данного расстояния. То есть 60% побед на правой гистограмме означает, что среди побед студента 60% из них достигаются, когда расстояние между студентом и учителем велико)
Характерно, что модель—ученик отходит от учителя сильнее на более сложных картинках (для оценки сложности картинки используется ICNet модель) и на длинных текстовых промптах. По всей видимости, и то и другое реже встречается в данных, потому у ученика появляется больший простор для фантазии.
Возвращаясь к исходной задаче — как же все таки понять, использовать ли ученика или учителя? И для этого используют ImageReward модель, которая оценивает качество генерации. Если качество генерации выше некоторого порога, то используется генерация студента, иначе прибегаем к помощи учителя. Оптимальный порог оценивается по валидационной выборке как некоторый квантиль ImageReward для учителя. корреляция с человеческими предпочтениями не идеальная — около 60%, но лучшего результата текущие методы оценки качества изображений пока не могут достичь.
Предлагается два варианта использования учителя:
1️⃣️️️️️ Regeneration (генерация с нуля)
2️⃣️️️️️ Refinement (неполное зашумление результата ученика с последующим расшумлением)
[Статья]
[Код]
Введение
Человечество добилось значительных успехов в ускорении диффузионных моделей путем разработки более совершенных солверов и различных стратегий дистилляции по шагам. Однако, методы генерирующие в один или малое количество шагов так или иначе уступают многошаговым моделям — либо по качеству генераций, либо по их разнообразию.
Отсюда возникает мысль 🤔️️️️️️ — а что если не отправлять сразу учителя на пенсию, а призывать по мере необходимости, когда ученик не способен достичь желаемого качества. За счёт этого можно убить двух зайцев — иметь в среднем более быстрый инференс и хорошее качество.
И на данном соображении построена рассматриваемая статья.
Метод
В качестве учителя берут предобученную Stable Diffusion (SD v1.5 или SDXL) модель. Ученика инициализируют весами учителя и проводят процедуру Consistency Distillation.
Полученная модель может за малое число шагов (в большинстве экспериментов используют 5) выдавать генерации неплохого качества. Тем не менее, дистиллированная модель все же уступает учителю по оценке разметчиков (50% за учителя против 30% за студента).
Дальнейший анализ весьма примечателен и интересен.
Чем меньше модель—ученик подражает учителю, тем больше доля голосов ассесоров, сделавших выбор в пользу модели-студента. (Примечание: гистограммы отнормированы на суммарное число побед конкретной модели, а не число побед для данного расстояния. То есть 60% побед на правой гистограмме означает, что среди побед студента 60% из них достигаются, когда расстояние между студентом и учителем велико)
Характерно, что модель—ученик отходит от учителя сильнее на более сложных картинках (для оценки сложности картинки используется ICNet модель) и на длинных текстовых промптах. По всей видимости, и то и другое реже встречается в данных, потому у ученика появляется больший простор для фантазии.
Возвращаясь к исходной задаче — как же все таки понять, использовать ли ученика или учителя? И для этого используют ImageReward модель, которая оценивает качество генерации. Если качество генерации выше некоторого порога, то используется генерация студента, иначе прибегаем к помощи учителя. Оптимальный порог оценивается по валидационной выборке как некоторый квантиль ImageReward для учителя. корреляция с человеческими предпочтениями не идеальная — около 60%, но лучшего результата текущие методы оценки качества изображений пока не могут достичь.
Предлагается два варианта использования учителя:
1️⃣️️️️️ Regeneration (генерация с нуля)
2️⃣️️️️️ Refinement (неполное зашумление результата ученика с последующим расшумлением)
🔥3
Результаты
В первой серии экспериментов используют SDv1.5 в качестве ученика—учителя.
Consistency дистилляция проводится на 80M подвыборке LAION-2B.
Сравнивают модели на промтах из LAION-Aesthetics и COCO2014-Сaptions.
Тандем ученик—учитель с 10 шагами генерации в среднем примерно равен DPM и DDIM с 25 шагами и 50 шагами генерации учителя, соответственно. При 15 шагах даже чуть лучше. При сравнении использовался Refinement подход.
Адаптивный подход лучше, чем просто Refinement.
Что касается автоматических метрик, Refinement и Regeneration имеют примерно одинаковый image reward, Regeneration лучший CLIP (alignment с текстом), а Refinement лучший FID (мера соответствия распределению реальных картинок).
Тандем ученик—учитель поверх SDXL сравнивается с SDXL c 50 шагами солвера и опережает SDXL-turbo.
Эффективность метода ограничена в первую очередь несовершенством процедуры оценки качества генерации студента, авторы показывают, что при наличии идеального асессора генераций, можно было бы добиться значительного разрыва с учительским бейзлайном.
Кроме того метод неплохо сохраняет разнообразие генераций учителя и хорошо себя показывает в text-guided image editing и контролируемой генерации.
Выводы
Красивая идея и результаты, подкрепленные занимательным анализом. Использование нескольких моделей для решения конкретной задачи выглядит действительно сильным подходом, уже неоднократно возникавшим в литературе . Основная сложность именно в том, как оптимально выбрать ту или иную модель и сколько моделей и какие мы можем позволить держать в памяти и применять.
В первой серии экспериментов используют SDv1.5 в качестве ученика—учителя.
Consistency дистилляция проводится на 80M подвыборке LAION-2B.
Сравнивают модели на промтах из LAION-Aesthetics и COCO2014-Сaptions.
Тандем ученик—учитель с 10 шагами генерации в среднем примерно равен DPM и DDIM с 25 шагами и 50 шагами генерации учителя, соответственно. При 15 шагах даже чуть лучше. При сравнении использовался Refinement подход.
Адаптивный подход лучше, чем просто Refinement.
Что касается автоматических метрик, Refinement и Regeneration имеют примерно одинаковый image reward, Regeneration лучший CLIP (alignment с текстом), а Refinement лучший FID (мера соответствия распределению реальных картинок).
Тандем ученик—учитель поверх SDXL сравнивается с SDXL c 50 шагами солвера и опережает SDXL-turbo.
Эффективность метода ограничена в первую очередь несовершенством процедуры оценки качества генерации студента, авторы показывают, что при наличии идеального асессора генераций, можно было бы добиться значительного разрыва с учительским бейзлайном.
Кроме того метод неплохо сохраняет разнообразие генераций учителя и хорошо себя показывает в text-guided image editing и контролируемой генерации.
Выводы
Красивая идея и результаты, подкрепленные занимательным анализом. Использование нескольких моделей для решения конкретной задачи выглядит действительно сильным подходом, уже неоднократно возникавшим в литературе . Основная сложность именно в том, как оптимально выбрать ту или иную модель и сколько моделей и какие мы можем позволить держать в памяти и применять.
Denoising Diffusion Bridge Models
[Статья][Кода нет, и не обещают]
Введение
Диффузионые модели показывают на данный момент наилучшее качество во множестве задач и приложений. Однако сама постановка диффузионного процесса, где пример из целевого распределения превращается в шум из нормального распределения, а модель учится обращать данный процесс, предполагает на одном конце распределение реальных данных, а на другом - чистый шум, что не очень подходит для задач image-to-image, таких как перенос стиля, контролируемая генерация и super-resolution.
Существуют подходы, которые с тем или иным качеством справляются с вышеупомянутыми задачами. SDEdit зашумляет входной пример и расшумляет обратно, обуславливаясь на целевую задачу, и типичные архитектуры диффузионных SR моделей конкатенируют на входе шум и картинку низкого разрешения. Но эти архитектурные ухищрения требуют требуют тонкой настройки и выглядят несколько неестественно? Возможно ли дать такую постановку задачи, которая бы напрямую решала задачу отображения из одного распределения в другое?
И в данной статье предлагают ответ на данный вопрос.
Метод
Сам подход основан на стандартной теории диффузионных процессов. Однако берется специфичная форма процесса, такая, что удовлетворяет заданным граничным условиям на обоих концах (то что и хочется для задач перехода из одного распределения в другое). В литературе такой процесс известен как Doob h-преобразование. При заданной начальной точке он называется диффузионным мостом.
Далее авторы предлагают формулировку такого процесса для Variance Preserving (с постоянной дисперсией) и Variance Exploding (с растущей дисперсией) расписания шума.
Предложенный подход обобщает генерацию из шума в целевое распределение и OT-Flow-Matching / Rectified Flow.
Результаты
Метод проверяют на задачах image2image - edges2handbags и DIODE-256×256 (как я понял, это не про электронику, а генерацию сцены по маске сегментации) и unconditional генерации.
Предложенный подход заметно опережает GAN-based Pix2Pix и подходы, основанные на диффузионных моделях и работу I^2SB, использующую мосты Шредингера, по метрикам FID и LPIPS.
Unconditional генерация из шума тоже работает весьма достойно на CIFAR и FFHQ, выдавая качество сравнимое с EDM при том же количестве шагов генерации.
Значение guidance в VP постановке значительно влияет на качество, и почти не влияет для VE диффузии. Кроме того метод, имеет дополнительный гиперпараметр, определяющий промежуточный шаг в солвере, который тоже следует подбирать аккуратно для наилучшего качетства.
Вывод
Интересный и разумный подход, адаптирующий имеющуюся диффузионые техники на задачи перехода из одного распределения в другое. Было бы интересно провалидировать подход на большем масштабе и более сложных задачах (с широким распределением данных и высоким разрешением изображений).
[Статья][Кода нет, и не обещают]
Введение
Диффузионые модели показывают на данный момент наилучшее качество во множестве задач и приложений. Однако сама постановка диффузионного процесса, где пример из целевого распределения превращается в шум из нормального распределения, а модель учится обращать данный процесс, предполагает на одном конце распределение реальных данных, а на другом - чистый шум, что не очень подходит для задач image-to-image, таких как перенос стиля, контролируемая генерация и super-resolution.
Существуют подходы, которые с тем или иным качеством справляются с вышеупомянутыми задачами. SDEdit зашумляет входной пример и расшумляет обратно, обуславливаясь на целевую задачу, и типичные архитектуры диффузионных SR моделей конкатенируют на входе шум и картинку низкого разрешения. Но эти архитектурные ухищрения требуют требуют тонкой настройки и выглядят несколько неестественно? Возможно ли дать такую постановку задачи, которая бы напрямую решала задачу отображения из одного распределения в другое?
И в данной статье предлагают ответ на данный вопрос.
Метод
Сам подход основан на стандартной теории диффузионных процессов. Однако берется специфичная форма процесса, такая, что удовлетворяет заданным граничным условиям на обоих концах (то что и хочется для задач перехода из одного распределения в другое). В литературе такой процесс известен как Doob h-преобразование. При заданной начальной точке он называется диффузионным мостом.
Далее авторы предлагают формулировку такого процесса для Variance Preserving (с постоянной дисперсией) и Variance Exploding (с растущей дисперсией) расписания шума.
Предложенный подход обобщает генерацию из шума в целевое распределение и OT-Flow-Matching / Rectified Flow.
Результаты
Метод проверяют на задачах image2image - edges2handbags и DIODE-256×256 (как я понял, это не про электронику, а генерацию сцены по маске сегментации) и unconditional генерации.
Предложенный подход заметно опережает GAN-based Pix2Pix и подходы, основанные на диффузионных моделях и работу I^2SB, использующую мосты Шредингера, по метрикам FID и LPIPS.
Unconditional генерация из шума тоже работает весьма достойно на CIFAR и FFHQ, выдавая качество сравнимое с EDM при том же количестве шагов генерации.
Значение guidance в VP постановке значительно влияет на качество, и почти не влияет для VE диффузии. Кроме того метод, имеет дополнительный гиперпараметр, определяющий промежуточный шаг в солвере, который тоже следует подбирать аккуратно для наилучшего качетства.
Вывод
Интересный и разумный подход, адаптирующий имеющуюся диффузионые техники на задачи перехода из одного распределения в другое. Было бы интересно провалидировать подход на большем масштабе и более сложных задачах (с широким распределением данных и высоким разрешением изображений).
❤2
Вот и подходит к концу 2023 год, выдавшийся очень насыщенным и непростым в различных сферах, но богатый на научные открытия и яркие результаты. Крутые LLMки, запитанные разнообразными Instruction finetuning техниками и датасетами, улучшенные генеративные модели, прогресс в компьютерном зрении, аудио, видео и мульмодальных моделях и многое другое - вот что дал нам этот год.
А какие у вас ожидания от следующего года? Прорыва в какой области и какого результата вы ждете большего всего?
А какие у вас ожидания от следующего года? Прорыва в какой области и какого результата вы ждете большего всего?
❤1
Что вы больше всего ждете в 2024 году?
Anonymous Poll
16%
Создание AGI
17%
Генеративные модели, умеющие в одношаговую генерацию с нужным количеством пальцев
20%
LLM на калькуляторе
9%
LLM, рецензирующих ведущие конференции по ML
38%
Круглые тензоры в Pytorch и JAX
☃1
Начнем год с маленькой викторинки.
Создадим пустые тензоры из одного элемента следующим образом:
И заполним их следующим образом:
1)
2)
Создадим пустые тензоры из одного элемента следующим образом:
x = [torch.empty(size=(1,))] * 2И заполним их следующим образом:
1)
for i in range(2):
x[i] = torch.full(size=(1,), fill_value=i)2)
for i in range(2):
x[i].data = torch.full(size=(1,), fill_value=i)Что будет на выходе в случаях 1 и 2?
Anonymous Quiz
13%
1) [tensor([0]), tensor([0])], 2) [tensor([0]), tensor([1])]
21%
1) [tensor([0]), tensor([1])], 2) [tensor([0]), tensor([1])]
48%
1) [tensor([0]), tensor([1])], 2) [tensor([1]), tensor([1])]
18%
1) [tensor([1]), tensor([1])], 2) [tensor([1]), tensor([1])]
🙏5🗿5💅4
Ответ на задачку и обьяснение (за спойлером):
1) [tensor([0]), tensor([1])], 2) [tensor([1]), tensor([1])]
Почему так?
Выражение x = [torch.empty(size=(1,))] * 2 создает один обьект в памяти, на который продублированы ссылаются x[0], x[1].
В случае 1) обращение происходит по имени, и x[0] теперь ссылается на обьект tensor([0]) и x[1] на обьект tensor([1]).
В случае 2) обращение происходит по ссылке, и сначала обьект, на который ссылаются как x[0] и x[1] записывается значение tensor([0]), а затем tensor([1]).
Как ваш покорный слуга сам напоролся на сий вроде бы очевидный, но заковыристый нюанс?
Когда работал с torch.distributed.gather заполнял тензоры на разных процессах (которые вообще говоря должны были генерировать разные значения), чтобы собрать затем на главном потоке. Какого же было мое удивление, когда увидел копии одного и того же тензора в полученном списке:)
Почему так?
Выражение x = [torch.empty(size=(1,))] * 2 создает один обьект в памяти, на который продублированы ссылаются x[0], x[1].
В случае 1) обращение происходит по имени, и x[0] теперь ссылается на обьект tensor([0]) и x[1] на обьект tensor([1]).
В случае 2) обращение происходит по ссылке, и сначала обьект, на который ссылаются как x[0] и x[1] записывается значение tensor([0]), а затем tensor([1]).
Как ваш покорный слуга сам напоролся на сий вроде бы очевидный, но заковыристый нюанс?
Когда работал с torch.distributed.gather заполнял тензоры на разных процессах (которые вообще говоря должны были генерировать разные значения), чтобы собрать затем на главном потоке. Какого же было мое удивление, когда увидел копии одного и того же тензора в полученном списке:)
👍3
The LLM Surgeon
[Статья] [Кода нет]
На текущий моментнаиболее успешные методы по прунингу и квантизации моделей так или иначе опираются на некоторое приближение матрицы вторых производных для определения важных весов и отпимальной сжатой конфигурации.
Чем больше модель, тем дороже становится вычисление любого приближения, и многие подходы не масштабируются на современные LLM.
SparseGPT / GPTQ и их производные оптимизируют квадратичную ошибку на выходе линейного слоя / свертки, но ничего не знают о целевой функции потерь. Чтобы учесть целевую функцию, надо так или иначе вычислить градиент (или его прокси) и агрегировать.
И на помощь приходит приближение матрицы Фишера для данного слоя (линейного или свертки) кронекеровским разложением
И в данной работе, получилось успешно применить кронекеровское разложение в фреймворке Optimal Brain Surgeon.
Метод
Суть метода в следующем - берут Optimal Brain Surgeon, где вместо настоящего Гессиана используется Кронекеровское разложение и выводят формулы для неструктурированного / 2:4 и структурированного прунинга. Для более высоких уровней прореживания метод применяют итеративно - между итерациями прунинга дообучают LoRA добавки и пересчитывают матрицу Фишера (до 40 раз при прореживании до 50%). Недешевое удовольствие, но качество подымает почти гарантированно.
[Статья] [Кода нет]
На текущий моментнаиболее успешные методы по прунингу и квантизации моделей так или иначе опираются на некоторое приближение матрицы вторых производных для определения важных весов и отпимальной сжатой конфигурации.
Чем больше модель, тем дороже становится вычисление любого приближения, и многие подходы не масштабируются на современные LLM.
SparseGPT / GPTQ и их производные оптимизируют квадратичную ошибку на выходе линейного слоя / свертки, но ничего не знают о целевой функции потерь. Чтобы учесть целевую функцию, надо так или иначе вычислить градиент (или его прокси) и агрегировать.
И на помощь приходит приближение матрицы Фишера для данного слоя (линейного или свертки) кронекеровским разложением
F = A \otimes G. Первый фактор (матрица ковариации входных активаций) идентичен Гессиану квадратичной ошибки для данного слоя. Второй фактор - матрица ковариации градиентов по выходу слоя. Кронекеровское разложение точно в предположении независимости градиентов по выходу слоя от активаций, которое вообще говоря не выполняется, но попытка - не пытка.И в данной работе, получилось успешно применить кронекеровское разложение в фреймворке Optimal Brain Surgeon.
Метод
Суть метода в следующем - берут Optimal Brain Surgeon, где вместо настоящего Гессиана используется Кронекеровское разложение и выводят формулы для неструктурированного / 2:4 и структурированного прунинга. Для более высоких уровней прореживания метод применяют итеративно - между итерациями прунинга дообучают LoRA добавки и пересчитывают матрицу Фишера (до 40 раз при прореживании до 50%). Недешевое удовольствие, но качество подымает почти гарантированно.
👍4
Результаты
Метод валидируют на моделях семейства OPT и Llama-2-7b (13b в приложении). Для замера качества традиционно берут перплексию на Wikitext2 (lm_eval_harness 0-shot в приложении). LLM Surgeon уверенно опережает SparseGPT и диагональное Кронекеровское приближение как структурированном, так и неструктурированном пруниге. Конкурентные подходы ломают модель уже при слабом прореживании в то время как LLMSurgeon с серьезной просадкой, но тем не менее сохраняет какое-то качество вплоть до 50%.
Ожидаемо пересчет гессиана и дообучение низкоранговых добавок дает заметный прирост в качестве.
Так как метод оценивает важность параметров на уровне конечного слоя прореживать слои можно неоднородно. Однако, полученное распределение слоев после фильтрации по глобальному порогу сравнительно однородное для LLM Surgeon - первый и последний слой прореживаются несколько сильнее, чем слои посередине (немного неожиданно). Разные виды проекций (Q, K, V, O proj и в FC1/2) тоже прореживаются достаточно однородно (в отличие от Global Magnitude и диагональных приближений).
Вывод
Весьма достойный результат, хоть и недешевой ценой. Выглядит на текущий момент, как SOTA метод для языковых моделей размером порядка нескольких миллиардов параметров, где блочно-диагонально Фишеровское приближение становится непомерно дорогим, а предложенный метод (требующий дополнительной памяти порядка 2 размеров модели) является еще подьемным (пусть даже с шардингом, но в пределах одной вычислительной ноды). Метод заметно дороже, чем SparseGPT, который отрабатывает за 5 минут на LLama-2 на одной GPU, против 2 с лишним дней на 4x H100 для LLM Surgeon. Учитывая запрос сообщества на ускорение LLM, цена вполне приемлемая. Было бы полезно скомбинировать метод с квантизацией.
Метод валидируют на моделях семейства OPT и Llama-2-7b (13b в приложении). Для замера качества традиционно берут перплексию на Wikitext2 (lm_eval_harness 0-shot в приложении). LLM Surgeon уверенно опережает SparseGPT и диагональное Кронекеровское приближение как структурированном, так и неструктурированном пруниге. Конкурентные подходы ломают модель уже при слабом прореживании в то время как LLMSurgeon с серьезной просадкой, но тем не менее сохраняет какое-то качество вплоть до 50%.
Ожидаемо пересчет гессиана и дообучение низкоранговых добавок дает заметный прирост в качестве.
Так как метод оценивает важность параметров на уровне конечного слоя прореживать слои можно неоднородно. Однако, полученное распределение слоев после фильтрации по глобальному порогу сравнительно однородное для LLM Surgeon - первый и последний слой прореживаются несколько сильнее, чем слои посередине (немного неожиданно). Разные виды проекций (Q, K, V, O proj и в FC1/2) тоже прореживаются достаточно однородно (в отличие от Global Magnitude и диагональных приближений).
Вывод
Весьма достойный результат, хоть и недешевой ценой. Выглядит на текущий момент, как SOTA метод для языковых моделей размером порядка нескольких миллиардов параметров, где блочно-диагонально Фишеровское приближение становится непомерно дорогим, а предложенный метод (требующий дополнительной памяти порядка 2 размеров модели) является еще подьемным (пусть даже с шардингом, но в пределах одной вычислительной ноды). Метод заметно дороже, чем SparseGPT, который отрабатывает за 5 минут на LLama-2 на одной GPU, против 2 с лишним дней на 4x H100 для LLM Surgeon. Учитывая запрос сообщества на ускорение LLM, цена вполне приемлемая. Было бы полезно скомбинировать метод с квантизацией.
👍6
Вот думаю, разобрать ли у себя в блоге Mamba и PowerInfer?
Статьи уже возникали в блогах уважаемых тг каналов, но как мне кажется ряд интересных мыслей и нетривиальных наблюдений/решений все же были не затронуты в обзорах, о которых было бы интересно поведать.
Статьи уже возникали в блогах уважаемых тг каналов, но как мне кажется ряд интересных мыслей и нетривиальных наблюдений/решений все же были не затронуты в обзорах, о которых было бы интересно поведать.
Разобрать Mamba и PowerInfer?
Anonymous Poll
77%
Гони обзор на обе
19%
Только Mamba
4%
Только PowerInfer
0%
Ничаво
Mamba: Linear-Time Sequence Modeling with Selective State Spaces
[Статья] [Код]
Введение
Поиск архитектуры, способной сбросить трансформеры с пьедестала, по своей важности можно сравнить с поиском философского камня или высокотемпературного сверхпроводника. Время от времени появляются работы (S4, RWKV, RetNet), в которых предъявляют архитектуру конкурентную или превосходящую по эффективности/масштабируемости трансформер, но по какой-то причине научное сообщество и пользователи до сих пор сидят на трансформерах, и все самые высокопроизводительные foundation модели так или иначе зиждятся на self-attention.
Одна из наиболее интересных попыток предъявить альтернативу - была серия работ по state-space моделям (S4, H3, Hyena). Однако показав хорошее качество на ряде задач, связанных с обработкой последовательностей, аудио, они не стали сильны в общей задаче языкового моделирования.
В этой работе проанализировали недостатки и ограничения существующих state-space моделей и предложили модификацию, устраняющую или минимизирующую эти недостатки.
[Статья] [Код]
Введение
Поиск архитектуры, способной сбросить трансформеры с пьедестала, по своей важности можно сравнить с поиском философского камня или высокотемпературного сверхпроводника. Время от времени появляются работы (S4, RWKV, RetNet), в которых предъявляют архитектуру конкурентную или превосходящую по эффективности/масштабируемости трансформер, но по какой-то причине научное сообщество и пользователи до сих пор сидят на трансформерах, и все самые высокопроизводительные foundation модели так или иначе зиждятся на self-attention.
Одна из наиболее интересных попыток предъявить альтернативу - была серия работ по state-space моделям (S4, H3, Hyena). Однако показав хорошее качество на ряде задач, связанных с обработкой последовательностей, аудио, они не стали сильны в общей задаче языкового моделирования.
В этой работе проанализировали недостатки и ограничения существующих state-space моделей и предложили модификацию, устраняющую или минимизирующую эти недостатки.
🔥2
Метод
State-space модель по существу - это рекуррентная модель вида (в дискретной форме):
Где x - вход, h - скрытое состояние, y - выход. A, B, C - обучаемые матрицы параметров, параметризованные специальным образом. Есть еще шаг дискретизации и преобразование из непрерывной формулировки в дискретную с некоторым шагом дискретизации \Delta. В отличие от типичной рекуррентной архитектуры а-ля vanilla RNN, LSTM между h и y нет нелинейности. Благодаря этому формулу можно развернуть и представить в виде свертки, которая эффективно параллезируется на GPU.
Важно, что проекции A, B, C не зависят от времени, и динамика состояний сети обладает свойством Linear Time Invariance (LTI). Данное свойство накладывает ограничения на возможность моделирование определённых зависимостей и авторы рассматривают пару синтетических задач, которые принципиально не решаются state-space моделями с LTI:
1⃣️️️️️️ Selective Copying, где нужно запомнить и вывести несколько элементов последовательности с произвольным расстоянием между запоминаемыми элементами.
2⃣️️️️️️ Induction Heads, где приняв начало словосочетания на вход, на основе полученной ранее информации - продолжить. Если на входе Harry, выдать следует Potter (прочитай другую книгу…).
Данные задачи требуют от модели способности работать с неоднородными временными последовательностями и адаптивно учитывать контекст, которой нет в state-space моделях со статичными сверточными ядрами.
Авторы вводят два понятия с похожим звучанием, но разным значением:
🔵️️️️️️ Efficiency (компактное внутреннее состояние и дешевизна вычислений)
🔵️️️️️️ Effectiveness (способность хранить релевантную информацию)
Трансформер effective - так как может хранить в себе (во всяком случае в теории) контекст произвольной длины. Но не efficient, ибо состояние (key и valuе кэш) растет пропорционально длине последовательности, что делает инференс трансформера дорогим по памяти и вычислениям. Причем большинство хранимой информации избыточно.
Рекуррентные сети efficient, ибо хранят состояние постоянного размера, не зависящего от длины последовательности. Но в это маленькое состояние не всегда удается на практике впихнуть всю релевантную информацию.
Идеальная модель, должна потому адаптивно отбирать нужный для задачи контекст.
Чтобы добиться данного свойства, авторы предлагают делать параметры state-space модели зависящими от входа - проекции A, B, C, как и шаг \Delta. Последнее позволяет заодно учитывать и временную неоднородность.
Развернуть рекуррентную зависимость как для LTI state-space модели теперь не получится. Вместо этого авторы реализуют эффективный алгоритм parallel scan на кастомных чудо-kernel дающий высокую производительность.
Чтобы иметь возможность запихнуть много информации в скрытое состояние, используют большой expansion фактор внутри SSM (10-100). Современные GPU зачастую memory-bound, потому чтобы не тратить драгоценные миллисекунды на перекачку данных из HBM в кэш GPU, это расширенное состояние материализуется только на GPU.
И в духе Flash Attention (один из авторов - автор Flash Attention) чтобы дополнительно сэкономить на памяти и ее трансфере, промежуточные состояния отправляются в
Далее авторы, предлагают полностью однородную архитектуру, состоящую только из Mamba блоков, в то время как трансформер - перемежающиеся attention блоки и MLP, и прошлые state-space модели состояли собственно из state-space слоев и gated MLP.
Так как алгоритм впридачу к свойствам S4 новый тип state-space слоев обладает селективностью (selective) и использует сканирование (scan) для краткости авторы обозначают новый тип архитектуры - S6.
State-space модель по существу - это рекуррентная модель вида (в дискретной форме):
h_{t} = A h_{t-1} + B x_{t}
y_{t} = C h_{t}Где x - вход, h - скрытое состояние, y - выход. A, B, C - обучаемые матрицы параметров, параметризованные специальным образом. Есть еще шаг дискретизации и преобразование из непрерывной формулировки в дискретную с некоторым шагом дискретизации \Delta. В отличие от типичной рекуррентной архитектуры а-ля vanilla RNN, LSTM между h и y нет нелинейности. Благодаря этому формулу можно развернуть и представить в виде свертки, которая эффективно параллезируется на GPU.
Важно, что проекции A, B, C не зависят от времени, и динамика состояний сети обладает свойством Linear Time Invariance (LTI). Данное свойство накладывает ограничения на возможность моделирование определённых зависимостей и авторы рассматривают пару синтетических задач, которые принципиально не решаются state-space моделями с LTI:
1⃣️️️️️️ Selective Copying, где нужно запомнить и вывести несколько элементов последовательности с произвольным расстоянием между запоминаемыми элементами.
2⃣️️️️️️ Induction Heads, где приняв начало словосочетания на вход, на основе полученной ранее информации - продолжить. Если на входе Harry, выдать следует Potter (прочитай другую книгу…).
Данные задачи требуют от модели способности работать с неоднородными временными последовательностями и адаптивно учитывать контекст, которой нет в state-space моделях со статичными сверточными ядрами.
Авторы вводят два понятия с похожим звучанием, но разным значением:
🔵️️️️️️ Efficiency (компактное внутреннее состояние и дешевизна вычислений)
🔵️️️️️️ Effectiveness (способность хранить релевантную информацию)
Трансформер effective - так как может хранить в себе (во всяком случае в теории) контекст произвольной длины. Но не efficient, ибо состояние (key и valuе кэш) растет пропорционально длине последовательности, что делает инференс трансформера дорогим по памяти и вычислениям. Причем большинство хранимой информации избыточно.
Рекуррентные сети efficient, ибо хранят состояние постоянного размера, не зависящего от длины последовательности. Но в это маленькое состояние не всегда удается на практике впихнуть всю релевантную информацию.
Идеальная модель, должна потому адаптивно отбирать нужный для задачи контекст.
Чтобы добиться данного свойства, авторы предлагают делать параметры state-space модели зависящими от входа - проекции A, B, C, как и шаг \Delta. Последнее позволяет заодно учитывать и временную неоднородность.
Развернуть рекуррентную зависимость как для LTI state-space модели теперь не получится. Вместо этого авторы реализуют эффективный алгоритм parallel scan на кастомных чудо-kernel дающий высокую производительность.
Чтобы иметь возможность запихнуть много информации в скрытое состояние, используют большой expansion фактор внутри SSM (10-100). Современные GPU зачастую memory-bound, потому чтобы не тратить драгоценные миллисекунды на перекачку данных из HBM в кэш GPU, это расширенное состояние материализуется только на GPU.
И в духе Flash Attention (один из авторов - автор Flash Attention) чтобы дополнительно сэкономить на памяти и ее трансфере, промежуточные состояния отправляются в
/dev/null после прямого прохода и пересчитываются снова на обратном проходе.Далее авторы, предлагают полностью однородную архитектуру, состоящую только из Mamba блоков, в то время как трансформер - перемежающиеся attention блоки и MLP, и прошлые state-space модели состояли собственно из state-space слоев и gated MLP.
Так как алгоритм впридачу к свойствам S4 новый тип state-space слоев обладает селективностью (selective) и использует сканирование (scan) для краткости авторы обозначают новый тип архитектуры - S6.
👍5🔥1
Результаты
Авторы валидируют новую архитектуру на следующих задачах:
1⃣️️️️️️ Selective Copy и Induction Heads
2⃣️️️️️️ Language model pretraining
3⃣️️️️️️ Моделирование ДНК
4⃣️️️️️️ Моделирование и генерация аудио
На Selective Copying S4, H3 и Hyena выдают качество порядка 20-60% в то время как S6 достигает почти 100% качества. На Induction Heads как трансформеры с разными позиционными энкодингами, так и прошлые state-space модели не обобщаются далеко за пределы контекста увиденного на обучении. А S6 + Mamba выдает стабильно хорошее качество на последовательностях любой длины.
Mamba + S6 достойно себя показывает на языковом моделировании при обучении на Pile, демонстрируя масштабируемость на уровне и даже чуть лучше, чем трансформер архитектуры LLama-2, со всеми последними достижениями и наработками в развитии архитектур данного семейства. H3, RetNet, Hyena, RWKV заметно отстают. Обучают модели следуя предписаниям Chincilla размером от 130M до 2.8B. Mamba заметно опережает по качеству открытые модели сопоставимого размера, а иногда и вдвое большие.
На моделировании ДНК Mamba превосходит уже заметно Трансформер и state-space модели прошлых поколений. Модели, кстати, совсем небольшие, 1.4M и 7M параметров.
На генерации аудио Mamba сильно опережает по метрикам прошлую SOTA DiffWave+ SaShiMi и иные подходы. S4+ MLP, стоит отметить, работает тоже весьма достойно.
На больших последовательностях Scan из Mamba работает куда быстрее, чем даже оптимизированный FlashAttention-2. Авторская реализация Scan в десятки раз быстрее той что в торче. Благодаря эффективности по памяти в одну GPU можно пихать гораздо больший батч, чем в трансформер. Например, 6.9B Мамбе можно скормить 128 последовательностей длины 2048 и не поперхнуться.
В ablation показывают, что полезно иметь все параметры state-space модели A, B, C, \Delta обучаемыми. Но больше всего накидывает \Delta. Комплексная параметризация A не накидывает по сравнению с нормальным распределением. Expansion внутреннего состояния улучшает качество - чем больше фактор, тем больше информации можно запихнуть в скрытое состояние. По ходу работы пользуются N=64.
Вывод
Выглядит весьма впечатляюще, крутая работа с хорошим анализом и мотивацией, серьезными инженерными достижениями и убедительными результатами. Однако, все же интересно, сможет ли Mamba родить “убийцу трансформеров”, или останется одной из многих, пусть и сильных попыток ограниченной успешности. Самая большая модель, которую использовали в бенчмарках по качеству имеет размер менее 3B параметров, что немного по современным меркам. Как признаются сами авторы, масштабирование архитектуры дальше может породить новые технические сложности и вызовы. Поживем-увидим, как говорится.
Авторы валидируют новую архитектуру на следующих задачах:
1⃣️️️️️️ Selective Copy и Induction Heads
2⃣️️️️️️ Language model pretraining
3⃣️️️️️️ Моделирование ДНК
4⃣️️️️️️ Моделирование и генерация аудио
На Selective Copying S4, H3 и Hyena выдают качество порядка 20-60% в то время как S6 достигает почти 100% качества. На Induction Heads как трансформеры с разными позиционными энкодингами, так и прошлые state-space модели не обобщаются далеко за пределы контекста увиденного на обучении. А S6 + Mamba выдает стабильно хорошее качество на последовательностях любой длины.
Mamba + S6 достойно себя показывает на языковом моделировании при обучении на Pile, демонстрируя масштабируемость на уровне и даже чуть лучше, чем трансформер архитектуры LLama-2, со всеми последними достижениями и наработками в развитии архитектур данного семейства. H3, RetNet, Hyena, RWKV заметно отстают. Обучают модели следуя предписаниям Chincilla размером от 130M до 2.8B. Mamba заметно опережает по качеству открытые модели сопоставимого размера, а иногда и вдвое большие.
На моделировании ДНК Mamba превосходит уже заметно Трансформер и state-space модели прошлых поколений. Модели, кстати, совсем небольшие, 1.4M и 7M параметров.
На генерации аудио Mamba сильно опережает по метрикам прошлую SOTA DiffWave+ SaShiMi и иные подходы. S4+ MLP, стоит отметить, работает тоже весьма достойно.
На больших последовательностях Scan из Mamba работает куда быстрее, чем даже оптимизированный FlashAttention-2. Авторская реализация Scan в десятки раз быстрее той что в торче. Благодаря эффективности по памяти в одну GPU можно пихать гораздо больший батч, чем в трансформер. Например, 6.9B Мамбе можно скормить 128 последовательностей длины 2048 и не поперхнуться.
В ablation показывают, что полезно иметь все параметры state-space модели A, B, C, \Delta обучаемыми. Но больше всего накидывает \Delta. Комплексная параметризация A не накидывает по сравнению с нормальным распределением. Expansion внутреннего состояния улучшает качество - чем больше фактор, тем больше информации можно запихнуть в скрытое состояние. По ходу работы пользуются N=64.
Вывод
Выглядит весьма впечатляюще, крутая работа с хорошим анализом и мотивацией, серьезными инженерными достижениями и убедительными результатами. Однако, все же интересно, сможет ли Mamba родить “убийцу трансформеров”, или останется одной из многих, пусть и сильных попыток ограниченной успешности. Самая большая модель, которую использовали в бенчмарках по качеству имеет размер менее 3B параметров, что немного по современным меркам. Как признаются сами авторы, масштабирование архитектуры дальше может породить новые технические сложности и вызовы. Поживем-увидим, как говорится.
🔥9
PowerInfer: Fast Large Language Model Serving with a Consumer-grade GPU
[Статья] [Код]
Введение
За последние пару лет LLMки забавно прибавили в весе и многие модели не влезают в типичную пользовательскую GPU. А инферить умного ассистента локально ой как хочется.
Как выход, можно держать веса в ОЗУ или на диске и подгружать по мере необходимости - то есть заниматься offloading, Есть GPU-centic offloading, когда все вычисления происходят на GPU, и Hybrid Offloading (используемый в llama.cpp), где часть вычислений на GPU, а часть на CPU.
Основная проблема в том, что передача данных с GPU на CPU занимает уйму времени, и большая часть времени уходит на операции с памятью, пока ядра простаивают, и работает все дико медленно. Отсюда следует вывод, что ключом к ускорению является минимизация передачи данных между CPU и GPU.
Метод
В Deja Vu ранее было замечено, что в слоях трансформера активируется малая часть активаций для конкретного входа. Здесь же развили идею и заметили, что нейроны активируются неравномерно, и некоторые активируются часто - так называемые “горячие” 🔥, а другие же только время от времени (“холодные” ❄️). В частности, для OPT-30B 26% (для Llama-2-70B 43%) наиболее часто активируемых нейронов отвечают за 80% суммарной величины активаций. Статистики активаций считаются в offline режиме на подвыборке из c4 и wikipedia.
Отсюда возникает идея - держать горячие (коих не очень много) нейроны на GPU постоянно, а холодные - предсказывать с помощью специальных слоев, и подгружать по мере необходимости. Оказывается даже, что практичнее не выгружать холодные нейроны на GPU (для малых батчей), а считать на CPU.
Следующий нюанс в том, что делать со слоями, предсказывающими активные нейроны среди “холодных”. Держать их памяти - накладно для больших моделей, а наивное использование предикторов с меньшим числом параметров просаживает качество. И оказывается, что в слоях, где больше sparsity, можно использовать более слабый предиктор, и потому размер предиктора подбирается для каждого слоя отдельно.
На GPU мы работаем с матрицами фиксированного размера, и потому пользуемся эффективными ядрами для GEMM, а для CPU, обладающим куда меньше параллелизмом, отдельные вектор-векторные произведения считаются и так эффективно.
[Статья] [Код]
Введение
За последние пару лет LLMки забавно прибавили в весе и многие модели не влезают в типичную пользовательскую GPU. А инферить умного ассистента локально ой как хочется.
Как выход, можно держать веса в ОЗУ или на диске и подгружать по мере необходимости - то есть заниматься offloading, Есть GPU-centic offloading, когда все вычисления происходят на GPU, и Hybrid Offloading (используемый в llama.cpp), где часть вычислений на GPU, а часть на CPU.
Основная проблема в том, что передача данных с GPU на CPU занимает уйму времени, и большая часть времени уходит на операции с памятью, пока ядра простаивают, и работает все дико медленно. Отсюда следует вывод, что ключом к ускорению является минимизация передачи данных между CPU и GPU.
Метод
В Deja Vu ранее было замечено, что в слоях трансформера активируется малая часть активаций для конкретного входа. Здесь же развили идею и заметили, что нейроны активируются неравномерно, и некоторые активируются часто - так называемые “горячие” 🔥, а другие же только время от времени (“холодные” ❄️). В частности, для OPT-30B 26% (для Llama-2-70B 43%) наиболее часто активируемых нейронов отвечают за 80% суммарной величины активаций. Статистики активаций считаются в offline режиме на подвыборке из c4 и wikipedia.
Отсюда возникает идея - держать горячие (коих не очень много) нейроны на GPU постоянно, а холодные - предсказывать с помощью специальных слоев, и подгружать по мере необходимости. Оказывается даже, что практичнее не выгружать холодные нейроны на GPU (для малых батчей), а считать на CPU.
Следующий нюанс в том, что делать со слоями, предсказывающими активные нейроны среди “холодных”. Держать их памяти - накладно для больших моделей, а наивное использование предикторов с меньшим числом параметров просаживает качество. И оказывается, что в слоях, где больше sparsity, можно использовать более слабый предиктор, и потому размер предиктора подбирается для каждого слоя отдельно.
На GPU мы работаем с матрицами фиксированного размера, и потому пользуемся эффективными ядрами для GEMM, а для CPU, обладающим куда меньше параллелизмом, отдельные вектор-векторные произведения считаются и так эффективно.
👍5❤2
Результаты
PowerInfer тестируют на моделях семества OPT/LLama 2 и Falcon. Код основан на llama.cpp. Рассматривают 2 конфигурации, PC-high - с Intel
PowerInfer достигает впечатляющего ускорения в 11 раз на длинных последовательностях и моделях OPT-30B, Falcon-40B. На Llama 2 ускорение не столько велико (до 3х раз), но тоже весьма достойно. В PowerInfer большинство вычислений происходит на GPU, в то время, как в llama.cpp основную вычислительную нагрузку берет себя не столь быстрый CPU.
Все компоненты метода полезны, но наиболее важной, по всей видимости, является то, что критичные для вычислений нейроны сидят все время на GPU.
Метод дает ускорение и при квантизации в 4 бита.
Оверхед от предикторов холодных нейронов мизерный по сравнению с общим методом инференса.
Качество моделей не просаживается статзначимо при используемой схеме fixed + contextual sparsity (а если проверить на MMLU?).
Метод настолько хорош, что даже на относительно слабой RTX 4090 на коротких последовательностях метод уступает всего лишь на 20-30% в скорости vLLM (оптимизрованному GPU движку) на A100.
Вывод
Полезный и сильный результат, основанный на наблюдениях из прошлых работ. По существу сочетание fixed и contextual sparsity с эффективной реализацией, учитывающей специфику вычислений на CPU и GPU.
PowerInfer тестируют на моделях семества OPT/LLama 2 и Falcon. Код основан на llama.cpp. Рассматривают 2 конфигурации, PC-high - с Intel
i9-13900K и RTX 4090 PC-low и i7-12700K c RTX 2080Ti. Нормальные такие геймерские компы.PowerInfer достигает впечатляющего ускорения в 11 раз на длинных последовательностях и моделях OPT-30B, Falcon-40B. На Llama 2 ускорение не столько велико (до 3х раз), но тоже весьма достойно. В PowerInfer большинство вычислений происходит на GPU, в то время, как в llama.cpp основную вычислительную нагрузку берет себя не столь быстрый CPU.
Все компоненты метода полезны, но наиболее важной, по всей видимости, является то, что критичные для вычислений нейроны сидят все время на GPU.
Метод дает ускорение и при квантизации в 4 бита.
Оверхед от предикторов холодных нейронов мизерный по сравнению с общим методом инференса.
Качество моделей не просаживается статзначимо при используемой схеме fixed + contextual sparsity (а если проверить на MMLU?).
Метод настолько хорош, что даже на относительно слабой RTX 4090 на коротких последовательностях метод уступает всего лишь на 20-30% в скорости vLLM (оптимизрованному GPU движку) на A100.
Вывод
Полезный и сильный результат, основанный на наблюдениях из прошлых работ. По существу сочетание fixed и contextual sparsity с эффективной реализацией, учитывающей специфику вычислений на CPU и GPU.
❤4