tgoop.com/quant_prune_distill/179
Last Update:
Marlin
[Статьи нет, обычно наоборот][Код]
Marlin, Mixed Auto-Regressive Linear kernel - новое быстрое ядро FP16xINT4 для инференса LLM с большими батчами.
Как известно, вычисления на современных GPU для современных GPU обычно memory bound, и можно получить заметное ускорение даже с fp умножением за счет одной лишь подгрузки весов в кэши. И идеальное ускорение, которое дает INT4 - 4x. Однако с увеличением размера батча, мы начинаем выходить на compute-bound и выигрыш от имеющихся ядер (не использующих tensor cores) исчезает, то есть они становятся медленее fp16 native матричных операций.
В этом репозитории выложена реализация нового ядра, оптимизирующего работу с кэшами и позволяющего иметь значительное ускорение по сравнению с fp16 даже на больших батчах. Основные фичи следующие:
1️⃣ префетчинг
2️⃣ использование активаций в вычислениях несколько раз до загрузки / сгрузки
3️⃣ асинхронная загрузка весов модели
4️⃣ тонкая настройка порядка операций квантования / деквантования и матричных умножений с tensor cores для максимальной утилизации железа
5️⃣ оптимизация конфигурации варпов (групп потоков на GPU)
В итоге удается достичь почти идеального speedup - 4x по сравнению с fp16 на батчах до 32, и иметь ускорение даже на больших (64-128), в то время как безйлайны из bitsandbytes, exllamav2, AWQ становятся в ~2x медленее fp16 с батчей >=16.
Ускорение имеет место на нескольких GPU поколения Ampere - A10, A6000, RTX 3090 и сохраняется даже на пониженных частотах.
На поколении Hopper пока нет реализации.
BY КПД
Share with your friend now:
tgoop.com/quant_prune_distill/179