tgoop.com/quant_prune_distill/133
Last Update:
GPTQ ранее показал сильный результат при квантовании больших языковых моделей, потому авторы статьи (его же создатели) берут его за основу. Однако, наивное применение сопряжено с определенными сложностями - для оценки гессианов нужно прогнать последовательности через каждого эксперта, которые хоть и небольшие, но их много. Авторы прогоняют последовательность через блок, и для каждого эксперта сохраняют в оперативную память активации, нужные для оценки гессиана, и распределение токенов. Чтобы повысить скорость алгоритма, квантизация нескольких экспертов проводится параллельно. 16 Экспертов, обрабатываемых параллельно дают прирост ~6x по сравнению с обработкой каждого эксперта по отдельности.
Чтобы все завелось, потребовался еще ряд мелких хаков :
1) более сильная регуляризация
2) использование округления к ближайшему целому вместо GPTQ, если матрица, оказалась плохо обусловленной
3) ограничение на число токенов для каждого эксперта, чтобы не создавать большие тензоры.
Кроме того, полезным оказалось не учитывать специальные токены при калибровке.
Для сжатия весов используется поканальная тернарная квантизация, когда каждый вес принимает только 3 значения - минимальное, 0 и максимальное. Обычно веса имеют нормальное распределение, сконцентрированное около 0, потому значительная доля весов (85-90%) становится нулевой. Потому возникает идея как-то использовать это свойство.
Стандартные форматы хранения sparse матриц с метаданными ограничены по сжатию, а кодирование Хаффмана с переменной длиной кода не получается эффективно реализовать на GPU.
Потому авторы предложили свою схему энтропийного кодирования с фиксированной длиной символа, но кодирующее переменное число бит, которое может быть эффективно реализовано на GPU. Сжатие не Шеннон-оптимально, зато процедура кодирования позволяет эффективно использовать GPU. И далее описывается процедура и реализация CUDA kernel.
BY КПД
Share with your friend now:
tgoop.com/quant_prune_distill/133