Появилась неофициальная версия Мистрали-7b, которая является с настоящий момент более-менее SOTA среди публичных моделей в легкой весовой категории. Однако, судя по замерам пользователей, новая версия не то, чтобы улучшилась по сравнению со своей предшественницей.
[Пост на Abstract.DL]
[Пост на Abstract.DL]
👍2
image.png
43.3 KB
По собственным замерам, наблюдаю небольшое улучшение перплексии на 8k контексте, и нестатзначимую просадку на 0-shot. Возможно, при конвертации пользователь с ником alpindale немного повредил модельку.
👍3
DenseFormer: Enhancing Information Flow in Transformers via Depth Weighted Averaging
[Статья] [Код]
Skip connections позволяют обучать по-настоящему глубокие сети. Впервые они появились в статьях про ResNet и UNet, и с тех пор было предложено множество их вариаций - DenseNet connections, CSP, и зоопарк вариаций. Тот же трансформер унаследовал структуру skip connections от ResNet.
В этой работе по существу воплотили DenseNet в трансформере.
Метод
DenseNet-like skip connections реализованы следующим образом: ключи и значения в данном блоке получаются как взвешенная сумма ключей и значений с этого и всех (или не только лишь всех) предыдущих блоков. Дополнительного оверхеда по памяти нет ❌, так как kv-кэши активации с прошлых блоков все равно придется сохранять для backpropagation или авторегрессивной генерации.
Чтобы воспроизводить поведение стандартного трансформера - веса с прошлых блоков инициализируются нулями.
Однако, все равно приходится делать массу сложений, что замедляет работу сети. Потому авторы предлагают две модификации:
1️⃣ Dilated DenseFormer. Считается взвешенная сумма только через k-слоев.
2️⃣ Periodic DenseFormer. Добавление kv проводится только для каждого k-го токена.
Обе модификации снижают объем вычислений, не снижая качество.
Эксперименты
Модели обучают OpenWebText и смотрят на перплексию на валидационной выборке. Бейзлайновые сети довольно глубокие (48 - 90 блоков) и узкие 8 голов по 64 канала. При том же числе параметров DenseFormer немного лучше трансформера по перплексии, но и медленнее. Потому авторы сравниваются еще и в сетапе с заданным временем инференса, и DenseFormer оказывается все еще эффективнее.
Dilated и Periodic опции заметно ускоряют модель, при этом не просаживая по качеству с полносвязным Denseformer.
Далее смотрят на величину выученных коэффициентов. Ожидаемо, наибольший вес имеют коэффициенты в данном блоке, но еще сильны skip connections с первым блоком. Многие веса малы по величине, тем не менее важны, и прунинг даже небольшой доли самых малых весов сажает качество.
Вывод
Дешевая и вроде бы эффективная настройка над трансформером. Однако постановка экспериментов изначально неблагоприятна для базовой модели, так как глубокие узкие модели имеют свойство тяжело обучаться. Вероятно, более широкий трансформер с тем же числом параметров отработал бы лучше. А для неглубоких сетей, скорее всего, выигрыш от конструкции незначителен. Да и много что, дающее выигрыш на малых экспериментах не воспроизводится на масштабе...
[Статья] [Код]
Skip connections позволяют обучать по-настоящему глубокие сети. Впервые они появились в статьях про ResNet и UNet, и с тех пор было предложено множество их вариаций - DenseNet connections, CSP, и зоопарк вариаций. Тот же трансформер унаследовал структуру skip connections от ResNet.
В этой работе по существу воплотили DenseNet в трансформере.
Метод
DenseNet-like skip connections реализованы следующим образом: ключи и значения в данном блоке получаются как взвешенная сумма ключей и значений с этого и всех (или не только лишь всех) предыдущих блоков. Дополнительного оверхеда по памяти нет ❌, так как kv-кэши активации с прошлых блоков все равно придется сохранять для backpropagation или авторегрессивной генерации.
Чтобы воспроизводить поведение стандартного трансформера - веса с прошлых блоков инициализируются нулями.
Однако, все равно приходится делать массу сложений, что замедляет работу сети. Потому авторы предлагают две модификации:
1️⃣ Dilated DenseFormer. Считается взвешенная сумма только через k-слоев.
2️⃣ Periodic DenseFormer. Добавление kv проводится только для каждого k-го токена.
Обе модификации снижают объем вычислений, не снижая качество.
Эксперименты
Модели обучают OpenWebText и смотрят на перплексию на валидационной выборке. Бейзлайновые сети довольно глубокие (48 - 90 блоков) и узкие 8 голов по 64 канала. При том же числе параметров DenseFormer немного лучше трансформера по перплексии, но и медленнее. Потому авторы сравниваются еще и в сетапе с заданным временем инференса, и DenseFormer оказывается все еще эффективнее.
Dilated и Periodic опции заметно ускоряют модель, при этом не просаживая по качеству с полносвязным Denseformer.
Далее смотрят на величину выученных коэффициентов. Ожидаемо, наибольший вес имеют коэффициенты в данном блоке, но еще сильны skip connections с первым блоком. Многие веса малы по величине, тем не менее важны, и прунинг даже небольшой доли самых малых весов сажает качество.
Вывод
Дешевая и вроде бы эффективная настройка над трансформером. Однако постановка экспериментов изначально неблагоприятна для базовой модели, так как глубокие узкие модели имеют свойство тяжело обучаться. Вероятно, более широкий трансформер с тем же числом параметров отработал бы лучше. А для неглубоких сетей, скорее всего, выигрыш от конструкции незначителен. Да и много что, дающее выигрыш на малых экспериментах не воспроизводится на масштабе...
🤔8👍4🔥2🐳1
Towards 1-bit Machine Learning Models
[Блогпост]
Спасибо за наводку https://www.tgoop.com/toshoseti
Сжатие и ускорение LLM нынче пользуется большим спросом, и потому существуют кожаные мешки, пытающиеся сорвать хайп на этой теме.. И вот недавно вышел воистину чудный образец.
Метод
1️⃣ Квантуют модель методом HQQ
2️⃣ Дообучают LoRA адаптер поверх квантованной модели
Все вместе называется HQQ+.
Эксперименты
Все эксперименты проводятся с Llama-2-7b. Для дообучения базовой модели берут 2.8k примеров из WikiText2, для instruction finetuning - cмесь из guanaco, orca-math, MetaMathQA, UltraFeedBack_binarized.
На базовой модели HQQ ломает полностью модель при 1-битном квантовании, но LoRA адаптер якобы выравнивает модель по качеству с 2-битным QuIP#. А 2-битная по перплексии даже лучше исходной! Переходим на 1 и 2-битные модели?
Но есть нюансы:
1️⃣ Сравнение проводится со старой версией QuIP#. Да и то, почему-то перплексия хуже, чем заявлено в официальном блоге. А новые версии AQLM и QuIP# достигают перплексии ~6.2 на wikitext2.
2️⃣ Нет замеров на каких-либо других бенчмарках (хоть c4 и 0-shotах из lm-eval-harness).
Потому наверняка просто имеем дело с оверфитом под датасет, а сами модели не рабочие где-либо еще.
При AQLM квантовании в 2 бита у нас тоже улучшилась перплексия по сравнению с fp16, но качество на 0-шотах было хуже, чем у базовой модели. Так что нихрена это не улучшение.
При instruction finetuning 1-bit HQQ снова ломает модель до уровня рандома (качество около 1 / число ответов). Но адаптер позволяет оторваться на 10% от уровня рандома. А 2-битное квантование уже близко по качеству к Llama-2-7b-chat.
Однако, снова нет сравнения с SOTA quantization methods, и бенчмарки вызывают вопросы. Llama-2-7b-chat на TruthfulQA имеет качество 57.04%, а здесь репортят 45.32%.
Выводы
По большей части лютый скам, но все же некоторая мораль есть. Адаптер поверх сжатой модели дает серьезную компенсацию даже для поломанной модели. Идея применить адаптер поверх квантованной модели не нова и ведет начало как минимум от QLoRA.
[Блогпост]
Спасибо за наводку https://www.tgoop.com/toshoseti
Сжатие и ускорение LLM нынче пользуется большим спросом, и потому существуют кожаные мешки, пытающиеся сорвать хайп на этой теме.. И вот недавно вышел воистину чудный образец.
Метод
1️⃣ Квантуют модель методом HQQ
2️⃣ Дообучают LoRA адаптер поверх квантованной модели
Все вместе называется HQQ+.
Эксперименты
Все эксперименты проводятся с Llama-2-7b. Для дообучения базовой модели берут 2.8k примеров из WikiText2, для instruction finetuning - cмесь из guanaco, orca-math, MetaMathQA, UltraFeedBack_binarized.
На базовой модели HQQ ломает полностью модель при 1-битном квантовании, но LoRA адаптер якобы выравнивает модель по качеству с 2-битным QuIP#. А 2-битная по перплексии даже лучше исходной! Переходим на 1 и 2-битные модели?
Но есть нюансы:
1️⃣ Сравнение проводится со старой версией QuIP#. Да и то, почему-то перплексия хуже, чем заявлено в официальном блоге. А новые версии AQLM и QuIP# достигают перплексии ~6.2 на wikitext2.
2️⃣ Нет замеров на каких-либо других бенчмарках (хоть c4 и 0-shotах из lm-eval-harness).
Потому наверняка просто имеем дело с оверфитом под датасет, а сами модели не рабочие где-либо еще.
This is a significant finding, as it suggests that quantization with HQQ+ not only reduces the memory footprint and computational requirements but can also potentially improve the model's language modeling performance.
При AQLM квантовании в 2 бита у нас тоже улучшилась перплексия по сравнению с fp16, но качество на 0-шотах было хуже, чем у базовой модели. Так что нихрена это не улучшение.
При instruction finetuning 1-bit HQQ снова ломает модель до уровня рандома (качество около 1 / число ответов). Но адаптер позволяет оторваться на 10% от уровня рандома. А 2-битное квантование уже близко по качеству к Llama-2-7b-chat.
Однако, снова нет сравнения с SOTA quantization methods, и бенчмарки вызывают вопросы. Llama-2-7b-chat на TruthfulQA имеет качество 57.04%, а здесь репортят 45.32%.
Выводы
По большей части лютый скам, но все же некоторая мораль есть. Адаптер поверх сжатой модели дает серьезную компенсацию даже для поломанной модели. Идея применить адаптер поверх квантованной модели не нова и ведет начало как минимум от QLoRA.
🤝5👍3
Пояснение к приколу выше.
Многие методы data-aware квантизации/прунинга зиждятся на forward хуках поверх nn.Linear, nn.Conv*d.
Многие методы data-aware квантизации/прунинга зиждятся на forward хуках поверх nn.Linear, nn.Conv*d.
Finite Scalar Quantization: VQ-VAE Made Simple
[Статья][Код скорее есть, чем нет]
Очередная статья про квантизацию, но в другом контексте 🤪.
Вариационные автокодировщики с дискретными латентными кодами показали себя в качесте неплохих генеративных моделей (VQ-VAE, VQ-VAE-2). Кроме того, их способность эффективно представлять высокоразмерные данные лежит в основе латентных диффузионных моделей.
Однако, обучение VQ-VAE - довольно нетривиальная задача, требующая тонкой настройки. В отсутствие специальных манипуляций активации отображаются в малое число кодовых векторов, в то время как основная масса кодов сидит и грустит 😞. Приходится накладывать регуляризацию, чтобы равномерно заметать кодовую книгу. Коды обновляются через EMA. Поиск ближайшего соседа также требует определенных вычислительных затрат.
В этой работе предложили использовать фиксированную гиперкубическую решетку для квантования представлений.
Метод
Входные активации отображаются в некоторый гиперкуб с заданным числом узлов L вдоль каждой размерности. Чтобы ограничить диапазон принимаемых значений, ко входу применяют
Кодовые векторы - всевозможные узлы в этой решетке, т.е размер кодовой книги L^d
Достоинством подхода является быстрое квантование - нужно просто найти нужный узел на решетке, зная координаты, и меньшее число обучаемых параметров (хотя коды и так мало весят по сравнению с энкодером и декодером). Как и стандартном VAE квантование недифференцируемо и потому градиент пробрасывается через STE.
Эксперименты
Метод валидируют на архитектурах MaskGiT (генерация изображений) и UViM (оценка глубины). На малом числе кодовых векторов стандартная формулировка работает немного лучше, с увеличением числа кодов VQ-VAE общего вида начинает страдать в качестве, в то время как у FSQ метрики монотонно уменьшаются.
По FID оптимальное качество FSQ на одном уровне с VQ. FSQ задействует все кодовые векторы, в то время как у базового VQ есть неиспользуемые коды.
На depth estimation метрики также на одном уровне с VQ-VAE общего вида.
Вывод
Занятно, что в области VQ-VAE пошли в противоположную сторону от текущих трендов квантизации LLM - от более общей векторной квантизации к скалярной. Интересно, насколько полученные коды хороши для обучения латентных диффузионных моделей?
[Статья][Код скорее есть, чем нет]
Очередная статья про квантизацию, но в другом контексте 🤪.
Вариационные автокодировщики с дискретными латентными кодами показали себя в качесте неплохих генеративных моделей (VQ-VAE, VQ-VAE-2). Кроме того, их способность эффективно представлять высокоразмерные данные лежит в основе латентных диффузионных моделей.
Однако, обучение VQ-VAE - довольно нетривиальная задача, требующая тонкой настройки. В отсутствие специальных манипуляций активации отображаются в малое число кодовых векторов, в то время как основная масса кодов сидит и грустит 😞. Приходится накладывать регуляризацию, чтобы равномерно заметать кодовую книгу. Коды обновляются через EMA. Поиск ближайшего соседа также требует определенных вычислительных затрат.
В этой работе предложили использовать фиксированную гиперкубическую решетку для квантования представлений.
Метод
Входные активации отображаются в некоторый гиперкуб с заданным числом узлов L вдоль каждой размерности. Чтобы ограничить диапазон принимаемых значений, ко входу применяют
tanh
:f(z) = [L/2] tanh(z)
[] - округление к ближайшему целомуКодовые векторы - всевозможные узлы в этой решетке, т.е размер кодовой книги L^d
,
d
- размерность латентного пространства. Причем размерность пространства небольшая - не более 10 во всех экспериментах. Достоинством подхода является быстрое квантование - нужно просто найти нужный узел на решетке, зная координаты, и меньшее число обучаемых параметров (хотя коды и так мало весят по сравнению с энкодером и декодером). Как и стандартном VAE квантование недифференцируемо и потому градиент пробрасывается через STE.
Эксперименты
Метод валидируют на архитектурах MaskGiT (генерация изображений) и UViM (оценка глубины). На малом числе кодовых векторов стандартная формулировка работает немного лучше, с увеличением числа кодов VQ-VAE общего вида начинает страдать в качестве, в то время как у FSQ метрики монотонно уменьшаются.
По FID оптимальное качество FSQ на одном уровне с VQ. FSQ задействует все кодовые векторы, в то время как у базового VQ есть неиспользуемые коды.
На depth estimation метрики также на одном уровне с VQ-VAE общего вида.
Вывод
Занятно, что в области VQ-VAE пошли в противоположную сторону от текущих трендов квантизации LLM - от более общей векторной квантизации к скалярной. Интересно, насколько полученные коды хороши для обучения латентных диффузионных моделей?
🔥9
Маленький лайфхак.
Хотите вы протестировать фунциональность вашего кода на какой-то новомодной LLM-ке, но десятки, а то и сотни гигов качать впадлу.
Да и если раздебаг на колабе, банально и не влезет.
Кроме того, при прогонке кода обычно приходится ждать ⏳, пока чекпоинт подгрузится, да и прогонка активаций через большую модель занимает время.
Решение простое:
1️⃣ Cоздаете модель через
2️⃣ Урезаете число слоев и ширину модели
3️⃣ Вуаля. Можете хоть на CPU гонять.
Допер только на днях. До этого гонял Llama-2-7b в большинстве тестов.
[Колаб с примером]
Хотите вы протестировать фунциональность вашего кода на какой-то новомодной LLM-ке, но десятки, а то и сотни гигов качать впадлу.
Да и если раздебаг на колабе, банально и не влезет.
Кроме того, при прогонке кода обычно приходится ждать ⏳, пока чекпоинт подгрузится, да и прогонка активаций через большую модель занимает время.
Решение простое:
1️⃣ Cоздаете модель через
AutoConfig
2️⃣ Урезаете число слоев и ширину модели
3️⃣ Вуаля. Можете хоть на CPU гонять.
Допер только на днях. До этого гонял Llama-2-7b в большинстве тестов.
[Колаб с примером]
🔥10✍5
Продолжение истории
Не у одного меня бомбануло с этой особенности DBRX https://www.tgoop.com/quant_prune_distill/227 и ребята подняли issue в репозитории модели.
Пользователи жалуются на отсутствие возможности конвертации в bnb формат и обучения LoRA поверх экспертов.
Потому один умелец приготовил модель, где эксперты используют
[Конвертированная модель]
Не у одного меня бомбануло с этой особенности DBRX https://www.tgoop.com/quant_prune_distill/227 и ребята подняли issue в репозитории модели.
Пользователи жалуются на отсутствие возможности конвертации в bnb формат и обучения LoRA поверх экспертов.
Потому один умелец приготовил модель, где эксперты используют
nn.Linear
.[Конвертированная модель]
👍7
Bigger is not Always Better: Scaling Properties of Latent Diffusion Models
[Статья][Кода нет, а и TPUv5 у вас]
Введение
Есть такие scaling laws, согласно которым, чем больше модель и чем больше количество данных, на которых она училась - тем лучше ее качество или некий эрзац качества. Для LLM уже вышло множество работ по данной теме и выработаны compute-optimal рецепты обучения, но для диффузионных моделей систематического исследования до сих по не проводилось.
И ребята с Google вооруженные TPU решили заполнить зияющую пустоту ⚫️.
Эксперименты
В качестве базовой модели берут UNet от Stable-Diffusion v1.5 (866M) и меняют его ширину (глубина постоянная). И таким образом получают семейство моделей от 39М до 5B параметров.
Модели обучают на проприетарном датасете из 600M пар изображений и описаний к ним, отфильтрованном по эстетике.
Базовые настройки сэмплера -
Исследуют следующие задачи:
1️⃣ text-2-image генерация
2️⃣ Superresolution через дообучение модели из 1) следуя постановке из StableSR.
3️⃣ Dreambooth поверх модели из 1)
1️⃣ Для оценки качества используют по традиции FID и CLIP. В области некоторого среднего бюджета обучения модели разных размеров выдают примерно одни и те же метрики. Но при наличии значительного объёма вычислительных ресурсов - размер начинает играть значение, и самая большая модель побеждает своих меньших собратьев. Для 5B модели пришлось прибегнуть к memory-efficient training, так как при стандартном обучении с
Совсем маленькие модели генерируют дефектные картинки 🤪, но начиная с нескольких сот миллионов параметров качество генераций моделей примерно на одном уровне по ощущениям.
2️⃣ На downstream задачах размер моделей играет уже более существенную роль. В 4x image super-resolution большие модели даже при заданном бюджете обучения заметно выигрывают по FID. Однако по LPIPS модели разного размера с фиксированным training compute сравниваются.
3️⃣ Большие модели ожидаемо выдают более качественные DreamBooth генерации.
[Статья][Кода нет, а и TPUv5 у вас]
Введение
Есть такие scaling laws, согласно которым, чем больше модель и чем больше количество данных, на которых она училась - тем лучше ее качество или некий эрзац качества. Для LLM уже вышло множество работ по данной теме и выработаны compute-optimal рецепты обучения, но для диффузионных моделей систематического исследования до сих по не проводилось.
И ребята с Google вооруженные TPU решили заполнить зияющую пустоту ⚫️.
Эксперименты
В качестве базовой модели берут UNet от Stable-Diffusion v1.5 (866M) и меняют его ширину (глубина постоянная). И таким образом получают семейство моделей от 39М до 5B параметров.
Модели обучают на проприетарном датасете из 600M пар изображений и описаний к ним, отфильтрованном по эстетике.
Базовые настройки сэмплера -
DDIM
солвер с 50
шагами и cfg_scale=7.5
.Исследуют следующие задачи:
1️⃣ text-2-image генерация
2️⃣ Superresolution через дообучение модели из 1) следуя постановке из StableSR.
3️⃣ Dreambooth поверх модели из 1)
1️⃣ Для оценки качества используют по традиции FID и CLIP. В области некоторого среднего бюджета обучения модели разных размеров выдают примерно одни и те же метрики. Но при наличии значительного объёма вычислительных ресурсов - размер начинает играть значение, и самая большая модель побеждает своих меньших собратьев. Для 5B модели пришлось прибегнуть к memory-efficient training, так как при стандартном обучении с
Adam+amp
модель с состояниями оптимизатора не влезает в TPUv5.Совсем маленькие модели генерируют дефектные картинки 🤪, но начиная с нескольких сот миллионов параметров качество генераций моделей примерно на одном уровне по ощущениям.
2️⃣ На downstream задачах размер моделей играет уже более существенную роль. В 4x image super-resolution большие модели даже при заданном бюджете обучения заметно выигрывают по FID. Однако по LPIPS модели разного размера с фиксированным training compute сравниваются.
3️⃣ Большие модели ожидаемо выдают более качественные DreamBooth генерации.
В поисках эффективного сетапа сэмплирования
Далее авторы исследуют зависимость качества генераций от cfg_scale для разных размеров моделей и количества шагов сэмплирования. Выводы следующие:
1️⃣ чем больше шагов сэмплирования - тем ниже оптимальный cfg scale
2️⃣ чем больше модель - тем больше оптимальный cfg scale
При генерации с фиксированным ограничением на FLOPs меньшие модели на малых бюджетах показывают себя лучше больших. То есть лучше сделать больше шагов меньшей моделью, чем меньше - большей.
Выводы справедливы как для DDIM семплера, так и для более навороченного DPM++.
Возникает следующая мысль - а если дистиллировать модель по числу шагов генерации, не станут ли больше модели предпочтительнее при ограничительном бюджете генерации?
Оказывается, что малая недистиллированная модель с большим числом шагов сэмплирования может выдавать одно и то же качество, что и большая дистиллированная в 4 шага. В качестве алгоритма дистилляции используют Consistency Distillation.
На downstream superresolution задаче при малых бюджетах малые модели предпочтительнее, но с ослаблением ограничений ожидаемо выгоднее становится брать более крупные, ибо малые упираются в потолок по качеству.
Выводы
Довольно интересное и содержательное исследование. На мой взгляд, самый практически интересный результат работы в том, что при жестких ограничениях на бюджет генерации предпочтительнее уменьшать модель, чем число шагов генерации. Однако исследование ограничительно тем, что использует метрики, которые могут плохо кореллировать с human perception и полноценная валидация предполагает SbSы. Тем более, что у Гугла деньги на это есть 😈.
Далее авторы исследуют зависимость качества генераций от cfg_scale для разных размеров моделей и количества шагов сэмплирования. Выводы следующие:
1️⃣ чем больше шагов сэмплирования - тем ниже оптимальный cfg scale
2️⃣ чем больше модель - тем больше оптимальный cfg scale
При генерации с фиксированным ограничением на FLOPs меньшие модели на малых бюджетах показывают себя лучше больших. То есть лучше сделать больше шагов меньшей моделью, чем меньше - большей.
Выводы справедливы как для DDIM семплера, так и для более навороченного DPM++.
Возникает следующая мысль - а если дистиллировать модель по числу шагов генерации, не станут ли больше модели предпочтительнее при ограничительном бюджете генерации?
Оказывается, что малая недистиллированная модель с большим числом шагов сэмплирования может выдавать одно и то же качество, что и большая дистиллированная в 4 шага. В качестве алгоритма дистилляции используют Consistency Distillation.
На downstream superresolution задаче при малых бюджетах малые модели предпочтительнее, но с ослаблением ограничений ожидаемо выгоднее становится брать более крупные, ибо малые упираются в потолок по качеству.
Выводы
Довольно интересное и содержательное исследование. На мой взгляд, самый практически интересный результат работы в том, что при жестких ограничениях на бюджет генерации предпочтительнее уменьшать модель, чем число шагов генерации. Однако исследование ограничительно тем, что использует метрики, которые могут плохо кореллировать с human perception и полноценная валидация предполагает SbSы. Тем более, что у Гугла деньги на это есть 😈.
👍14
Half-Quadratic Quantization of Large Machine Learning Models
[Блог][Код]
Введение
Некоторое время назад здесь мы разбирали работу HQQ+ с довольно спорными заявлениями. И сейчас откатимся немного назад в прошлое и рассмотрим исходный метод квантизации - HQQ.
1️⃣ Есть
2️⃣ Есть
Метод
В данной работе предлагают метод, якобы гарантирующий одновременно хорошее качество и не требующих никаких данных.
Исходная функция ошибки
Согласно заявлениям авторов, метод сходится за пару десятков итераций.
Эксперименты
Метод валидируют на моделях семейства Llama-2 и OpenCLIP ViTах. В первом случае замеряют перплексию на Wikitext2, а во втором качество 0-shot и linear probe.
8-битная квантизация работает без просадки по качеству. 4-битная с небольшой, 2- и 3- битные квантизации уже заметно просаживаются по сравнению с fp16, но все еще выдают стабильный результат. Но тут есть нюанс 🧐 - 2-х и 3-х битные квантизации используют малые группы (64 для 3-битной) и (16, 32 для 2-битной). В одной постановке scale хранится в 16 битах, в другой квантуется в 8 бит. Потому HQQ_g16 - это на самом деле 3.5 бита на параметр, а HQQ_g16* - 3 бита.
Работает метод быстро: ~1 минута для Llama-2-7b/13b и 4 минуты для Llama-2-70b на 1-ой A100.
ViT-B заметно просаживается по качеству при квантовании, но его большие собратья - ViT-L, ViT-H сохраняют неплохие метрики даже при 2-битной квантизации. Размер группы не уточняется, потому непонятно, настоящие это 2 бита, или 3 с лишним 🤷♂️…
Вывод
На текущий момент данный метод, наверное, лучший среди data-agnostic методов квантизации. Тем не менее без информации о входном распределении данных, хорошее качество при высокой степени сжатия модели недостижимо.
[Блог][Код]
Введение
Некоторое время назад здесь мы разбирали работу HQQ+ с довольно спорными заявлениями. И сейчас откатимся немного назад в прошлое и рассмотрим исходный метод квантизации - HQQ.
1️⃣ Есть
data-agnostic
методы квантизации - round-to-nearest, bnb квантование, не требующие входных данных. 2️⃣ Есть
data-aware
методы - GPTQ, AWQ, SpQR, SqueezeLLM, QuIP#, AQLM и д.р, которые ищут конфигурацию квантованных весов, оптимизирующую ошибку на некотором входном распределении данных. Вторая группа методов обычно точнее по качеству, но более вычислительно затратна. Кроме того, имеет место переобучение под калибровочные данные.Метод
В данной работе предлагают метод, якобы гарантирующий одновременно хорошее качество и не требующих никаких данных.
Исходная функция ошибки
l_p
норма (c 0 < p < 1)
, которая устойчива к выбросам, характерным для больших языковых моделей. Скейлы квантизации фиксируют, и оптимизируют zero_point. Однако, в исходном виде, задача плохо решается из-за невыпуклости, потому авторы вводят вспомогательную переменную, которая в оптимуме равна разнице между исходными и квантованными весами, и решают полученную задачу альтернированной оптимизацией, поочередно оптимизируя скейлы и фиктивную переменную.Согласно заявлениям авторов, метод сходится за пару десятков итераций.
Эксперименты
Метод валидируют на моделях семейства Llama-2 и OpenCLIP ViTах. В первом случае замеряют перплексию на Wikitext2, а во втором качество 0-shot и linear probe.
8-битная квантизация работает без просадки по качеству. 4-битная с небольшой, 2- и 3- битные квантизации уже заметно просаживаются по сравнению с fp16, но все еще выдают стабильный результат. Но тут есть нюанс 🧐 - 2-х и 3-х битные квантизации используют малые группы (64 для 3-битной) и (16, 32 для 2-битной). В одной постановке scale хранится в 16 битах, в другой квантуется в 8 бит. Потому HQQ_g16 - это на самом деле 3.5 бита на параметр, а HQQ_g16* - 3 бита.
Работает метод быстро: ~1 минута для Llama-2-7b/13b и 4 минуты для Llama-2-70b на 1-ой A100.
ViT-B заметно просаживается по качеству при квантовании, но его большие собратья - ViT-L, ViT-H сохраняют неплохие метрики даже при 2-битной квантизации. Размер группы не уточняется, потому непонятно, настоящие это 2 бита, или 3 с лишним 🤷♂️…
Вывод
На текущий момент данный метод, наверное, лучший среди data-agnostic методов квантизации. Тем не менее без информации о входном распределении данных, хорошее качество при высокой степени сжатия модели недостижимо.
🔥6
Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction
[Статья] [Код] [пост на Abstract DL]
Введение
Исследователи со всего мира уже многие годы ищут оптимальную по скорости и качеству парадигму генерации. Диффузионные модели нынче самая ходовая тема со своими достоинствами и недостатками, но на ней клином свет не сошелся, и целесобразно рассматривать и альтернативу.
Некоторые время назад на свет появились авторегрессивные модели (DALL-E, Parti) для генерации, мотивированные успехом больших языковых моделей. Однако, они не приобрели столь большой популярности, как диффузионки, из-за худшего качества и медленной генерации. Генерить токен за токеном долгую последовательность долго и утомительно.
(прим. вычислительная сложность
И чуваки решили пересмотреть авторегрессионные модели, так чтобы они работали быстро 🏃♂️ и эффективно 💪.
Метод
Суть метода в следующем - изображение кодируют иерархическим автокодировщиком, где каждый уровень представлен в виде некоторой последовательности токенов. В некотором смысле, подобная схема напоминает лапласовскую пирамиду. Сначала пытаются приблизить одним токеном насколько возможно исходную картинку, затем увеличивают feature map и уже приближают residual, и так вплоть до максимального разрешения. Токены лежат в некотором обучаемом кодбуке и на этапе квантования, токен, полученный некоторой проекцией приближается к ближайшему вектору из кодовой книги. Словарь общий для всех уровней иерархии.
Автокодировщик обучается на взвешенную сумму l2 лосса, адверсариального лосса и LPIPS.
Генерация выглядит так - на каждом уровне за раз генерируются
В качестве модели берут обычный декодер-like трансформер без модных финтифлюшек типа SwiGLU, RoPE и прочих приблуд, а старый дедовский GPT-2-like c разницей лишь в том, что вместо обычных LayerNormов используются обусловленные (на класс).
[Статья] [Код] [пост на Abstract DL]
Введение
Исследователи со всего мира уже многие годы ищут оптимальную по скорости и качеству парадигму генерации. Диффузионные модели нынче самая ходовая тема со своими достоинствами и недостатками, но на ней клином свет не сошелся, и целесобразно рассматривать и альтернативу.
Некоторые время назад на свет появились авторегрессивные модели (DALL-E, Parti) для генерации, мотивированные успехом больших языковых моделей. Однако, они не приобрели столь большой популярности, как диффузионки, из-за худшего качества и медленной генерации. Генерить токен за токеном долгую последовательность долго и утомительно.
(прим. вычислительная сложность
O(n^6)
у тех, кто не знает, что можно кэшировать keys и values). И чуваки решили пересмотреть авторегрессионные модели, так чтобы они работали быстро 🏃♂️ и эффективно 💪.
Метод
Суть метода в следующем - изображение кодируют иерархическим автокодировщиком, где каждый уровень представлен в виде некоторой последовательности токенов. В некотором смысле, подобная схема напоминает лапласовскую пирамиду. Сначала пытаются приблизить одним токеном насколько возможно исходную картинку, затем увеличивают feature map и уже приближают residual, и так вплоть до максимального разрешения. Токены лежат в некотором обучаемом кодбуке и на этапе квантования, токен, полученный некоторой проекцией приближается к ближайшему вектору из кодовой книги. Словарь общий для всех уровней иерархии.
Автокодировщик обучается на взвешенную сумму l2 лосса, адверсариального лосса и LPIPS.
Генерация выглядит так - на каждом уровне за раз генерируются
h_k x w_k
токенов, соответствующих данному уровню, обуславливаясь на все токены с прошлых уровней. Таким образом, нужно делать порядка log(n) проходов вместо n^2, что является безусловным прогрессом. В качестве модели берут обычный декодер-like трансформер без модных финтифлюшек типа SwiGLU, RoPE и прочих приблуд, а старый дедовский GPT-2-like c разницей лишь в том, что вместо обычных LayerNormов используются обусловленные (на класс).
👍7❤2🔥2🤔2
Эксперименты
Подход валидируют на class-conditional генерации на ImageNet-1k в разрешении 256x256 и 512x512.
Если смотреть на графики FID на Figure 1, складывается впечатления, что вообще красота - победа c разгромным счетом на DiT-бейзлайнами. Однако, взгляд придирчивого читателя обнаружит некие нюансы 🧐. В таблице их лучшая модель генерирует изображение 256x256 за 1 секунду, а на графике будто бы за 0.3 сек. Если бахнуть StyleGAN-2 (StyleGAN-XL) на этот график, то те будут смотреться Парето-оптимальнее их модельки. Хотя о чем вообще базар: FID - мера оверфита под InceptionV3. По precision/recall неплохо, но не лучше всех.
На 512x512 тоже все солидно, опережают DiT, MaskGiT.
Далее показывают, что модель демонстрирует ярко выраженные scaling-laws, хорошую масштабируемость. Встает вопрос - а у чего нет scaling laws?
Визуально качество с размером модели тоже улучшается - малые модели генерируют дефектные изображения, а большие - уже вполне добротные.
Еще модель может в inpainting 🧑🎨, outpainting 👨🎨 и class-conditional editing 📝.
В ablation показывают следующее:
1️⃣ VAR парадигма рулит по сравнению с AR
2️⃣ AdaLN чутка накидывает по сравнению с unconditional LN
3️⃣ Top-k sampling тоже накидывает
4️⃣ CFG-накидывает. Хоть тут и не диффузия, но тоже можно определить его подобным образом.
5️⃣ Увеличение размера тоже накидывает.
Выводы
Прикольная и интересная идея, но непонятно, насколько масштабируется на более сложную задачу text-2-image диффузии. Есть опасение, что одношаговый алгоритм генерации будет страдать разнообразием по сравнению с современными диффузионными моделями. А может регулирование температуры сэмплирования даст разнообразие в той степени, какой оно нужно для целевого приложения.
Подход валидируют на class-conditional генерации на ImageNet-1k в разрешении 256x256 и 512x512.
Если смотреть на графики FID на Figure 1, складывается впечатления, что вообще красота - победа c разгромным счетом на DiT-бейзлайнами. Однако, взгляд придирчивого читателя обнаружит некие нюансы 🧐. В таблице их лучшая модель генерирует изображение 256x256 за 1 секунду, а на графике будто бы за 0.3 сек. Если бахнуть StyleGAN-2 (StyleGAN-XL) на этот график, то те будут смотреться Парето-оптимальнее их модельки. Хотя о чем вообще базар: FID - мера оверфита под InceptionV3. По precision/recall неплохо, но не лучше всех.
На 512x512 тоже все солидно, опережают DiT, MaskGiT.
Далее показывают, что модель демонстрирует ярко выраженные scaling-laws, хорошую масштабируемость. Встает вопрос - а у чего нет scaling laws?
Визуально качество с размером модели тоже улучшается - малые модели генерируют дефектные изображения, а большие - уже вполне добротные.
Еще модель может в inpainting 🧑🎨, outpainting 👨🎨 и class-conditional editing 📝.
В ablation показывают следующее:
1️⃣ VAR парадигма рулит по сравнению с AR
2️⃣ AdaLN чутка накидывает по сравнению с unconditional LN
3️⃣ Top-k sampling тоже накидывает
4️⃣ CFG-накидывает. Хоть тут и не диффузия, но тоже можно определить его подобным образом.
5️⃣ Увеличение размера тоже накидывает.
Выводы
Прикольная и интересная идея, но непонятно, насколько масштабируется на более сложную задачу text-2-image диффузии. Есть опасение, что одношаговый алгоритм генерации будет страдать разнообразием по сравнению с современными диффузионными моделями. А может регулирование температуры сэмплирования даст разнообразие в той степени, какой оно нужно для целевого приложения.
🤔6👍1
Эксперименты и результаты в статьях по современным генеративным моделям, будь то новая парадигма генерации, постановка диффузии или архитектурное новвоведение, натокнули на следующую мысль - а насколько вообще осмысленно понятие SOTA по class-conditional генерации на ImageNet-1k?
Самый низкий FID - хреновый показатель, по упомянутым неоднократно причинам.
Интуитивно хочется следующего - чтобы при подаче конкретного класса, будь то рыба 🐟, собака 🐕 или велосипед 🚲, генерировалась эта рыба, собака или велосипед без дефектов (ну и на каком-то разумном фоне). Вопрос эстетичности особо не стоит - ибо ImageNet-1k не проходил фильтрации по эстетичности и иным аспектам. А требовать генерировать от модели лучше, чем то, что она видела в данных мы обьективно не можем. Что посеешь, то и пожнешь, как говорится.
В идеале, хороший классификатор, должен распознавать генерации, как целевой класс, но добиться этого со
На мой взгляд, нельзя утверждать, что конкретная модель является лучшей по class-conditional генерации на ImageNet-1k. Можно лишь утверждать, что она решает задачу хорошо или плохо.
Самый низкий FID - хреновый показатель, по упомянутым неоднократно причинам.
Интуитивно хочется следующего - чтобы при подаче конкретного класса, будь то рыба 🐟, собака 🐕 или велосипед 🚲, генерировалась эта рыба, собака или велосипед без дефектов (ну и на каком-то разумном фоне). Вопрос эстетичности особо не стоит - ибо ImageNet-1k не проходил фильтрации по эстетичности и иным аспектам. А требовать генерировать от модели лучше, чем то, что она видела в данных мы обьективно не можем. Что посеешь, то и пожнешь, как говорится.
В идеале, хороший классификатор, должен распознавать генерации, как целевой класс, но добиться этого со
100%
точностью нельзя из-за ошибок 😬 в разметке ImageNet и спорности самой разметки. На мой взгляд, нельзя утверждать, что конкретная модель является лучшей по class-conditional генерации на ImageNet-1k. Можно лишь утверждать, что она решает задачу хорошо или плохо.
🤔2
Конечно, сказать наверняка нельзя, но сильные результаты моделей Command-R/Command-R+ [пост на Love. Death. Transformers], большая из которых вошла в десятку на lmsys и даже обошла некоторые версии GPT-4, наводят на мысль, что и сама GPT-4 может быть не такой уж огромной и даже одного порядка по размеру с GPT-3 (175B параметров).
А помните, были слухи, что GPT-4 - это якобы смесь экспертов с 1.8Т 😱 параметров, инферить которую придется на нескольких хостах?
Полагаю, что все же основной прирост был за счет большего количества данных, лучшей их фильтрации и предобработки. Маленьких секретиков по instruction-tuning, RLHF с достаточным количеством разнообразных инструкций, и обширным подбором ассессоров из разнообразных групп.
А помните, были слухи, что GPT-4 - это якобы смесь экспертов с 1.8Т 😱 параметров, инферить которую придется на нескольких хостах?
Полагаю, что все же основной прирост был за счет большего количества данных, лучшей их фильтрации и предобработки. Маленьких секретиков по instruction-tuning, RLHF с достаточным количеством разнообразных инструкций, и обширным подбором ассессоров из разнообразных групп.
🤔5👍2