Культ квантования: почему 3 битные LLM это диагноз, а не оптимизация

от автора

 Если вы зайдете на Reddit или HuggingFace, вы увидите одну и ту же картину: люди соревнуются в том, кто сильнее покалечит модель, чтобы втиснуть её в свои 8 или 12 ГБ видеопамяти.

«Смотрите, я запустил 70 миллиардную модель на RTX 3060! Правда, пришлось использовать 3 битное квантование с размером группы 32, но она работает!»

Да, она работает. Она складывает слова в предложения. Но давайте снимем розовые очки и поговорим о математике. Экстремальное квантование сегодня превратилось в культ слепую веру в то, что магия алгоритмов (AWQ, GPTQ, EXL2) способна бесконечно сжимать информацию без потери интеллекта. Но у физики нейросетей есть предел.

Золотая середина: почему 8 и 6 бит работают идеально

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

Когда мы переходим от FP16 к INT8 (8 бит), у нас есть 256 дискретных значений, чтобы описать этот колокол. Для непрерывного пространства нейросети 256 градаций это более чем достаточно. Мы сохраняем и общую массу весов, и, что критически важно, точность в хвостах распределения. Переход на 8 (и даже на 6) бит это почти lossless операция. Мы срезаем математический шум.

Обрыв: переход к 4 и 3 битам

Но дальше начинается жадность.
4 бита это всего 16 значений.
3 бита это 8 значений.

Задумайтесь об этом. Вы берете сложнейшее N-мерное латентное пространство, в котором сеть выучила тончайшие семантические различия между сарказмом и иронией, между квантовой физикой и кулинарией, и заставляете каждый вес в матрице принимать одно из 8 фиксированных значений. Это как попытаться сыграть симфонию на детском пианино с тремя клавишами.

Как это вообще работает? За счет костылей. Алгоритмы вроде GPTQ или AWQ вычисляют, какие веса наиболее важны для активаций, и пытаются сохранить их точность за счет группировки (Group Size = 128 или 64). Мы спасаем каркас, но полностью уничтожаем детали

Иллюзия perplexity: что мы на самом деле теряем

Главный аргумент фанатов экстремального квантования звучит так: «Смотрите на бенчмарки! Perplexity (ошибка предсказания) на 3 битах выросла всего на 0.2 по сравнению с FP16!»

И вот здесь кроется главная ловушка, в которую попала индустрия. Perplexity это метрика в среднем

80% любого текста это вода. Предлоги, союзы, очевидные продолжения фраз. Чтобы предсказать, что после «Девочка пошла домой потому что позвала» идет «мама», модели достаточно 2 бит. Базовая структура языка очень устойчива к шуму, поэтому perplexity почти не страдает.

Но что происходит с оставшимися 20%? Что происходит с редкими знаниями?
Вспомните механику градиентов. Редкие факты (названия специфических библиотек кода, имена ученых, тонкие логические выводы) кодируются микроскопическими сдвигами весов во время обучения.

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

Жадность: Большой и глупый

Стремление квантовать модели до 4 (а теперь уже и до 3) бит породило абсурдную ситуацию.
Люди берут гигантскую модель на 70 миллиардов параметров (которая весит 140 ГБ в FP16) и сплющивают её до 3 бит, чтобы она влезла в 24 ГБ VRAM.

Но с математической точки зрения, 70B модель в 3 битах это архитектурный инвалид. Её веса настолько искажены ошибкой квантования, что её реальная предсказательная способность падает ниже плинтуса.

Если у вас есть 24 ГБ VRAM, гораздо умнее взять модель на 14B или 32B параметров, но оставить её в 6 или 8 битах. Плотная, математически чистая маленькая модель всегда порвет огромного квантованного франкенштейна в задачах, требующих логики, а не просто генерации связного текста

Налог (Dequantization overhead)

Не будем забывать и про архитектуру GPU. Видеокарта не умеет перемножать 3 битные числа. Современные тензорные ядра работают с FP16/BF16 (или INT8 на новых архитектурах).
Это значит, что при генерации текста ядру CUDA нужно сначала на лету распаковать (де-квантовать) эти 3 битные значения обратно в FP16, и только потом сделать умножение. Мы разгрузили шину памяти (VRAM), но перегрузили ALU (вычислительные блоки) бесполезной работой по распаковке.

Заключение

Инженерия это искусство компромисса, а не фанатизм. Переход с FP16 на 8 битное или 6 битное квантование это здравый смысл, который демократизировал ИИ.

Но то, что происходит сейчас с 4 bit, 3 bit и ниже это чистый фанатизм. Это зависимость от оптимизации ради оптимизации. Мы так увлеклись попытками засунуть слона в багажник легковушки, что не заметили, как в процессе переломали слону все кости. Он влез, да. Но ходить он больше не может.

ссылка на оригинал статьи https://habr.com/ru/articles/1036880/