Панель инструментов сжатия моделей для больших языковых моделей и моделей распространения
[2024/11] ? Публикуется наша последняя работа по квантованию диффузионной модели W4A4, алгоритм SVDQuant и система Nunchaku ! Проверьте нашу газету!
[2024/05] ? Наш новейший алгоритм квантования W4A8KV4 LLM и система QServe публично выпущены! QoQ — это сокращение от quattuor-octō-quattuor , что на латыни означает 4-8-4. Проверьте нашу газету!
DeepCompressor — это набор инструментов сжатия моделей с открытым исходным кодом для больших языковых моделей и моделей распространения на основе PyTorch. DeepCompressor в настоящее время поддерживает ложное квантование с любым целочисленным типом данных и типом данных с плавающей запятой в пределах 8 бит, например, INT8, INT4 и FP4_E2M1. Вот примеры, реализующие следующие алгоритмы.
Квантование после обучения для больших языковых моделей:
Квартал за квартал (W4A8KV4)
Гладкий Квант (W8A8)
АВК (W4A16)
GPTQ (W4A16)
Квантование только по весу
Квантование активации веса
Весовая активация и квантование KV-кэша
Квантование после обучения для диффузионных моделей:
СВДКвант (W4A4)
Квантование активации веса
DeepCompressor также содержит примеры, которые интегрируются с другими библиотеками вывода.
Развертывание квантованных LLM только по весу с помощью TinyChat
Развертывание квантованных LLM с помощью QServe
Развертывание моделей квантовой диффузии с помощью Nunchaku
Клонируйте этот репозиторий и перейдите в папку deepcompressor.
git clone https://github.com/mit-han-lab/deepcompressor cd deepcompressor
Установить пакет
conda env create -f environment.yml poetry install
[Веб-сайт][Документ][Система вывода нунчаку]
Диффузионные модели доказали свою высокую эффективность при создании высококачественных изображений. Однако по мере того, как эти модели становятся больше, они требуют значительно больше памяти и страдают от более высоких задержек, что создает серьезные проблемы при развертывании. В этой работе мы стремимся ускорить диффузионные модели путем квантования их весов и активаций до 4 бит. На таком агрессивном уровне и веса, и активации очень чувствительны, и традиционные методы квантования после обучения для больших языковых моделей, такие как сглаживание, становятся недостаточными. Чтобы преодолеть это ограничение, мы предлагаем SVDQuant , новую парадигму 4-битного квантования. В отличие от сглаживания, которое перераспределяет выбросы между весами и активациями, наш подход поглощает эти выбросы, используя ветвь низкого ранга. Сначала мы консолидируем выбросы, перемещая их от активаций к весам, затем используем высокоточную ветвь низкого ранга, чтобы учесть выбросы веса с помощью разложения по сингулярным значениям (SVD). Этот процесс облегчает квантование с обеих сторон. Однако наивный запуск ветви низкого ранга независимо влечет за собой значительные накладные расходы из-за дополнительного перемещения данных при активации, что сводит на нет ускорение квантования. Чтобы решить эту проблему, мы совместно разработали механизм вывода Nunchaku , который объединяет ядра низкоранговой ветви с ядрами низкоразрядной ветви, чтобы отсекать избыточный доступ к памяти. Он также может беспрепятственно поддерживать готовые адаптеры низкого ранга (LoRA) без необходимости повторного квантования. Обширные эксперименты с SDXL, PixArt-∑ и FLUX.1 подтверждают эффективность SVDQuant в сохранении качества изображения. Мы сократили использование памяти для моделей 12B FLUX.1 в 3,5 раза, добившись ускорения в 3,0 раза по сравнению с 4-битным базовым квантованием только по весу на графическом процессоре 4090 для ноутбуков емкостью 16 ГБ, открывая путь для большего количества интерактивных приложений на ПК.
Ниже приведены качество и сходство, оцененные на основе 5000 образцов из набора данных MJHQ-30K. IR означает ImageReward. Наши 4-битные результаты превосходят другие 4-битные базовые показатели, эффективно сохраняя визуальное качество 16-битных моделей.
Модель | Точность | Метод | ПИД ( | ИК ( | ЛПИПС ( | ПСНР( |
---|---|---|---|---|---|---|
FLUX.1-dev (50 шагов) | БФ16 | -- | 20.3 | 0,953 | -- | -- |
ИНТ W8A8 | Наш | 20,4 | 0,948 | 0,089 | 27,0 | |
W4A16 | НФ4 | 20,6 | 0,910 | 0,272 | 19,5 | |
ИНТ W4A4 | Наш | 19.86 | 0,932 | 0,254 | 20.1 | |
ФП W4A4 | Наш | 21,0 | 0,933 | 0,247 | 20.2 | |
FLUX.1-шнелль (4 ступени) | БФ16 | -- | 19.2 | 0,938 | -- | -- |
ИНТ W8A8 | Наш | 19.2 | 0,966 | 0,120 | 22,9 | |
W4A16 | НФ4 | 18,9 | 0,943 | 0,257 | 18,2 | |
ИНТ W4A4 | Наш | 18,4 | 0,969 | 0,292 | 17,5 | |
ФП W4A4 | Наш | 19,9 | 0,956 | 0,279 | 17,5 | |
РП16 | -- | 16,6 | 0,944 | -- | -- | |
PixArt-Сигма (20 шагов) | ИНТ W8A8 | ВидиТ-Q | 15,7 | 0,944 | 0,137 | 22,5 |
ИНТ W8A8 | Наш | 16.3 | 0,955 | 0,109 | 23,7 | |
ИНТ W4A8 | ВидиТ-Q | 37,3 | 0,573 | 0,611 | 12,0 | |
ИНТ W4A4 | Наш | 20.1 | 0,898 | 0,394 | 16.2 | |
ФП W4A4 | Наш | 18,3 | 0,946 | 0,326 | 17,4 |
[Веб-сайт][Документ][Код алгоритма QoQ][Система графического процессора QServe]
Квантование может ускорить вывод модели большого языка (LLM). Выходя за рамки квантования INT8, исследовательское сообщество активно изучает еще более низкую точность, например INT4. Тем не менее, современные методы квантования INT4 только ускоряют малопакетный граничный вывод LLM, не обеспечивая прироста производительности при крупнопакетном облачном обслуживании LLM. Мы обнаружили критическую проблему: существующие методы квантования INT4 страдают от значительных накладных расходов во время выполнения (20–90%) при деквантовании весов или частичных сумм на графических процессорах. Чтобы решить эту проблему, мы представляем QoQ , алгоритм квантования W4A8KV4 с 4-битным весом, 8-битной активацией и 4-битным KV-кешем. QoQ означает quattuor-octo-quattuor , что на латыни означает 4-8-4. QoQ реализуется библиотекой вывода QServe , которая обеспечивает измеренное ускорение. Ключевой вывод, лежащий в основе QServe, заключается в том, что на эффективность обслуживания LLM на графических процессорах критически влияют операции на ядрах CUDA с низкой пропускной способностью . Основываясь на этом понимании, в алгоритме QoQ мы вводим прогрессивное квантование, которое может обеспечить низкие накладные расходы на деквантование в W4A8 GEMM. Кроме того, мы разрабатываем SmoothAttention для эффективного снижения снижения точности, вызванного 4-битным KV-квантованием. В системе QServe мы выполняем переупорядочение весов с учетом вычислений и используем преимущества параллелизма на уровне регистров для уменьшения задержки деквантования. Мы также связываем объединенное внимание с памятью, используя прирост производительности, обеспечиваемый квантованием KV4. В результате QServe повышает максимально достижимую пропускную способность обслуживания Llama-3-8B в 1,2 раза на A100, в 1,4 раза на L40S; и Qwen1.5-72B в 2,4 раза на A100, в 3,5 раза на L40S по сравнению с TensorRT-LLM.
Ниже приведена ошибка WikiText2, оцененная с длиной последовательности 2048. Чем ниже, тем лучше.
Методы | Точность | Лама-3.1 70Б | Лама-3.1 8Б | Лама-3 70Б | Лама-3 8Б | Лама-2 7Б | Лама-2 13Б | Лама-2 70Б | Лама 7Б | Лама 13Б | Лама 30Б | Мистраль 7Б | Йи 34Б |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
РП16 | 2,81 | 6.24 | 2,85 | 6.14 | 5,47 | 4,88 | 3.32 | 5,68 | 5.09 | 4.10 | 5.25 | 4,60 | |
SmoothQuant | W8A8 | 3.23 | 6.38 | 3.14 | 6.28 | 5.54 | 4,95 | 3.36 | 5,73 | 5.13 | 4.23 | 5.29 | 4,69 |
ГПТК-Р | W4A16 g128 | 3,46 | 6,64 | 3.42 | 6,56 | 5,63 | 4,99 | 3.43 | 5,83 | 5.20 | 4.22 | 5.39 | 4,68 |
AWQ | W4A16 g128 | 3.22 | 6,60 | 3.20 | 6.54 | 5,60 | 4,97 | 3.41 | 5,78 | 5.19 | 4.21 | 5.37 | 4,67 |
КваРот | W4A4 | 5,97 | 8.32 | 6,75 | 8.33 | 6.19 | 5.45 | 3,83 | 6.34 | 5,58 | 4,64 | 5,77 | НЭН |
Атом | W4A4 g128 | - | - | 4.33 | 7,78 | 6.12 | 5.31 | 3,73 | 6.25 | 5.52 | 4,61 | 5,76 | 4,97 |
квартал к кварталу | W4A8KV4 | 3,69 | 6,91 | 3,65 | 6,84 | 5,75 | 5.11 | 3.51 | 5,92 | 5.27 | 4.32 | 5.45 | 4,73 |
квартал к кварталу | W4A8KV4 g128 | 3.54 | 6,80 | 3.51 | 6,73 | 5,68 | 5.05 | 3,46 | 5,88 | 5.23 | 4.27 | 5.41 | 4,73 |
* SmoothQuant оценивается с помощью статического квантования кэша KV для каждого тензора.
При обслуживании больших языковых моделей Llama-3-8B и Qwen1.5-72B на графических процессорах L40S и A100 QServe демонстрирует превосходную производительность, достигая в 1,2–1,4 раза большей пропускной способности по сравнению с ведущим отраслевым решением TensorRT-LLM для Llama-LLM. 3-8B и пропускная способность в 2,4-3,5 раза выше для Qwen1.5-72B.
Узнайте больше о настройке бенчмаркинга в системе вывода графического процессора QServe.
Л40С (48Г) | Лама-3-8Б | Лама-2-7Б | Мистраль-7Б | Лама-2-13Б | Лама-30Б | Йи-34Б | Лама-2-70Б | Квен-1,5-72Б |
---|---|---|---|---|---|---|---|---|
ТРТ-LLM-FP16 | 1326 | 444 | 1566 | 92 | ООМ | ООМ | ООМ | ООМ |
TRT-LLM-W4A16 | 1431 | 681 | 1457 | 368 | 148 | 313 | 119 | 17 |
TRT-LLM-W8A8 | 2634 | 1271 | 2569 | 440 | 123 | 364 | ООМ | ООМ |
Атом-W4A4 | -- | 2120 | -- | -- | -- | -- | -- | -- |
КваРот-W4A4 | -- | 805 | -- | 413 | 133 | -- | -- | 15 |
QServe-W4A8KV4 | 3656 | 2394 | 3774 | 1327 | 504 | 869 | 286 | 59 |
Увеличение пропускной способности* | 1,39x | 1,13x | 1,47x | 3,02x | 3,41x | 2,39x | 2,40x | 3,47x |
А100 (80Г) | Лама-3-8Б | Лама-2-7Б | Мистраль-7Б | Лама-2-13Б | Лама-30Б | Йи-34Б | Лама-2-70Б | Квен-1,5-72Б |
---|---|---|---|---|---|---|---|---|
ТРТ-LLM-FP16 | 2503 | 1549 г. | 2371 | 488 | 80 | 145 | ООМ | ООМ |
TRT-LLM-W4A16 | 2370 | 1549 г. | 2403 | 871 | 352 | 569 | 358 | 143 |
TRT-LLM-W8A8 | 2396 | 2334 | 2427 | 1277 | 361 | 649 | 235 | 53 |
Атом-W4A4 | -- | 1160 | -- | -- | -- | -- | -- | -- |
КваРот-W4A4 | -- | 1370 | -- | 289 | 267 | -- | -- | 68 |
QServe-W4A8KV4 | 3005 | 2908 | 2970 | 1741 г. | 749 | 803 | 419 | 340 |
Увеличение пропускной способности* | 1,20x | 1,25x | 1,22x | 1,36x | 2,07x | 1,23x | 1,17x | 2,38x |
Абсолютная пропускная способность генерации токенов QServe и базовых систем (единица измерения: токенов в секунду. --
означает «не поддерживается»). Все эксперименты проводились с одним и тем же бюджетом памяти устройства. Увеличение пропускной способности QServe рассчитывается с учетом наилучшего базового показателя в каждом столбце.
Если вы считаете, что deepcompressor
полезен или имеет отношение к вашему исследованию, пожалуйста, процитируйте нашу статью:
@article{lin2024qserve, title={QServe: W4A8KV4 Квантование и совместное проектирование системы для эффективного обслуживания LLM}, автор={Линь*, Юцзюнь и Тан*, Хаотянь и Ян*, Шан и Чжан, Чжекай и Сяо, Гуансюань и Ган* , Чуан и Хан, Сун}, журнал={препринт arXiv arXiv:2405.04532}, год={2024}}@article{ li2024svdquant, title={SVDQuant: Поглощение выбросов компонентами низкого ранга для 4-битных диффузионных моделей}, автор={Ли*, Муян и Линь*, Юйцзюнь и Чжан*, Чжекай и Цай, Тяньлэ и Ли, Сюйюй и Го, Цзюньсянь и Се, Энцзе и Мэн, Ченлинь и Чжу, Цзюнь-Янь и Хань, Песня}, журнал={препринт arXiv arXiv:2411.05007}, год={2024}}
Следующие проекты тесно связаны с QServe. Наша группа разработала полнофункциональную поддержку приложений, алгоритмов, систем и оборудования для эффективных больших моделей, получив более 9 тысяч звезд GitHub и более 1 миллиона загрузок сообщества Huggingface .
Вы также можете посетить лабораторию MIT HAN Lab и узнать о других интересных проектах по эффективному генеративному искусственному интеллекту !
[ Система ] QServe: квантование W4A8KV4 для эффективного обслуживания LLM
[ Система ] TinyChat: эффективный и легкий чат-бот с AWQ
[ Приложение ] VILA: О предварительном обучении моделей визуального языка
[ Алгоритм ] AWQ: весовое квантование с учетом активации для сжатия и ускорения LLM
[ Алгоритм ] SmoothQuant: точное и эффективное квантование после обучения для больших языковых моделей
[ Алгоритм ] DistriFusion: распределенный параллельный вывод для моделей диффузии высокого разрешения
[ Аппаратное обеспечение ] SpAtten: эффективная архитектура разреженного внимания с каскадным токеном и обрезкой головы
DeepCompressor создан на основе многих библиотек с открытым исходным кодом, включая (но не ограничиваясь ими) GPTQ, QuaRot и Atom.