SqueezeLLM
Dense-and-Sparse Quantization
Сжатие больших языковых моделей (LLM) - область крайне горячая и актуальная в нынешние времена, в связи с потребностью и запросом на инференс моделей размером более 10 миллиардов параметров в условии ограниченных ресурсов. Потому и работы по данной тематике выходят, как грибы в лесу после дождя.
Статья, рассматриевая в данном сюжете вышла в начале июня.
В основе предложенного подхода лежат 2 идеи:
- Sensitivity-based non-uniform quantization. Неоднородное квантование использующее разложение ошибки до второго порядка для определения оптимальной конфигурации весов.
- Dense-sparse decomposition. Веса распределяются на основную массу и выбросы, которые не квантуются.
Ниже рассмотрим каждый пункт подробнее.
Sensitivity-based non-uniform quantization
Наиболее стандарнтым способом квантования является однородное квантование, когда интервал значений разбивается равномерно. Есть еще квантильное квантование, как в статье QLoRA. Но можно пойти еще дальше и не накладывать никаких ограничений на способ разбиения интервала, а большая свобода в выборе параметров квантизации имеет шанс на лучшую аппроксимацию.
Но как выбрать интервалы оптимальным образом?
Можно минизировать разницу между исходными значениями и квантованными, выражаемую L2
расстоянием (скажем, при помощи 1-мерного k-means), но нас интересует качество работы модели в целом. И во множестве работ используют разложение лосса по формуле Тейлора до 1-го или 2-го порядка. В точке оптимума первая произодная, как известно - 0 (для достаточно хороших функций), потому ориентироваться приходится на члены 2-го порядка.
Считать в лоб Гессиан даже для маленьких моделей из vision - гиблая затея, а для LLM тем более. Поэтому в данной работе вместо Гессиана используют матрицу Фишера, а точнее только ее диагональ. Для оценки берется маленькая подвыборка - небольшой набор последовательностей.
В итоге, авторы сего труда прогоняются взвешенный диагональную матрицы Фишера k-means и получают квантованные веса модели.
Dense-sparse decomposition
Следующим краеугольным камнем метода является разделение весов на выбросы, которые от греха подальше держат в исходном представлении, и остальные веса.
С одной стороны, модель крайне чувствительна к небольшим изменениям в значениях маленькой доли весов (доли процента). В качестве меры чувствительности используется диагональ матрицы Фишера, потому элементы, соотвествующие самым большим ее значениям не квантуют.
Кроме того, маленькая доля весов прилично выбивается по абсолютной величине и, убрав всего 0.01% самых больших весов, можно сузить диапазон значений в 5-10 раз.
Идея про выбросы в процедуре квантизации возникала ранее уже в ряде работ.
Операция матричного умножения в итоге разбивается на плотную часть в низкой битности и разреженное умножение в исходной точности (float16, bfloat16):
Спарсные операции медленные - но так как их мало, можно добиться реального ускорения. И авторы написали соотвествующие CUDA kernels.
Результаты
Метод тестируется на моделях из семейства LLaMA. В самой статье приведены результаты только на 7B, 13B, 30B, недавно в репозитории проекта добавили чекпоинты 65B модели.
Для оценки матрицы Фишера используют 100 случайных последовательностей из C4.
При рассмотрении оутлаеров рассматривают 3 постановки:
- без выбросов
- 0.05% самых чувствительных по метрике Фишера весов
- 0.45% среди которых веса из пункта выше, и еще некоторая доля на основе абсолютной величины
Для валидации модели используются стандартные бенчмарки по causal language modeling в соооветсвии с протоколом GPTQ .
На битности 3-4 метод обыгрывает GPTQ, AWQ бейзлайны. Разница более заметна на низкой битности.
Учет выбросов повышает качество модели при небольшом приросте перплексии (ухудшении качества).
Кроме того, авторы валидируют instruction-finetuned версию LLaMA - Vicuna. На MMLU вышло неплохо.
И на Vicuna бенчмарке - сравнении ответов моделей на наборе промтов по мнению GPT4, квантованные SqueezeLLM модели проигрывают меньше исходной float модели по сравнению с конкурентными подходами.
И имеет место реальное ускорение модели (замеры проводились на A6000). Однако даже небольшая доля sparse весов замедляет время работы, потому их должно быть немного.
Итого, довольно солидная работа по квантованию моделей с хорошими результатам. Несколько удивительно, что столь грубое приближение матрицы Гессе работает так хорошо - диагональное приближении на основе всего 100 примеров, но, предположительно, межвесовые корреляции имеют меньшее значение по сравнению с computer vision. Не хватает сравнения с SpQR
Модели выложены и код для валидации моделей, но до сих пор нет кода квантизации.