🔬 Метод
Напомним, что MXFP формат приводит скейлы в E8M0, то есть к степеням двойки, что позволяет представлять очень большие и очень маленькие числа, но, возможно, очень неточно. NVFP квантизует скейлы в E4M3 со сравнительно узким диапазоном значений [-448, 448], но более плотной сеткой.
Вращения 🌀
Исходные распределения весов и активаций отличаются от нормального более тяжелыми хвостами. Особенно активаций. Ортогональные вращения, в частности пресловутые Адамаровы повороты, приводят их к почти нормальным, с меньшим разбросом. И данное свойство по идее должно стабильно улучшать или не ухудшать ошибку квантизации.
Однако, как оказалось повороты могут иногда быть вредны 😱.
При квантизации в NVFP формат методом округления к ближайшему (Round-to-Nearest) ошибки квантизации с поворотом оказалась больше, чем без. Вот это поворот, как говорится.
В предположении того, что оригинальные веса/активации распределены по Лапласу, а повернутые - нормально, были получены оценки на квадратичную ошибку в зависимости от размера группы квантизации. И при маленьких размерах группы ошибка для Лапласовского распределения может быть меньше, чем для нормального. С увеличением размера группы вращения становятся более полезными.
Для MXFP вращения полезны и позволяют существенно снизить ошибку округления весов.
Характерный диапазон значений ⚖️
Мы, вернее, @black_samorez_channel, построили гистограммы значений весов и активаций. Оказалось, что веса и активации хорошо укладываются в FP8 E4M3, Диапазон же E8M0 сильно избыточен - на практике вы вряд ли встретите 2^{-128} или 2^{127}.
Что не дает выигрыша ☹️
SmoothQuant (метод переноса сложности квантизации с весов на активации) оказался не очень полезен. SpinQuant (обучаемые преобразования) не дают профита в сравнении с Адамаровыми вращениями. Другие преобразования из литературы, дискретные синусы/косинусы и вариации Адамаровых тоже не шибко полезны.
Еще пара мелких трюков 🪄
Вместо absmax скейлов полезно подбирать оптимальный по MSE на некоторой сетке значений. Actorder порядок в GPTQ https://github.com/vllm-project/vllm/pull/8135 (без перегруппировки весов) тоже чуть-чуть да помогает.
И итоговый метод из вращения маленькой матрицей, которую можно зафьюзить в кернел матричного умножения, подбора скейла и actorder был назван MR-GPTQ (Micro‑Rotated‑GPTQ).
Post #555
1.61K
- 👍 1