2.97K subscribers
201 photos
6 files
400 links
Квантование & Прунинг & Дистилляция

Блог про сжатие сетей и не только.
От древнейших времен по настоящее время.
Download Telegram
Эксперименты

В первой части исследования авторы смотрят на норму разницы между исходными и сжатыми весами, или если быть точнее, log SNR разницы.

Сначала рассматривают аналитические распределения - нормальное и обрезанное t-распределение Стьюдента, чтобы моделировать тяжелые хвосты.

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

Для t-распределения Стьюдента при сильном сжатии и kurtosis (меры тяжести хвостов распределения) прунинг может быть лучше квантизации, однако такое распределение редко встречается на практике.

Затем авторы берут 46 моделек из torchvision и вновь смотрят на ошибку приближения весов и почти все оказывается, что при заданном сжатии у квантизации ошибка меньше.

Далее авторы смотрят на ошибку уже на выходе слоя и рассматривают более продвинутые алгоритмы прунинга и квантизации в сценарии post-training compression (то есть без дообучения), оптимизирующие ошибку на уровне слоя. Выводы, тем не менее, те же, что и раньше.

Но сохраняется ли преимущество квантования после обучения сжатой модели?

Оказывается, что да. Авторы берут несколько архитектур - ResNet, MobileNet, EfficientNet, ViT и прогоняют sparse training / quantization aware training, соотвественно, сжатых моделей на ряде задач компьютерного зрения - классификации, сегментации, детекции, и почти всегда квантованная модель оказывается лучше запруненной. Гиперпараметры процедуры обучения одинаковы в обоих случаях для честного сравнения.

Здесь стоить важную ремарку, что модели сжимают за один раз, в то время как для прунинга куда оптимальнее сжимать итеративно (и тот же MobileNet-V3 вполне реально сжать до 87.5% с умеренной просадкой в качестве).

Вывод

Довольно интересное, хоть и сравнительно короткое исследование. Наверное, основной вывод естественен, что небольшие пертурбации всех весов влияют на качество модели меньше, чем большие у части. Вероятно, результат зависит еще от деталей процедуры обучения, в особенности, weight decay. И было бы интересно посмотреть на аналогичное исследования для языковых моделей. Кроме того, прунинг можно комбинировать с квантованием и можно поставить задачу поиска оптимального соотношения между прунингом и квантованием. Тем для будущих исследований предостаточно…
👍4🔥2
QA-LoRA: Quantization-Aware Low-Rank Adaptation of Large Language Models
[Статья][Код]

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

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

И в этой статье авторы исследую причины, приводящие к просадке качества при переквантовании модели и предлагают способ бесшовного слияния LoRA c весами базовой модели.

Сразу скажу, что в статье есть несколько некорректных утверждений и ослабления бейзлайнов, по невнимательности или по злому умыслу.
Наиболее близкая по теме статья - разобранная ранее QLoRA. Напомню, что там модель квантуется в 4 бит, и поверх квантованной модели обучается низкоранговый адаптер на Instruction Finetuning.

Авторы QA-LoRA утверждают, что выгода от этого подхода только во время обучения, так как на инференсе все равно придется сливать веса с адаптерами. Но данное утверждение более чем спорно, ибо можно параллельно прогонять вход через квантованные веса и floating-point адаптер, и накладные расходы на последний довольно маленькие (так как типичный ранг добавки r в сотни и тысячи раз меньше размерности в сети).
🔥1
Метод

Наивное квантование работает не очень хорошо из-за несовпадения степеней свободы у квантования и низкоранговой добавки. На каждый входной канал приходится один скейл и один zero (вообще-то нет), и при этом r чисел в адаптере. Но чтобы можно было просто взять и поменять параметры квантизации, нужно чтобы все r чисел в адаптере, соотвествующие конкретному ряду матрицы, были одинаковы. Что по сути ограничивает LoRA одноранговой добавкой.

Чтобы как-то повысить выразительность, предлагается (о боже!) квантовать входную размерность малыми группами, и тогда ранг добавки следует делать равным числу групп. И после этого можно сливать добавку без проблем.
Тут стоит напомнить, что маленькие группы (размера 64), которые дополнительно квантуют, - одна из ключевых идей в QLoRA.

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

Чтобы провалидировать предложенный подход авторы квантуют модель с помощью GPTQ с размером группы 32 и дообучают LoRA на ALPACA и FLANv2.

Для валидации используются MMLU и ряд других стандартных бенчмарков языковых моделей - ARC, Hellaswag, PIQA,
Замечу, что используемый размер группы дает более, чем 0.5 бит на параметр, что не пренебрежимо мало.

QA-LoRA на 4 битах несколько уступает QLoRA без вливания но уверенно бьет варианты с вливанием весов и повторным квантованием, как и PEQA с дообучением скейлов в квантизации. Метод неплохо себя показывает при низких битностях, давая качество статистически выше случайного даже при двух битном квантовании (качество случайного классификатора на MMLU - 25%).

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

Размер подвыборки FLANv2 заметно влияет на качество, особенно при квантовании в низкую битность.

Выводы

Интересная постановка задачи и подход, однако мотивация метода строится сразу на нескольких неверных утверждениях - дороговизне инференса QLoRA , отсутствия квантования малыми группами в QLoRA. Используемые группы даже меньше, чем в QLoRA, потому расходы на хранение статистик квантования, как было выше сказано, довольно существенны.
🔥1
SCALING LAWS FOR SPARSELY-CONNECTED FOUNDATION MODELS
[Статья][Кода нет и хрен с ним]

Введение

Как известно, foundation модели, обученные на колоссальных объёмах данных, демонстрируют scaling laws - сравнительно простые зависимости качества работы с изменением количества данных и размера модели, выражающиеся обычно степенными законами. И на основе этих закономерностей подбирают модели оптимальные по размеру и количеству данных при заданном ограничении на бюджет обучения.

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

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

Постановка задачи

Авторы рассматривают 2 задачи -

1️⃣️ Обучение T5 на корпусе С4
2️⃣️ Обучение ViT на JFT-4B (проприетарный гугловский датасет)

Для ViT рассматривают 7 моделей размера от 0.66M до 42.4M параметров, и 4 конфигурации количества шагов обучения, а для T5 - 4 модели (от 1.3M до 85M параметров) и 3 конфигурации длительности обучения. Рассматривают 4 уровня прореживания - 0%, 50%, 75%, 87.5%. Менее 50% не целесообразно рассматривать обычно на практике, а выше 87.5% оптимизация становится затруднительной.

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

Первые 25% времени обучение обучается плотная модель, следующие 50% времени обучения уровень прореживания постепенно поднимается до целевого значения, и последние 25% модель обучается с постоянным прореживанием.
Эксперименты

Вывод закона скейлинга

Авторы отталкиваются от стандартной формулы scaling law по количеству данных и размеру модели. В ней три аддитивных члена:

1️⃣️️️ Спадающий степенным образом с размером выборки.
2️⃣️️️ Спадающий степенным образом с размером модели.
3️⃣️️️ Неустранимая ошибка - некоторая константа.

Однако не очевидно, каким образом sparsity будет входить в конечный закон. Важно лишь общее количество параметров или sparsity может дать некоторое преимущество по сравнению с dense моделью того же размера?

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

1️⃣️️️ Графики лосса против количества параметров образуют почти параллельные линии
2️⃣️️️ Чем выше степень прореживания, тем меньше лосс, но выигрыш от прореживания быстро спадает с ростом степени сжатия.
3️⃣️️️ Форма кривых лосса против количества параметров почти не зависит от количества данных.

Из наблюдений выше возникает анзац для scaling law c прореживанием. Вместо константы помноженной на степень от размера модели, возникает степень доли ненулевых параметров + некоторая константа.

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

Исходя из полученных scaling law можно вывести оптимальную степень прореживания при заданном количестве ненулевых параметров и FLOPs, потраченных на обучение. Чем больше перебор по длительности обучения по сравнению с Chinchilla law, тем выгоднее иметь более сильное прореживание.

Авторы рассматривают два способа оценки количества FLOPs - 1) в предположении, что железо умеет идеально пропускать операции с нулевыми весами, 2) и в типичном сценарии - где операции со спарсными матрицами требуют столько же вычислений, как и с произвольными. Оба метода будут отличаться на некоторый фактор.

Контуры # pretraining FLOPs против # non-zero parameters для разных значений sparsity, при которых данная степень прореживания оптимальна, удивительным образом оказываются параллельны scaling law Chincilla. Однако, даже для Chincilla law оптимальным является ненулевое значение sparsity.

В предположении идеальной утилизации спарсности при обучении 50% модель требует в примерно 2 раза (для ViT), 3 раза (для T5) больше FLOPs чем предсказание Chincilla law для Dense модели. А без этого предположения 5x и 70x, соотвественно. Кажется, что это слишком много, но на самом деле современные языковые модели обучаются нередко значительно больше, чем compute-optimal значение. Например, LLama-2-7B обучалась в 14 раз больше.

Дальше можно задаться вопросом, а какого размера должна быть плотная модель при том же количестве FLOPs, чтобы иметь при том же количестве то же качество, что и sparse модель? Для 50% sparse модели соответствующая ей модель должна быть в 1.6x раз больше, и для 75% - 2.16x, т.е преимущество от sparsity уменьшается с увеличением степени прореживания. Примечательно, что закономерность примерно одна и та же, для ViT и T5, хотя модели и задачи совершенно разные.

Затем авторы исследуют scaling laws для полуструктурированной N:M sparsity (N ненулевых значений). Данный паттерн более ограничителен, потому закономерно ожидать, что он менее эффективен, чем произвольное расположение нулевых/ненулевых весов. 2:4 паттерн (поддерживаемый Nvidia GPU начиная с Ampere) не уступает 50% неструктурированной sparsity, а вот 1:4, 2:8 уже заметно хуже с точки зрения масштабирования, чем 75% sparsity.
Прореживание предобученных моделей

На практике чаще берут обученную модель и сжимают ее. Авторы берут три модели ViT S/16, M/16, B/16 (S, M, B - Small, Medium, Base, а 16 - размер патча) и прореживают их тем же самым способом, что sparse модели в экспериментах выше (только прореживая сразу, а не через 25% времени обучения), используя 5.6% бюджета на обучение плотной модели.

Для 50%, 75% сжатия такой способ в 5 (4) раз эффективнее чем обучение sparse модели from scratch, но при большем сжатии выигрыш уменьшается. По всей видимости, причина этого в том, что модель сильно просаживается, по сравнению с исходной плотной. Если учитывать бюджет обучения плотной модели в суммарных затратах на создание sparse модели заданного качества, то генерация sparse модели с нуля значительно эффективнее.

Вывод

Весьма интересное и нужное исследование, мотивирующее дальнейшую разработку железа и алгоритмов, способных работать с прореженными матрицами. При фиксированной производительности и памяти железа, по всей видимости, оптимальнее всего будет брать большую насколько возможно модель с некоторой долей нулевых весов и квантованную в низкую точность. Дальнейшее повышение эффективности могут дать conditional sparsity архитектуры, использующие часть параметров на прямом и обратном проходе (как пресловутые смеси экспертов) и retrieval-augmented модели.
Подумал я, что длинные полотна, подобные Shine on you crazy diamond, с детальным описанием экспериментов выходят чрезмерно многословными и содержат слишком "многа букв". И думаю сократить среднюю длину постов, акцентируя внимания только на ключевых моментах и результатах. Тем самым заодно можно будет повысить и throughput постов.
Так как голоса, по всей видимости, разделяются поровну - сделаем гибридный формат)
🔥2
В Pytorch 2.1 завезли 2:4 semi-structured sparsity!

Напомню, что произвольный паттерн неструтурированного прунинга не поддерживается на GPU, но начиная с поколения Ampere реализована аппаратная и программная поддержка 2:4 паттерна, где на 2 позициях из 4 стоят ненулевые веса. В общем случае N:M sparsity N ненулевых весов из M.

До недавних пор, чтобы воспользоваться 2:4 sparsity нужно было напрямую использовать ядра из cuSparse или CUTLASS или пользоваться скомпилированной с --sparsity моделью в TensorRT. Но теперь semi-structured sparsity доступна почти всем желающим.

Примечание 😐.
2:4 sparsity работает только на Ampere / Hopper. Не ожидайте ускорения на колабовской T4.

Теоретическое ускорение и сжатие, которое дает такой паттерн, 16/9 для half precision и 16/10 для int8. Но на практике, увы не все так радужно. Реальное ускорение инференса в районе 10-30% (в хорошем сценарии).

Сжатие в 2:4 без дообучения обычно заметно просаживает качество (за исключением совсем больших моделей). Но его можно быстро восстановить, дообучая на целевой задаче.

В приведенном примере c BERT качество сжатой модели такое же как у и исходной после дообучения. При маленьких батчах инференс BERT c 2:4 sparsity работает медленее, чем dense матричные операции, но с ростом батча выигрыш от разреженности становится заметным и стабилизируется в районе 20-30%. Заметим, что в BERT сравнительно небольшие матрицы, и на условной Llama выигрыш будет наблюдаться уже на батче с 1-2 последовательностями.

Документация в торче
Туториал с прунингом BERT
Статья Nvidia про 2:4
🔥6
ECoFLaP: Efficient Coarse-to-Fine Layer-Wise Pruning for Vision-Language Models
[Статья][Код есть, но не почищен]

Большинство методов прунинга сжимают все слои нейронной сети с одинаковой силой .

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

Но как найти это распределение?

Метод

Современные SOTA-методы сжатия LLM-ок опираются обычно на послойное приближение Гессиана, которое ничего не знает о влиянии данного слоя на конечный выход. Как вариант можно оценить важность слоя с помощью градиентов модели, в частности, используя диагональ матрицы Фишера.

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

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

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

Авторы валидируют метод на BLIP-2 (задача VQA), Flan-T5 (на MMLU), EVA-ViT (на ImageNet-1k). Не то, чтобы подсчет градиентов был непосильной задачей для моделей этого размера, но зато можно оценить качество приближения нулевого порядка по сравнению с "честным" Фишером.
В качестве метода прунинга используется Wanda (SparseGPT, где заменили послойный гессиан его диагональю ) и модели не дообучаются после прунинга.

Предложенный метод неплохо накидывает по сравнению с uniform sparsity при сжатии 50-60%, однако просадка все же довольно существенна по сравнению с плотной моделью во всех трех сценариях. Приближение градиента разностью почти не просаживает качество по сравнению с использованием истинного градиента. Найденные sparsity распределения тоже близки. Метод сильнее прореживает текстовую модель в BLIP чем vision. Большее количество шумов для оценки градиента не влияет на качество.

Вывод

На текущий момент при определении важности и влияния слоя на конечный выход модели человечеству приходится оперировать эвристиками, основанными на величине активаций, градиентов, но исчерпывающего, удовлетворительного решения пока нет. Разработка некоторого надежного, подкрепленного теоритическими гарантиями метода позволит сделать большой шаг в сжатии моделей и построении эффективных архитектур. Странно, что статья хоть и предлагает метод, экономичный по памяти, не валидируется на условной Llama/Llama-2 .
👍4
Monarch Mixer: A Simple Sub-Quadratic GEMM-Based Architecture
[Статья][Код есть, но непричесан]

Введение

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

Для специальных классов матриц / преобразований можно добиться субквадратичной сложности - разреженных, блочно-диагональных или обладающих определенной структурой. И в качестве иллюстративного примера уместно привести быстрое преобразование Фурье, имеющее сложность O(N log N).

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

И в этой работе, авторы предлагают заменить трансформерные блоки на поканальные и пространственные проекции, параметризованные матрицами Monarch.

Метод

Матрицы Monarch впервые появились в работе. Идея довольно простая - каждая матрица параметризуется последовательностью блочно-диагональных матриц, между которыми вставлены матрицы перестановок. Перестановочные матрицы эффективно обеспечивают dilation между размерностями матрицы. Вообще говоря, можно рассматривать последовательность нескольких dilation вида 1, N^{1/p}, … N^{p-1/p} , но в данной для простоты работают с p = 2. Количество параметров в такой матрице и сложность вычислений пропорциональна O(N^{3/2}).

В исходной статье про Monarch замена стандартных линейных слоев на Monarch в трансформерах сработала весьма недурно.
А в этой статье пошли дальше и используют монархов для обработки последовательности.

M2-миксер состоит из Sequence Mixer, содержащего длинные свертки и gating, и Dimension Mixer - обычная MLP с монархами в качестве линейных слоев.
👍2🔥1
Эксперименты

Предложенную архитектуру валидируют на ряде задач и архитектур:
1️⃣️️️️️ Masked Language Modeling на BERT
2️⃣️️️️️ классификации изображений с ViT
3️⃣️️️️️ Causal Language Modeling по типу GPT.

При тех же скрытых размерностях M2-BERT, M2-ViT имеет на 25-27% меньше параметров, чем базовая Transformer модель, при этом не уступая в качестве. А если увеличить ширину модели, чтобы сравняться по числу параметров, то имеет место даже некоторый прирост.
На Causal-Language Modeling предложенная модель тоже показывает себя немного лучше GPT-2.

Monarch Mixer заметно лучше масштабируется с длиной последовательности в соотвествии с теоретическими выкладками. На больших длинах последовательностей прирост порядка 9x против BERT-base с vanilla attention и 2x против Flash Attention. Ускорение наблюдается как на GPU, так и на CPU.

Вывод

Использование структурных матриц вместо матриц общего вида - интересное направление в разработке нейросетевых архитектур. При том же количестве вычислений возможно работать с картами признаков большей размерности. Однако, без крупномасштабных экспериментов на современных больших языковых моделях нельзя доподлинно оценить, обладают ли Монархи и иные представители бабочек лучшей масштабируемостью по сравнению с первозданным трансформером. Кроме того в сравнениях по throughput везде фигурирует Flash-Attention-1, а есть Flash-Attention-2 с еще лушчей утилизацией железа.
🔥4
ConvNets Match Vision Transformers at Scale
[Статья] [Кода нет, но у вас все равно нет JFT-4B и TPUv4, чтобы воспроизвести экспы]

Народная мудрость гласит, что трансформеры масштабируются лучше, чем сверточные сети при наличии большого количества данных и бюджета на обучение. Но убедительного экспериментального подтверждения в поддержку данной гипотезы никто не проводил ( В ConvNext-V2 имеется сравнение эффективности MAE-предобучения по сравнению с ViT, но на меньших масштабах данных)

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

Метод + Эксперименты

В качестве семейства сверточных сетей авторы рассматривают NFNet-ы, одно из последних достижений в разработке CNN, до того как ViTы завладели нишей. Разные модели семейства отличаются глубиной (больше номер - больше глубина), и шириной (+ - более широкая модель). Обучается все хозяйство на проприетарном JFT-4M и чипах TPUv4.

Результаты

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

При сопоставимых бюджетах сверточные сети выдают сопоставимое качество. Авторы учитывают использование более новых TPUv4 против TPUv3 в прошлых работах и потому дают поправку при сравнении бюджетов.

Самые большие модели из семейства, обученные в течение 100k+ TPU часов выдают 90%+ топ-1 точности на ImageNet-1k при дообучении на нем. Использование Repeated Augmentation для самой большой модели накидывает аж 0.1% на ImageNet-1k.

Вывод

Очередной голос в пользу того, что важны не сколько архитектурные детали, сколько количество данных и время обучения. На большом объеме данных inductive bias уже не имеет особого значения, но и трансформеры, вероятно, не обладают чудесными свойствами с точки зрения масштабируемости. Тем не менее, для пущей убедительности в данном отчете было бы неплохо увидеть аналогичные кривые лосса против часов обучения для семейства ViTов. Три точки, отвечающие трансформерам, недостаточно репрезентативны. Интересно, если провести подобный эксперимент для LSTM, с поправкой на утилизацию железа, будет ли наблюдаться подобная картина?
🔥1
😁14
QMoE: Practical Sub-1-Bit Compression of Trillion-Parameter Models
[Статья] [Код]

Сегодняшний пост можно считать юбилейным. Мой скромный канал преодолел психологический рубеж в 100 подписчиков, за что большое спасибо Милане @milana_shhanukova)

Введение

Современные алгоритмы post-training-quantization вполне успешно квантуют большие языковые модели в 3-4 бита, благодаря чему многомиллиардные модели становится возможным помещать на одну видеокарту.

Но, что если поставить еще более амбициозную задачу - уместить на одном хосте модель с триллионом и более параметров, например, гугловский Switch Transformer c 1.6T весов. Сие чудище настолько огроменное, что при квантизации в 4 бита не поместится даже на целую стойку A100, что уж говорить о более скромном сервере из RTX3090.

Оказывается, что данные модели обладают замечательной сжимаемостью; без заметной просадки в качестве их можно квантовать менее чем в один бит, что позволяет поместить самый большой Switch Transformer на 8 RTX 3090 (24 Gb) или 4 A6000 (48 Gb).

Метод

Рассматриваемый в этой статье класс моделей - смеси экспертов (Mixture of Experts / MoE) - состоят из Attention блоков, которые используются для всех входов, и множества реплик (от 128 до 2048 в семействе Switch Transformer) полносвязных блоков (2-слойных сетей), называемых экспертами, каждый из которых обрабатывает только часть входных данных. Специальная сеть (роутер), предсказывает, к какому эксперту направить данный токен.

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

Однако сама модель остается все еще очень большой и занимает много места в памяти. Деваться некуда - надо сжимать.
🔥7
GPTQ ранее показал сильный результат при квантовании больших языковых моделей, потому авторы статьи (его же создатели) берут его за основу. Однако, наивное применение сопряжено с определенными сложностями - для оценки гессианов нужно прогнать последовательности через каждого эксперта, которые хоть и небольшие, но их много. Авторы прогоняют последовательность через блок, и для каждого эксперта сохраняют в оперативную память активации, нужные для оценки гессиана, и распределение токенов. Чтобы повысить скорость алгоритма, квантизация нескольких экспертов проводится параллельно. 16 Экспертов, обрабатываемых параллельно дают прирост ~6x по сравнению с обработкой каждого эксперта по отдельности.

Чтобы все завелось, потребовался еще ряд мелких хаков :
1) более сильная регуляризация
2) использование округления к ближайшему целому вместо GPTQ, если матрица, оказалась плохо обусловленной
3) ограничение на число токенов для каждого эксперта, чтобы не создавать большие тензоры.

Кроме того, полезным оказалось не учитывать специальные токены при калибровке.

Для сжатия весов используется поканальная тернарная квантизация, когда каждый вес принимает только 3 значения - минимальное, 0 и максимальное. Обычно веса имеют нормальное распределение, сконцентрированное около 0, потому значительная доля весов (85-90%) становится нулевой. Потому возникает идея как-то использовать это свойство.

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

Потому авторы предложили свою схему энтропийного кодирования с фиксированной длиной символа, но кодирующее переменное число бит, которое может быть эффективно реализовано на GPU. Сжатие не Шеннон-оптимально, зато процедура кодирования позволяет эффективно использовать GPU. И далее описывается процедура и реализация CUDA kernel.
Эксперименты

Авторы рассматривают семейство моделей Switch Transformer - 7B, 26B, 1.6T параметров. По существу это encoder-decoder T5-модель с параллельными feed-forward блоками.

Switch Transformer обучался на Masked LM на C4, потому метод тестируют на валидационной выборке из этого датасета, замеряя перплексию. Вдобавок, замеряют аналогичным образом качество на нескольких подмножествах из RedPajama (open-source версии датасета Llama).

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

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

Прогонка алгоритма на одной A6000 занимает менее дня для самой большой модели.

Предложенная процедура кодирования весов дает небольшой оверхед к общему времени вычислений и итоговый прирост времени выполнения - всего 5% по сравнению с тем, что было бы у исходной модели, если ее можно было бы уместить на одну стойку (как я понимаю, оценивали скорость на основе одного блока attention + полносвязные эксперты).

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

Вывод

Крутой и практически полезный результат, мотивирующий дальнейшее развитие и большее широкое применение смесей экспертов. В то время как обычные языковые модели плохо сжимаются менее чем в 3 бита без значительной просадки в качестве, MoE допускают куда более агрессивное сжатие. Сама концепция MoE и условных вычислений кажется более чем естественной для foundation моделей - для решения задачи по алгебре, вряд ли полезно знать название всех персонажей в Сильмариллоне или формулу тринитротолуола. GPT-4 по слухам представляет собой смесь экспертов. Сдается мне, Llama-3 тоже будет MoE (запомните этот твит).
В недавнем ролике канал Veritasium затронул важную проблему популяризации науки.

Научный прогресс носит преимущественно инкрементальный характер, большие прорывы (если не говорить про DL) происходят редко и ценность многих результатов трудно обьяснить неподготовленной публике. Потому популяризаторы науки и СМИ прибегают к обману, чтобы набрать классов. Кликбейтные заголовки - greatest breakthrough of the 21 st century, future has come, вечный двигатель возможен, и тому подобное. Даже уважаемые издания, например, Quanta Magazine, грешат этим - в статье про кротовую нору они утверждают, что ученые создали кротовую нору, хотя в действительно речь идет о моделировании ее с помощью квантового компьютера. Результат на самом деле выдающийся, но тем не менее, до межгалактических путешествий, доставки алиэкспресс с Альфа-Центавры еще далеко. Результаты, опровергнутые впоследствии, цитируются в среднем больше.

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

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

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

На мой взгляд, основный потенциальный ущерб от недобросовестной популяризации науки, в том, что некоторые интересные и полезные отрасли могут не получать должного финансирования со стороны курирующих структур и насыщения кадрами. Тем не менее, пассионарии и ученые верящие в перспективы, полезность своей деятельности, или просто получающие кайф от нее, по всей видимости, будут заниматься ей вне зависимости от внешних обстоятельств. То же машинное и глубокое обучение до того, как проникнуть во все отрасли жизни, получить широкое признание, долгое время развивалось в относительном андерграунде.
👍5
Снимок экрана 2023-11-10 в 10.48.01.png
583.4 KB
Нет, это не печать с раскладкой на другом языке, и не вывод LLM, квантованной в один бит. Это список флагов интеловского процессора.
😁7