- BrainTools - https://www.braintools.ru -
Если вы зайдете на Reddit или HuggingFace, вы увидите одну и ту же картину: люди соревнуются в том, кто сильнее покалечит модель, чтобы втиснуть её в свои 8 или 12 ГБ видеопамяти.
«Смотрите, я запустил 70 миллиардную модель на RTX 3060! Правда, пришлось использовать 3 битное квантование с размером группы 32, но она работает!»
Да, она работает. Она складывает слова в предложения. Но давайте снимем розовые очки и поговорим о математике [1]. Экстремальное квантование сегодня превратилось в культ слепую веру в то, что магия алгоритмов (AWQ, GPTQ, EXL2) способна бесконечно сжимать информацию без потери интеллекта [2]. Но у физики нейросетей есть предел.
Нужно вспомнить, почему квантование вообще работает. Веса хорошо обученной нейросети имеют нормальное распределение вокруг нуля. Большинство весов близки к нулю, и лишь крошечная доля уходит в хвосты (выбросы).
Когда мы переходим от FP16 к INT8 (8 бит), у нас есть 256 дискретных значений, чтобы описать этот колокол. Для непрерывного пространства нейросети 256 градаций это более чем достаточно. Мы сохраняем и общую массу весов, и, что критически важно, точность в хвостах распределения. Переход на 8 (и даже на 6) бит это почти lossless операция. Мы срезаем математический шум.
Но дальше начинается жадность.
4 бита это всего 16 значений.
3 бита это 8 значений.
Задумайтесь об этом. Вы берете сложнейшее N-мерное латентное пространство, в котором сеть выучила тончайшие семантические различия между сарказмом и иронией, между квантовой физикой и кулинарией, и заставляете каждый вес в матрице принимать одно из 8 фиксированных значений. Это как попытаться сыграть симфонию на детском пианино с тремя клавишами.
Как это вообще работает? За счет костылей. Алгоритмы вроде GPTQ или AWQ вычисляют, какие веса наиболее важны для активаций, и пытаются сохранить их точность за счет группировки (Group Size = 128 или 64). Мы спасаем каркас, но полностью уничтожаем детали
Главный аргумент фанатов экстремального квантования звучит так: “Смотрите на бенчмарки! Perplexity (ошибка [3] предсказания) на 3 битах выросла всего на 0.2 по сравнению с FP16!”
И вот здесь кроется главная ловушка, в которую попала индустрия. Perplexity это метрика в среднем
80% любого текста это вода. Предлоги, союзы, очевидные продолжения фраз. Чтобы предсказать, что после “Девочка пошла домой потому что позвала” идет “мама”, модели достаточно 2 бит. Базовая структура языка очень устойчива к шуму, поэтому perplexity почти не страдает.
Но что происходит с оставшимися 20%? Что происходит с редкими знаниями?
Вспомните механику градиентов. Редкие факты (названия специфических библиотек кода, имена ученых, тонкие логические выводы) кодируются микроскопическими сдвигами весов во время обучения [4].
Когда вы применяете 3 битное квантование, эта тонкая топология просто округляется до нуля (или до ближайшей грубой корзины). Вы получаете лоботомированную модель. Она всё ещё прекрасно болтает о погоде (поэтому вам кажется, что она умная), но когда вы просите её написать сложный python скрипт или решить логическую задачу, она начинает жестоко галлюцинировать. Вы отрезали ей ту часть мозга [5], которая хранила нюансы.
Стремление квантовать модели до 4 (а теперь уже и до 3) бит породило абсурдную ситуацию.
Люди берут гигантскую модель на 70 миллиардов параметров (которая весит 140 ГБ в FP16) и сплющивают её до 3 бит, чтобы она влезла в 24 ГБ VRAM.
Но с математической точки зрения [6], 70B модель в 3 битах это архитектурный инвалид. Её веса настолько искажены ошибкой квантования, что её реальная предсказательная способность падает ниже плинтуса.
Если у вас есть 24 ГБ VRAM, гораздо умнее взять модель на 14B или 32B параметров, но оставить её в 6 или 8 битах. Плотная, математически чистая маленькая модель всегда порвет огромного квантованного франкенштейна в задачах, требующих логики, а не просто генерации связного текста
Не будем забывать [7] и про архитектуру GPU. Видеокарта не умеет перемножать 3 битные числа. Современные тензорные ядра работают с FP16/BF16 (или INT8 на новых архитектурах).
Это значит, что при генерации текста ядру CUDA нужно сначала на лету распаковать (де-квантовать) эти 3 битные значения обратно в FP16, и только потом сделать умножение. Мы разгрузили шину памяти [8] (VRAM), но перегрузили ALU (вычислительные блоки) бесполезной работой по распаковке.
Инженерия это искусство компромисса, а не фанатизм. Переход с FP16 на 8 битное или 6 битное квантование это здравый смысл, который демократизировал ИИ.
Но то, что происходит сейчас с 4 bit, 3 bit и ниже это чистый фанатизм. Это зависимость от оптимизации ради оптимизации. Мы так увлеклись попытками засунуть слона в багажник легковушки, что не заметили, как в процессе переломали слону все кости. Он влез, да. Но ходить он больше не может.
Автор: YH7H22
Источник [9]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/30463
URLs in this post:
[1] математике: http://www.braintools.ru/article/7620
[2] интеллекта: http://www.braintools.ru/article/7605
[3] ошибка: http://www.braintools.ru/article/4192
[4] обучения: http://www.braintools.ru/article/5125
[5] мозга: http://www.braintools.ru/parts-of-the-brain
[6] зрения: http://www.braintools.ru/article/6238
[7] забывать: http://www.braintools.ru/article/333
[8] памяти: http://www.braintools.ru/article/4140
[9] Источник: https://habr.com/ru/articles/1036880/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1036880
Нажмите здесь для печати.