В последнее время активно разрабатываются технологии экстремально малоразрядного квантования, например BitNet и 1.58 bit. Они пользуются большим интересом в сообществе машинного обучения. Основная идея данного подхода заключается в том, что перемножение матриц с квантованными весами можно реализовать и умножения, что потенциально полностью меняет правила игры применительно к скорости вычислений и эффективности больших моделей машинного обучения.
Эта статья написана в схожем ключе, но нас наиболее интересует, возможно ли напрямую квантовать предобученные модели при экстремальных настройках, в том числе, при двоичных весах (0 и 1). Уже имеющиеся работы нацелены на обучение моделей с нуля. Но в открытом доступе сейчас достаточно много отличных предобученных моделей, таких как Llama2. Более того, обучение с нуля — это ресурсозатратная задача в пересчёте как на вычисления, так и на данные, поэтому такие подходы не слишком доступны в свободном сообществе.
В этой статье мы подробно разберём крайне малоразрядное (2 и 1-разрядное) квантование предобученных моделей с применением HQQ+. HQQ+ — это адаптация HQQ (полуквадратичного квантования), в которой для повышения производительности используется адаптер с низкой размерностью. Наши результаты показывают, что при обучении лишь небольшой части весов в верхней части HQQ-квантованной модели (даже одноразрядной), качество вывода значительно возрастает, такая модель может даже превосходить небольшие модели полной точности.
Модели находятся на Hugging Face: 1-разрядная, 2-разрядная.
Введение
Квантование небольших предобученных моделей с экстремально малой битовой шириной — это задача не из лёгких. Мы уже продемонстрировали, что сравнительно крупные модели, такие, как Mixtral, хорошо справляются с квантованием 2-разрядных моделей. Но в то же время модели поменьше, например популярная Llama2-7B, буксуют на таких экстремальных уровнях квантования. Более того, качество серьёзно падает при квантовании 1-разрядных моделей.
Цель данного эксперимента — продемонстрировать сообществу те результаты, которых предполагается достичь при тонкой настройке таких моделей в самых экстремальных условиях квантования. Мы удивились, но при тонкой настройке лишь крошечной доли всех параметров (приблизительно 0,65%) качество выходных результатов серьёзно повышается. В частности, мы наблюдали:
1-разрядный случай: если непосредственно применять 1-разрядное квантование к небольшим моделям, в частности, Llama2-7B, достигаются неоптимальные результаты. Правда, при условии тонкой настройки модели качество её вывода серьёзно улучшается. Примечательно, что тонко настроенная 1-разрядная базовая модель обходит по производительности даже 2-разрядную Quip#, несмотря на то, что обучали её всего лишь примерно на ~2,8K токенов с контекстным окном 1024.
2-разрядный случай: если предоставить более специализированные данные, то 2-разрядная модель справляется очень хорошо. Фактически, базовая 2-разрядная модель Llama2-7B с HQQ+ превосходит модель молной точности при обработке викитекста. Чат-модель превосходит собственную версию полной точности на датасете GSM8K, если дать ей достаточно математических данных и информации для рассуждений.
Эффективное перемножение матриц при малоразрядном квантовании
Этап деквантования HQQ — это линейная операция, для которой нужен как калибровочный, так и нулевой параметр. В этом разделе будет показано, как переписать шаг деквантования именно таким образом, чтобы напрямую пользоваться преимуществами, приобретаемыми при перемножении малоразрядных матриц.
Новый взгляд на деквантование
Этап деквантования в HQQ можно выразить как Wr=(Wq−z)s, где Wr соответсвует деквантованным весам, Wq — квантованным весам, а метапараметры z и s — векторам нулевого и калибровочного коэффициента соответственно. Чтобы в рамках этой статьи не усложнять объяснение, пропустим описание этапов перестроения, необходимых в случае, если мы применяем группирование.
Операция перемножения матриц при прямом распространении (без учёта члена сдвига) принимает вид:
Чтобы воспользоваться таким малоразрядным перемножением матриц, необходимо отделить xWq от остального выражения. Перепишем эту операцию следующим образом:
где u=−z⊙s и ⊙ — это точечное умножение (произведение Адамара). Обратите внимание: поскольку u — это вектор, прямое матричное перемножение неприменимо между x и u. Тем не менее, его можно сформулировать как перемножение матриц ранга 1:
Как в 1-разрядной, так и в 2-разрядной ситуации перемножение матриц с квантованными весами можно реализовать в виде операций сложения, и умножение как таковое для этого не требуется:
В случае с двоичными весами Wq состоит из нулей и единиц, здесь требуются только операции сложения.
В случае с двухразрядным квантованием можно переписать Wq как сумму бинарной и тернарной матрицы, и в обоих случаях можно полноценно воспользоваться перемножением матриц без умножения, что реализуется в смешанном ядре. Единственное изменение, которое потребуется ввести — использовать диапазон [−1,0,1,2] вместо исходного [0,1,2,3]:
Тонкая настройка с применением адаптеров низкой размерности
При применении таких методов как BitNet вся сеть целиком обучается с нуля. Вместо этого лучше попробовать обучать адаптеры низкой размерности (LoRA/QLoRA), в настоящее время это наиболее популярный метод тонкой настройки больших моделей.
Как следует из крайнего правого члена в формуле 1, нулевая точка действует в качестве поправочного коэффициента матрицы ранга 1 между Wqs и исходными весами, и адаптер низкой размерности, в сущности, повышает ранг этого поправочного коэффициента, что улучшает результаты квантования.
Пусть LA и LB — это параметры адаптера ранга r с низкой размерностью. Тогда операция перемножения матриц при прямом распространении принимает вид:
Как было подробно описано в нашей более ранней работе о отсечении низких рангов в Llama, ранг суммы двух матриц ниже или равен сумме их рангов. Следовательно, x1Tu+xLTALB можно объединить как член рангом r+1 и получить:
где LA¯ и LB¯ получаются в результате низкорангового разложения матрицы 1Tu+LTALB.
Датасеты
Адаптеры низкой размерности обучались методом дообучения с учителем (Supervised Fine-Tuning) на различных датасетах, имеющихся в открытом доступе. Для базовой модели и чат-модели использовались разные датасеты. Подробности ниже:
Базовая модель
wikitext-2-raw-v1 (~2,8K): Этот датасет целиком применялся для дообучения базовой модели. На нем закладывается основа для общего понимания языка.
Чат-модели
1. timdettmers/openassistant-guanaco: Этот датасет полностью использовался для тонкой настройки чат-модели.
2. microsoft/orca-math-word-problems-200k: подмножество данного датасета применялось для того, чтобы улучшить способности модели по решению математических задач на работу со словами.
3. meta-math/MetaMathQA: другое подмножество этого датасета применялось для того, чтобы дополнительно улучшить способности модели к математическим логическим выводам.
4. HuggingFaceH4/ultrafeedback_binarized (chosen answers only): подмножество ответов, выбранных из этого датасета, использовалось, чтобы донастроить возможность модели генерировать согласованные и релевантные ответы.
Что касается размеров подмножества, мы воспользовались случайной выборкой
из 10K токенов для 2-разрядной модели и 25K токенов для 1-разрядной модели.
Контрольные точки
Мы сравнили показатели производительности модели Llama2-7B в трёх конфигурациях: FP16 (полная точность), HQQ (без тонкой настройки) и HQQ+ (со слоями адаптеров) при использовании групп размером 8. Для этих опытов мы выбрали модель Llama2-7B, так как она относительно невелика, её архитектура хорошо изучена, а также с ней легко экспериментировать. Мы оценили производительность предобученной базовой модели и чат-модели.
Базовые модели
Для базовых моделей мы учли результаты Quip# (2-разрядной), а также ультрасовременный метод квантования, предложенный в работе Tseng et al. Насколько нам известно, не существует никакой функционирующей 1-разрядной модели, кроме нашей для Llama-7b. Но для справки мы включим и результаты по 2-разрядной Quip#.
1-разрядная модель
Модели | FP16 | HQQ (1-разр) | HQQ+ (1-bit) | Quip# (2-разр) |
Wiki Perplexity | 5.18 | 9866 | 8.53 | 8.54 |
VRAM (ГБ) | 13.5 | 1.76 | 1.85 | 2.72 |
Время прямого распространения (с) | 0.1 | 0.231 | 0.257 | 0.353 |
1-разрядное квантование приводило к существенному снижению качества в сравнении с моделью, работающей с полной точностью; в результате пользоваться нашей моделью было почти невозможно. Правда, введя адаптерные слои, мы смогли уменьшить перплексию модели до 8,53, в результате чего модель немного улучшилась и стала сравнима с 2-разрядной моделью Quip#, перплексия которой составляет 8,54, несмотря на то, что в ней только двоичные веса.
2-разрядная модель
Модели | FP16 | HQQ (2-разр) | HQQ+ (2-разр) | Quip# (2-разр) |
Wiki Perplexity | 5.18 | 6.06 | 5.14 | 8.54 |
VRAM (ГБ) | 13.5 | 2.6 | 2.69 | 2.72 |
Время прямого распространения (с) | 0.1 | 0.221 | 0.27 | 0.353 |
2-разрядная модель HQQ обходит Quip# даже без какой-либо калибровки. После дообучения адаптерных слоёв примечательно, что данная модель достигает снижения перплексии по сравнению с моделью полной точности. Это существенное открытие, поскольку оно позволяет предположить, что квантование с применением HQQ+ не только сокращает место, занимаемое моделью в памяти, но и потенциально помогает повысить качество конструирования языка в рамках этой модели.
Чат-модели
Для базовых моделей мы учли результаты Quip# (2-разрядной), а также ультрасовременный метод квантования, предложенный в работе Tseng et al. Насколько нам известно, не существует никакой функционирующей 1-разрядной модели, кроме нашей для Llama-7b. Но для справки мы включим и результаты по 2-разрядной Quip#.
1-разрядная модель
Модели | FP16 | HQQ (1-разр) | HQQ+ (1-bit) | Quip# (2-разр) |
Wiki Perplexity | 5.18 | 9866 | 8.53 | 8.54 |
VRAM (ГБ) | 13.5 | 1.76 | 1.85 | 2.72 |
Время прямого распространения (с) | 0.1 | 0.231 | 0.257 | 0.353 |
1-разрядное квантование приводило к существенному снижению качества в сравнении с моделью, работающей с полной точностью; в результате пользоваться нашей моделью было почти невозможно. Правда, введя адаптерные слои, мы смогли уменьшить перплексию модели до 8,53, в результате чего модель немного улучшилась и стала сравнима с 2-разрядной моделью Quip#, перплексия которой составляет 8,54, несмотря на то, что в ней только двоичные веса.
2-разрядная модель
Модели | FP16 | HQQ (2-разр) | HQQ+ (2-разр) | Quip# (2-разр) |
Wiki Perplexity | 5.18 | 6.06 | 5.14 | 8.54 |
VRAM (ГБ) | 13.5 | 2.6 | 2.69 | 2.72 |
Время прямого распространения (с) | 0.1 | 0.221 | 0.27 | 0.353 |
2-разрядная модель HQQ обходит Quip# даже без какой-либо калибровки. После дообучения адаптерных слоёв примечательно, что данная модель достигает снижения перплексии по сравнению с моделью полной точности. Это существенное открытие, поскольку оно позволяет предположить, что квантование с применением HQQ+ не только сокращает место, занимаемое моделью в памяти, но и потенциально помогает повысить качество конструирования языка в рамках этой модели.
Какие же модели лучше: квантованные или малые языковые?
С одной стороны, если обучать относительно малые модели с нуля, требования к вычислительной мощности не так высоки, а сама модель тренируется быстрее. Такие модели как Qwen1.5 демонстрируют многообещающие результаты и могут быть привлекательны для применения в некоторых областях. Правда, согласно нашим выводам, сильно квантованные крупные модели, в которых используются такие методы как HQQ+, могут давать ещё более высокую производительность, но при этом занимать не так много места в памяти.
Ещё раз подчеркнём, что эти результаты получены на относительно небольшой модели Llama2-7B. При достаточно мелком квантовании без применения адаптерного слоя, как в случае с базовой версией HQQ, наблюдаем, что показатели тем выше, чем крупнее рассматриваемая модель. Например, ранее квантованная модель Mixtral с применением базовой версии HQQ показывает, насколько сильно можно уменьшить площадь модели в памяти, сохранив при этом высокую производительность и серьёзно обходя по этому показателю относительно мелкие модели.
Заключение
Наши экспериментальные 2- и 1-разрядные квантованные версии модели Llama2-7B с адаптером низкой размерности, квантованные с применением предложенного подхода HQQ+, ярко демонстрируют потенциал экстремально малоразрядного квантования применительно к моделям машинного обучения. Несмотря на те проблемы, с которыми приходится сталкиваться при таких минималистичных настройках, качество вывода удаётся серьёзно улучшить. Мы показали, что в тонко настроенных моделях можно выгодно использовать потенциал оптимизированного перемножения низкоранговых матриц, таким образом существенно снижая потребность в вычислительной мощности и памяти. В таком случае большие языковые модели становятся доступнее. Притом, что бинарные и тернарные ядра для перемножения матриц пока не существуют, надеемся, что наша работа подстегнёт интерес как к программным, так и к аппаратным разработкам, и уже в ближайшем будущем мы увидим их результат.
Цитирование
@misc{badri2023hqq,
title = {Towards 1-bit Machine Learning Models},
url = {https://mobiusml.github.io/1bit_blog/},
author = {Hicham Badri and Appu Shaji},
month = {March},
year = {2024}