Intriguing Properties of Quantization at Scale
[Статья]
Введение
На мой взгляд, более подходящее название для этой статьи было бы "How to train quantization-friendly LLM?", ибо интриги здесь, как в матче Фенербахче против Реал Мадрида, но полагаю. что такой вариант показался авторам более привлекательным.
Как известно, начиная с определенного масштаба имеет место эффект emergent outlier dimensions - возникновения измерений-отбросов с большими по величине значениями активаций. Потому, даже небольшая ошибка при квантизации весов в соотвествующем измерении приводит к значительной ошибке.
В работе LLM.int8() было предложено не заморачиваться с квантованием этих измерений, а держать их в исходной точности. Так как их немного, то накладные расходы от их хранения малы. Беда в том, что разделение весов на обычные и отбросы, обработка их по отдельности и последующее слияние, существенно замедляют работу нейронной сети.
Встает вопрос - является ли явление измерений-отбросов случайностью или неизбежным аттрибутом всезнающей языковой модели?
Некоторые семейства LLM тяжело квантуются, как OPT, другие же квантуются существенно легче, например, BLOOM. Отсюда следует гипотеза, что подобные качества LLM являются следствием процедуры обучения.
В данной работе авторы исследуют влияние различных гиперпараметров и факторов в процедуре обучения, влияющих на ошибку квантования весов, и находят рецепт по производству quantization-friendly моделей.
В поисках оптимального рецепта
Авторы статьи исследуют влияние следующих факторов на квантование модели:
- Weight decay (весовой распад звучит слишком кринжово)
- Обрезание градиентов
- Дропаут
- Выбор типа half precision
Модели предобучают на смеси CommonCrawl и C4 и валидируют на наборе из 8 zero-shot (без обучения на них) бенчмарках: Copa (test/dev), HellsSwag, PIQA, StoryCloze, WinoGrande, Paralex, LAMBADA и оценивают качество работы модели как средний результат по этим датасетам.
Подбор параметров осуществлялся на меньших моделях, ибо прогонять по многу раз самую большую 52B модель - удовольствие не из дешевых.
- Чем больше weight decay - тем меньше ошибка при квантизации, что логично, ибо регуляризация на норму весов сужает диапазон принимаемых ими значений.
- Большие значение дропаута увеличивают ошибку при квантизации. Более того просаживается и качество исходной модели из-за перерегуляризации.
- Обрезание градиентов улучшает качество квантизации. По всей видимости, невозможность ускакать далеко за один шаг оптимизации, уменьшает вероятность больших значений весов.
Но, наверное, самым интересным и неожиданным открытием является эффект от выбора типа половинной точности. В современной практике принято использовать bf16
для обучения больших языковых моделей, обладающим большим диапазоном значений (8 бит на экспоненту против 5 у fp16
, но с меньшей точностью представления чисел), так как с ним обучение стабильнее. Как оказалось, при обучении с bf16
падение качества модели значительно меньше по сравнению с fp16
, причем на любой стадии обучения.
Чтобы разобраться в причинах подобного явления авторы статьи посмотрели на распределения весов в разных слоях. Характерное распределение весов при обучении с bf16
имеет заметно меньший разброс по сравнению с fp16. Кроме того, LayerNorm, модулирующий величину активаций имеет большее среднее и разброс для fp16
, что, как утверждается, способствует появлению выбросов.
Cohere
Таким образом, оптимальный рецепт получения модели, толерантой к квантованию, включает в себя использование сравнительно большого weight_decay, gradient clipping, и bf16
для обучения. Вооруженные этим знанием, авторы обучают семейство моделей Cohere (названного в честь их стартапа). Нормы весов и активаций, ошибки квантования, вышли значительно меньше, чем у моделей из семейств OPT и Bloom.
Все модели семейства квантуются в W8A8 (квантование весов и активаций в 8 бит) почти без просадки, и с умеренной просадкой в W4 (квантование только весов) . Заметим, что GPTQ и его производные (SPQR, AWQ) умеют квантовать все известные семейства LLM тоже с минимальной просадкой, но здесь используется самое примитивное квантование - округление с ближайшему значению на сетке.
Данное знание весьма полезно с практической точки зрения, так как квантованные в низкую битность LLM набирают всю большую популярность в сообществе.
Из забавного, почему-то часть аффилиаций указана как просто Cohere, а часть Cohere For AI - хоть вроде все из одной компании.