Как стать автором
Обновить

Сравнение различных схем квантования для LLM

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров5.3K

Что такое квантование?

Квантование — это метод сжатия модели, который преобразует веса и активации в LLM путем уменьшения битности вычислений, т. е. из типа данных, который может содержать больше информации, в тип, который содержит меньше. Типичным примером этого является преобразование данных из 16-битного вещественного числа (F16) в 8-битное или 4-битное целое число (Q8 или Q4). 

Отличной аналогией для понимания квантования является сжатие изображения. Сжатие изображения предполагает уменьшение его размера путем удаления из него части информации, т. е. битов данных. Теперь, хотя уменьшение размера изображения обычно снижает его качество (до приемлемого уровня), это также означает, что на данном устройстве можно сохранить больше изображений, требуя при этом меньше времени и пропускной способности для передачи или отображения пользователю. Аналогичным образом, квантование LLM увеличивает его мобильность и количество способов его развертывания – хотя и с приемлемым жертвованием деталями или точностью. 

FP32 to INT8
FP32 to INT8

Зачем нужно квантование?

Квантование — важный процесс в машинном обучении, поскольку уменьшение количества битов, необходимых для каждого веса модели, приводит к значительному уменьшению ее общего размера. Следовательно, квантование создает LLM, которые потребляют меньше памяти, требуют меньше места для хранения, более энергоэффективны и способны выполнять более быстрый вывод. Все это дает важнейшее преимущество, позволяющее LLM работать на более широком спектре устройств.

Для запуска Llama 70B без квантизации требуется GPU объемом 130 ГБ. Если мы применяем квантизацию на 4 бита, то потребуется GPU объемом 40 ГБ, при этом потеря точности составит 4 процента.

Каковы преимущества и недостатки квантованных LLMs?

Давайте рассмотрим плюсы и минусы квантования.

Преимущества:

  1. Меньший размер модели: за счет уменьшения размера весов квантование приводит к созданию более компактных моделей. Это позволяет использовать их в более широком спектре ситуаций, например, с менее мощным оборудованием, и снижает затраты на хранение. Благодаря этому возникает возможность увеличения масштабируемости.

  2. Более быстрое выполнение: использование более низких битовых операций для весов и соответствующее снижение требований к памяти обеспечивают более эффективные вычисления.

Недостатки:

  1. Потеря точности: несомненно, наиболее значительным недостатком квантования является потенциальная потеря точности в выходных данных. Преобразование весов модели в более низкую точность вероятно приведет к ухудшению ее производительности, и чем "агрессивнее" техника квантования, т.е. чем ниже битовое преобразование , например, 3 бита, 2 бита и т.д., тем выше риск потери большой точности.

Схемы квантования

В существующих типах квантования ggml есть "тип-0" (Q4_0, Q5_0) и "тип-1" (Q4_1, Q5_1). В "типе-0" веса w получаются из квантов q с помощью w = d * q, где d - масштаб блока. В "типе-1" веса задаются w = d * q + m, где m - минимум блока.

Q2_K - "тип-1" 2-битное квантование в суперблоках, содержащих 16 блоков, каждый блок имеет 16 весов. Масштабы и минимумы блоков квантуются 4 битами. В итоге эффективно используется 2,5625 бита на вес (bpw).

Q3_K - "тип-0" 3-битное квантование в суперблоках, содержащих 16 блоков, каждый из которых имеет 16 весов. Шкалы квантуются 6 битами. В итоге используется 3,4375 bpw.

Q3_K_S = Использует  Q3_K для всех тензеров.

Q3_K_M = Использует Q4_K для тензеров attention.wv( веса, используемые для вычисления вектора запроса в слое внимания), тензор attention.wo(представляет веса, используемые для вычисления выходного вектора в слое внимания), тензор feed_forward.w2 (веса, используемые в слое прямого распространения после слоя внимания). В противном случае Q3_K.

Q3_K_L = тоже самое, что и Q3_K_M, только для избранных тензеров использует Q5_K.

Q4_0 = 32 числа в блоке, 4 бита на вес, в среднем 5 бит на значение, каждый вес задается общим масштабом * квантованным значением.

Q4_1 = 32 числа в блоке, 4 бита на вес, в среднем 6 бит на значение, каждый вес задается общим масштабом * квантованным значением + общим смещением.

Q5_0 = 32 числа в блоке, 5 бит на вес,1 масштабное значение в 16-битном float, размер составляет 5.5 bpw.

Q5_1 = 32 числа в чанке, 5 бит на вес, 1 масштабное значение в 16-битном float и 1 значение смещения в 16 бит, размер - 6 bpw.

Q6_K - 6-битное квантование "тип-0". Суперблоки с 16 блоками, каждый блок имеет 16 весов. Шкалы квантуются 8 битами. В итоге используется 6,5625 bpw

Q8_0 = то же, что и q4_0, только 8 бит на вес, 1 масштабное значение в 32 бита, итого 9 bpw

Для остальных аналогично, меняется только количество бита на вес.

Бит на символ(bpw)

Bits-per-character (bpw) - это метрика, отражаемая языковых моделях. Она измеряет именно то, что прямо указано в названии: среднее количество бит, необходимых для кодирования одного символа. Это приводит к пересмотру объяснения Шеннона о энтропии языка:

"если язык переведен в двоичные цифры (0 или 1) наиболее эффективным образом, энтропия представляет собой среднее количество двоичных цифр, требуемых для каждой буквы исходного языка."

Perplexity 

Perplexity (PPL) - одна из наиболее распространенных метрик для оценки языковых моделей. Эта метрика применима именно к классическим языковым моделям.

PPL определяется как экспоненциальное среднее отрицательное логарифмическое правдоподобие всех слов во входной последовательности.

Формула PPL из HF
Формула PPL из HF

Определяем лучший метод квантования для модели 70B

Название модели

Квантование

Model size

RAM

Perplexity

Delta to fp16 %

LLama 70B

Q4_0

36.20 GB

41.37 GB

3,5550

3.61%

Q4_1

40.20 GB

45.67 GB

3,5125

2.37%

Q5_0

44.20 GB

49.96 GB

3,4744

1.26%

IQ2XS

19.4 GB

21.1 GB

4,090

19.21%

Q2_K

27.27 GB

31.09 GB

3,7739

8.82%

Q3_K_S

28,6 GB

31.4 GB

3,7019

7.89%

Q3_K_M

30.83 GB

35.54 GB

3,5932

4.72%

Q3_K_L

33.67 GB

38.65 GB

3,5617

3.80%

Q4_K_S

36.39 GB

41.37 GB

3,4852

1.57%

Q4_K_M

39.5 GB

42.1 Gb

3,4725

1.20%

Q5_K_S

45.3 GB

47.7 Gb

3,4483

0.50%

Q5_K_M

46.5 GB

48.9 Gb

3,4451

0.40%

Q6_K

54.0 GB

56.1 GB

3,4367

0.16%

F16

128.5 GB

3,4313

0%

Выводы:

  • Cамый эффективный метод квантования для видеокарты размером 48GB является Q5_K_S и Q5_K_M. Я и сам использую в продакшене именно Q5_K_S.

  • 70B работает на 28GB и довольно неплохо, если сравнить с моделями 33B в нормальном квантовании, то выигрыш скорее всего будет за старшим братом.

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

Бенчмарк квантования для размеров LLM 56B, 33B, 13B и 7B находится в разработке. Если вы не хотите его пропустить, приглашаем вас подписаться на Телеграм-канал автора: it_garden. Там будет опубликована итоговая таблица с результатами бенчмарка.

Теги:
Хабы:
Всего голосов 9: ↑8 и ↓1+7
Комментарии5

Публикации

Истории

Работа

Python разработчик
123 вакансии
Data Scientist
58 вакансий

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург