Автор: Александр Гончаренко, СТО enot.ai
Ранее мы говорили о квантовании CV-моделей. Однако оно отличается от квантования LLM. В основном это связано с тем, что для CV-моделей есть возможность применить Quantization Aware Training (далее — QAT). А для LLM дообучение очень затратно, поэтому его могут позволить только очень большие компании.
В этой статье мы сделаем акцент именно на тех методах, где дообучение не применяется вообще или применяется крайне ограниченно. Разберём два алгоритма, которые, на наш взгляд, являются ключевыми для понимания различных современных работ.
Итак, план статьи следующий:
Давайте начинать 🙂
Статья очень похожа на своего предшественника от той же команды.
Идея следующая: квантование портит выбросы. Выбросы — это значения, отстающие от основной массы. При квантовании они делают больший шаг дискретизации, что, в свою очередь, размывает значения вблизи нуля. Это приводит к снижению точности. В классическом CV есть способы решения такой проблемы через дообучение, но существуют и альтернативные методы. Они позволяют избегать выбросы при помощи перемасштабирования. Визуализация метода представлена ниже:

Рисунок 1. Перемасштабирование каналов. Один канал умножается на положительный коэффициент c_{i}, а слой за ним делится на обратный коэффициент. Если у нас активация типа ReLU — значение на выходе блока будет таким же, как и без перемасштабирования
Авторы статьи AWQ выяснили: в LLM всего лишь 1% весов владеет 90% богатств мира сильно влияет на ошибку после квантования. Найти эти веса можно в тех каналах, куда приходят большие значения активаций. Таким образом, даже малое изменение подобных весов влечёт за собой значительные трансформации следующих слоёв. Как нам быть?
Авторы предлагают перемасштабировать эти веса, а также активации, которые им соответствуют. Более того, они показывают, что такой подход может привести к снижению ошибки квантования.
Следовательно, они предлагают оптимизировать следующее выражение:

Здесь $W$ — веса квантуемого слоя, $X$ — активации, которые приходят на вход, $s$ — тот самый перемасштабирующий фактор, а $Q$ — функция fake-квантования, то есть квантизации и деквантизации одновременно.
Есть небольшая проблема — такое выражение недифференцируемое. По мнению авторов, мы можем не обращать на это внимание, а просто подбирать $s$ перебором по сетке. Это становится возможным благодаря ограничениям, которые они вводят. В частности, $s = s_{X}^{\alpha}$, где $\alpha$ лежит в диапазоне от 0 до 1 и, в свою очередь, перебирается по сетке, а $s_{X}$ — среднее значение конкретного канала активации. Также авторы значительную часть статьи посвящают особенностям инференса LLM и имплементации предложенной процедуры для эффективного запуска.