Telegram Web
Channel created
Channel photo updated
QLoRA: Efficient Finetuning of Quantized LLMs

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

В последние несколько лет мы стали свидетелями бешеного прогресса глубокого обучения во всех его ипостасях, проявлениях и приложениях, и флагманом прогресса выступает область NLP (Natural Language Processing). Разрастающиеся в ширину и глубину модели, обученные на колосалльных обьемах данных, дополненные современными плюшками и прибамбасами в виде instruction finetuning, RLHF (reinforcement learning on human feedback) и прочими другими, демонстируют способности, которые еще не так давно казались бы чем-то из разряда научной фантастики.

Однако выдающиеся возможности языковых моделей не даются за бесплатно, всему есть цена. Характерный размер современных языковых моделей используемых в новомодных чатботах по типу Alpaca, Vicuna и прочих представителей животного мира исчисляется порядка десятков миллиардов параметров, что делает традиционный инференс на пользовательских GPU и любимом колабе затруднительным 😔.

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

Но если хочется пользоваться не просто готовой моделькой, а еще дообучить на какую-то специфичную задачу? Как бы много данных не видела сеть в процессе своего обучения, для достижения хорошего качества в конкретном приложении обыкновенно требуется дообучать модель, и существует множество способов и вариантов эффективного по памяти и вычислительным ресурсам техник по дообучению большихх сетей - различные адаптеры (среди них наиболее популярна LoRA, заслуживающая отдельного разбора), prompt tuning, in context learning и иже с ними.

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

Если перечислить списком основные результаты статьи, выходит что-то такое:

1. Новый тип для хранения весов 4-bit NormalFloat (NF4).
2. Двойное квантование (Double quantization).
3. Paged отпимизаторы
4. Экстенстивная валидация модели на разных бенчмарках и исследование самих бенчмарков
Теперь пройдемся по каждому из пунктов подробнее.

1) При квантовании весов, каждый параметр принимает одно из небольшого количества возможных значений. Скажем, если квантование в 4 бита, то у нас 2^4 = 16 вариантов. Но, как выбрать эти значения? Самая очевидная и по существу используемая на практике стратегия - задать максимальное и минимальное значение, которое может принимать вес, и разбить интервал на одинаковые промежутки. И если точки распределены равномерно, то это и правда оптимальный выбор. Однако на практике веса скорее распределены в соотвествии с нормальным распределением, имеющим колоколообразную форму. То есть веса обычно кучкуются ближе к центру интервала и вероятность их встретить убывает к краям интервала. Отсюда возникает идея выбрать интервалы таким образом, чтобы в каждый интервал попадала примерно одна и та же доля весов.

На языке высокой науки значения, которые случайная величина не превышает с заданной вероятностью называется квантилями распределения. Например, 10% квантиль - такой значение, что слева от него лежит 10% массы распределения. Для некоторых случайных величин квантили ищутся легко, как для равномерного распределения, но для нормального распределения это табличные значения, которые приходится получать численными методами.
Авторы наглядно демонстрируют, что NormalFloat4 дает заметно большее качество по сравнению с обычным Float4.
2) Следующее ноу-хау данной работы - Double quantization (двойное квантование из квантовой механики здесь не причем!). При квантовании группы значений каждое число представляется в виде целого числа, домноженного на некоторое вещественное, называемое масштабом (scale). со сдвигом от некоторого значения (zero point) в случае ассиметричной квантизации (в данной статье рассматривается симметричная квантизация).
Вот так мы квантуем (получаем целые числа)
А вот так получаем значения с плавающей точкой из квантованных
2025/08/29 10:31:21
Back to Top
HTML Embed Code: