Нейролента - подборка новостей о нейронных сетях, ChatGPT

КПД

All about КПД

2024-02-29 13:08:19

The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits
[Статья][Довольствуйтесь README.md]

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

Утверждается ни много не мало следующее - можно обучать LLM с 1.58 (log2(3)) битами на параметр 🤯, которые сходятся так же хорошо как и fp16 модели!

Метод

В линейных слоях все веса квантуются тернарно (принимают значения -1, 0, 1).
Скейл будто бы берется один на весь тензор, даже не канал, что вдвойне удивительно, учитывая склонность LLM к оутлаерам и неравномерность распреления весов. Активации же приводятся к 8 битам, и чтобы не хранить zero-point, значения активаций симметризуются.

Ничего не сказано про процедуру обучения, был ли использован straigth-through estimator, или что-то еще более хитрое безградиентное для обучения тернарных весов. Ибо наивное обучение всего этого хозяйства должно сходиться из ряда вон плохо.

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

За основу берут Llama архитектуру и обучают модели разного размера (от 700M до 3.9B параметров) на RedPajama. В сравнениях с бейзлайновой Llama fp16 все модели поглощают 100B токенов на этапе обучения. Модели сравнивают по перплексии на wikitext2 / c4 (непонятно, какая из них приведена в Таблице 1, или средняя) и zero-shot на lm-eval-harness. На меньших моделях BitNet1.58 (так называется семейство квантованных моделей) лишь слегка уступает бейзлайну, а на больших - будто бы чуть лучше, чем fp16.

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

При обучении на 2T токенах, BitNet1.58 на бенчмарках лучше StableLM-3B, обученной на том же числе данных.

Вывод

Практически полное отсутствие описания метода и протокола обучения делает результаты данной работы крайне сомнительными. Краткость - сестра таланта, только если ты OpenAI. В общем, ждем дальнейшей информации. Может, таки выложат модели и нечто большее, чем README.

2023-12-28 21:28:19

Deja Vu: Contextual Sparsity for Efficient LLMs at Inference Time
[Статья] [Код]

Гугл выдаст кучу статей с дежавю в названии:

🎉 Do SSL Models Have Déjà Vu? A Case of Unintended Memorization in Self-supervised Learning.
🎉 DejaVu: Conditional Regenerative Learning to Enhance Dense Prediction
🎉 DEJA VU: Continual Model Generalization For Unseen DomainsDeja-Vu: A Glimpse on Radioactive Soft-Error Consequences on Classical and Quantum Computations
🎉 Déjà vu: A Contextualized Temporal Attention Mechanism for Sequential Recommendation
🎉 Déjà Vu: an empirical evaluation of the memorization properties of ConvNets

Так что авторы немного прогадали с оригинальностью названия)

Перейдем же к сути дела.

Введение

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

Однако, для конкретного запроса, будь то последовательность или иной тип входа, требуется лишь малая доля аккумулированного в модель знания. Чтобы взять интеграл от функции не требуется быть египтологом или знать всех представителей рода соколиных.

2023-12-28 21:28:19

Метод

Ускорить время работы сети без просадки в качестве можно не используя часть голов в attention или каналов в feedforward слоях.

Первая часть работы посвящена анализу внутренних представлений внутри сети.
Авторы делают два прямых прохода: на первом определяют каналы и головы с наибольшими значениями активаций, и на втором проходе используют только долю параметров, соответствующую самым большим активациям. Оказывается, что таким образом можно пропустить до 80% голов в Attention и до 95% в MLP слоях без существенного изменения выхода модели. Кроме того, оказывается что в большинстве голов attention размазан равномерно по токенам, и эти головы не выполняют никакой полезной работы.

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

Авторы рассматриваемой статьи делают следующее: берут обученную языковую модель и поверх нее обучают слои предсказывать, насколько релевантен вход данному каналу ffn / голове трансформера. На инференсе задается доля весов, которую мы хотим использовать, и берутся только измерения с самым высоким предсказанным скором. Выбор нулевых весов зависит от входа (то есть контекста) - потому sparsity носит прилагательное contextual.

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

2023-12-28 21:28:19

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

Авторы валидируют свой подход на больших моделях из семейства OPT (66B, 175B) и Bloom через замеры перплексии на WikiText/C4, и zero-shot бенчмарках из lm-eval-harness. Contextual sparsity в районе 50-60% даже слегка накидывает в качестве, и до 80% не просаживает качестве по сравнению с исходной моделью.

Deja Vu ускоряет генерацию с OPT-175B в 1.8-2x по сравнению с FasterTransformers и 4.8-6x c реализацией трансформера в HuggingFace (сильно неоптимальной) при contextual sparsity 75%

Для Bloom результаты и выводы аналогичные.

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

Deja Vu можно совместить с другими методами сжатия и ускорения, в частности, квантизацией.

Вывод

С одной стороны логичное и в то же время интересное наблюдение. Интуитивно понятно, что все заложенное знание в foundation модель не требуется для конкретного запроса, но вопрос о том, как эффективно извлекать это знание, не перебирая при этом половину книг в эдакой импровизированной библиотеке. Результаты для OPT выглядят весьма впечатляюще, однако отсутствие подобных экспериментов на более современных и эффективных моделях, пресловутой Llama к примеру, вызывает смутные подозрения. По всей видимости, столь высокая разреженность активаций как-то связана с недообученностью и compute-неоптимальностью моделей. Тем не менее, contextual sparsity - перспективное направление для развития эффективных foundation моделей.