
Boîte à outils de compression de modèles pour les grands modèles de langage et les modèles de diffusion
[2024/11] ? Notre dernier travail de quantification du modèle de diffusion W4A4, l'algorithme SVDQuant et le système Nunchaku , est rendu public ! Consultez notre journal !
[2024/05] ? Notre dernier algorithme QoQ de travail de quantification W4A8KV4 LLM et notre système QServe sont rendus publics ! QoQ est l'abréviation de quattuor-octō-quattuor qui signifie 4-8-4 en latin. Consultez notre journal !
DeepCompressor est une boîte à outils de compression de modèles open source pour les grands modèles de langage et les modèles de diffusion basés sur PyTorch. DeepCompressor prend actuellement en charge la fausse quantification avec tout type de données entières et à virgule flottante sur 8 bits, par exemple INT8, INT4 et FP4_E2M1. Voici des exemples qui implémentent les algorithmes suivants.
Quantification post-formation pour les grands modèles de langage :
QoQ (W4A8KV4)
SmoothQuant (W8A8)
AWQ (W4A16)
GPTQ (W4A16)
Quantification par poids uniquement
Quantification par activation du poids
Activation du poids et quantification du cache KV
Quantification post-formation pour les modèles de diffusion :
SVDQuant (W4A4)
Quantification par activation du poids
DeepCompressor contient également des exemples qui s'intègrent à d'autres bibliothèques d'inférence.
Déployez des LLM quantifiés uniquement en poids avec TinyChat
Déployer des LLM quantifiés avec QServe
Déployer des modèles de diffusion quantifiés avec Nunchaku
Clonez ce référentiel et accédez au dossier deepcompressor
git clone https://github.com/mit-han-lab/deepcompressor cd deepcompressor
Installer le package
conda env create -f environment.yml poetry install
[Site Web][Papier][Système d'inférence Nunchaku]
Les modèles de diffusion se sont révélés très efficaces pour générer des images de haute qualité. Cependant, à mesure que ces modèles grandissent, ils nécessitent beaucoup plus de mémoire et souffrent d’une latence plus élevée, ce qui pose d’importants problèmes de déploiement. Dans ce travail, nous visons à accélérer les modèles de diffusion en quantifiant leurs poids et activations sur 4 bits. À un niveau aussi agressif, les pondérations et les activations sont très sensibles, là où les méthodes conventionnelles de quantification post-formation pour les grands modèles de langage comme le lissage deviennent insuffisantes. Pour surmonter cette limitation, nous proposons SVDQuant , un nouveau paradigme de quantification 4 bits. Différente du lissage qui redistribue les valeurs aberrantes entre poids et activations, notre approche absorbe ces valeurs aberrantes en utilisant une branche de bas rang. Nous consolidons d'abord les valeurs aberrantes en les déplaçant des activations vers les poids, puis utilisons une branche de bas rang de haute précision pour prendre en compte les valeurs aberrantes de poids avec la décomposition en valeurs singulières (SVD). Ce processus facilite la quantification des deux côtés. Cependant, l’exécution naïve de la branche de bas rang de manière indépendante entraîne une surcharge importante en raison du mouvement supplémentaire des données des activations, annulant ainsi l’accélération de la quantification. Pour résoudre ce problème, nous avons co-conçu un moteur d'inférence Nunchaku qui fusionne les noyaux de la branche de bas rang avec ceux de la branche de bas rang pour couper les accès mémoire redondants. Il peut également prendre en charge de manière transparente les adaptateurs de bas rang (LoRA) disponibles dans le commerce sans avoir besoin de re-quantification. Des expériences approfondies sur SDXL, PixArt-∑ et FLUX.1 valident l'efficacité de SVDQuant dans la préservation de la qualité de l'image. Nous réduisons l'utilisation de la mémoire pour les modèles 12B FLUX.1 de 3,5×, obtenant une accélération de 3,0× par rapport à la ligne de base quantifiée de 4 bits uniquement en poids sur le GPU 4090 pour ordinateur portable de 16 Go, ouvrant la voie à des applications plus interactives sur PC.


Vous trouverez ci-dessous la qualité et la similarité évaluées avec 5 000 échantillons de l'ensemble de données MJHQ-30K. IR signifie ImageReward. Nos résultats 4 bits surpassent les autres lignes de base 4 bits, préservant ainsi efficacement la qualité visuelle des modèles 16 bits.
| Modèle | Précision | Méthode | FID ( | IR ( | LPIPS ( | PSNR( |
|---|---|---|---|---|---|---|
| FLUX.1-dev (50 étapes) | BF16 | -- | 20.3 | 0,953 | -- | -- |
| INT W8A8 | La nôtre | 20.4 | 0,948 | 0,089 | 27,0 | |
| W4A16 | NF4 | 20.6 | 0,910 | 0,272 | 19,5 | |
| INT W4A4 | La nôtre | 19.86 | 0,932 | 0,254 | 20.1 | |
| FP W4A4 | La nôtre | 21,0 | 0,933 | 0,247 | 20.2 | |
| FLUX.1-schnell (4 étapes) | BF16 | -- | 19.2 | 0,938 | -- | -- |
| INT W8A8 | La nôtre | 19.2 | 0,966 | 0,120 | 22,9 | |
| W4A16 | NF4 | 18.9 | 0,943 | 0,257 | 18.2 | |
| INT W4A4 | La nôtre | 18.4 | 0,969 | 0,292 | 17.5 | |
| FP W4A4 | La nôtre | 19.9 | 0,956 | 0,279 | 17.5 | |
| PC16 | -- | 16.6 | 0,944 | -- | -- | |
| PixArt-Sigma (20 étapes) | INT W8A8 | ViDiT-Q | 15.7 | 0,944 | 0,137 | 22,5 |
| INT W8A8 | La nôtre | 16.3 | 0,955 | 0,109 | 23,7 | |
| INT W4A8 | ViDiT-Q | 37.3 | 0,573 | 0,611 | 12,0 | |
| INT W4A4 | La nôtre | 20.1 | 0,898 | 0,394 | 16.2 | |
| FP W4A4 | La nôtre | 18.3 | 0,946 | 0,326 | 17.4 |
[Site Web][Papier][Code d'algorithme QoQ][Système GPU QServe]
La quantification peut accélérer l’inférence de grands modèles de langage (LLM). Au-delà de la quantification INT8, la communauté des chercheurs explore activement une précision encore plus faible, telle que INT4. Néanmoins, les techniques de quantification INT4 de pointe ne font qu'accélérer l'inférence LLM de pointe en petits lots, sans parvenir à offrir des gains de performances dans le service LLM en gros lots basé sur le cloud. Nous découvrons un problème critique : les méthodes de quantification INT4 existantes souffrent d'une surcharge d'exécution importante (20 à 90 %) lors de la déquantification des poids ou des sommes partielles sur les GPU. Pour relever ce défi, nous introduisons QoQ , un algorithme de quantification W4A8KV4 avec un poids de 4 bits, une activation de 8 bits et un cache KV de 4 bits. QoQ signifie quattuor-octo-quattuor , qui représente 4-8-4 en latin. QoQ est implémenté par la bibliothèque d'inférence QServe qui permet d'obtenir une accélération mesurée. L'idée clé qui anime QServe est que l'efficacité du service LLM sur les GPU est fortement influencée par les opérations sur les cœurs CUDA à faible débit . En nous appuyant sur cette idée, dans l'algorithme QoQ, nous introduisons une quantification progressive qui peut permettre une faible surcharge de déquantification dans W4A8 GEMM. De plus, nous développons SmoothAttention pour atténuer efficacement la dégradation de la précision induite par la quantification KV 4 bits. Dans le système QServe, nous effectuons une réorganisation des poids en fonction du calcul et profitons du parallélisme au niveau des registres pour réduire la latence de déquantification. Nous rendons également l’attention fusionnée liée à la mémoire, en exploitant le gain de performances apporté par la quantification KV4. En conséquence, QServe améliore le débit de service maximal réalisable de Llama-3-8B de 1,2 fois sur A100, de 1,4 fois sur L40S ; et Qwen1.5-72B de 2,4× sur A100, 3,5× sur L40S, par rapport à TensorRT-LLM.


Vous trouverez ci-dessous la perplexité WikiText2 évaluée avec une longueur de séquence de 2048. Plus c'est bas, mieux c'est.
| Méthodes | Précision | Lama-3.1 70B | Lama-3.1 8B | Lama-3 70B | Lama-3 8B | Lama-2 7B | Lama-2 13B | Lama-2 70B | Lama 7B | Lama 13B | Lama 30B | Mistral7B | Yi 34B |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| PC16 | 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 |
| GPTQ-R | W4A16g128 | 3.46 | 6,64 | 3.42 | 6.56 | 5,63 | 4,99 | 3.43 | 5,83 | 5h20 | 4.22 | 5.39 | 4,68 |
| AWQ | W4A16g128 | 3.22 | 6h60 | 3.20 | 6.54 | 5.60 | 4,97 | 3.41 | 5,78 | 5.19 | 4.21 | 5.37 | 4,67 |
| QuaRot | W4A4 | 5,97 | 8.32 | 6,75 | 8.33 | 6.19 | 5h45 | 3,83 | 6.34 | 5,58 | 4,64 | 5,77 | NaN |
| Atome | W4A4g128 | - | - | 4.33 | 7,78 | 6.12 | 5.31 | 3,73 | 6h25 | 5.52 | 4.61 | 5,76 | 4,97 |
| QoQ | W4A8KV4 | 3,69 | 6.91 | 3,65 | 6,84 | 5,75 | 5.11 | 3.51 | 5,92 | 5.27 | 4.32 | 5h45 | 4,73 |
| QoQ | W4A8KV4g128 | 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 est évalué avec une quantification de cache KV statique par tenseur.
Lors de la diffusion des grands modèles de langage Llama-3-8B et Qwen1.5-72B sur les GPU L40S et A100, QServe démontre des performances supérieures, atteignant un débit 1,2 à 1,4 fois supérieur à celui de la solution leader du secteur, TensorRT-LLM, pour Llama-3-8B et Qwen1.5-72B sur les GPU L40S et A100. 3-8B, et un débit 2,4x à 3,5x plus élevé pour Qwen1.5-72B.
En savoir plus sur les paramètres d’analyse comparative dans le système d’inférence GPU QServe.
| L40S (48G) | Lama-3-8B | Lama-2-7B | Mistral-7B | Lama-2-13B | Lama-30B | Yi-34B | Lama-2-70B | Qwen-1.5-72B |
|---|---|---|---|---|---|---|---|---|
| TRT-LLM-FP16 | 1326 | 444 | 1566 | 92 | MOO | MOO | MOO | MOO |
| TRT-LLM-W4A16 | 1431 | 681 | 1457 | 368 | 148 | 313 | 119 | 17 |
| TRT-LLM-W8A8 | 2634 | 1271 | 2569 | 440 | 123 | 364 | MOO | MOO |
| Atome-W4A4 | -- | 2120 | -- | -- | -- | -- | -- | -- |
| QuaRot-W4A4 | -- | 805 | -- | 413 | 133 | -- | -- | 15 |
| QServe-W4A8KV4 | 3656 | 2394 | 3774 | 1327 | 504 | 869 | 286 | 59 |
| Augmentation du débit* | 1,39x | 1,13x | 1,47x | 3,02x | 3,41x | 2,39x | 2,40x | 3,47x |
| A100 (80G) | Lama-3-8B | Lama-2-7B | Mistral-7B | Lama-2-13B | Lama-30B | Yi-34B | Lama-2-70B | Qwen-1.5-72B |
|---|---|---|---|---|---|---|---|---|
| TRT-LLM-FP16 | 2503 | 1549 | 2371 | 488 | 80 | 145 | MOO | MOO |
| TRT-LLM-W4A16 | 2370 | 1549 | 2403 | 871 | 352 | 569 | 358 | 143 |
| TRT-LLM-W8A8 | 2396 | 2334 | 2427 | 1277 | 361 | 649 | 235 | 53 |
| Atome-W4A4 | -- | 1160 | -- | -- | -- | -- | -- | -- |
| QuaRot-W4A4 | -- | 1370 | -- | 289 | 267 | -- | -- | 68 |
| QServe-W4A8KV4 | 3005 | 2908 | 2970 | 1741 | 749 | 803 | 419 | 340 |
| Augmentation du débit* | 1,20x | 1,25x | 1,22x | 1,36x | 2,07x | 1,23x | 1,17x | 2,38x |
Les débits absolus de génération de jetons de QServe et des systèmes de base (Unité : jetons/seconde. -- signifie non pris en charge). Toutes les expériences ont été menées avec le même budget de mémoire de périphérique. L'augmentation du débit de QServe est calculée en fonction de la meilleure ligne de base dans chaque colonne.
Si vous trouvez deepcompressor utile ou pertinent pour votre recherche, veuillez citer notre article :
@article{lin2024qserve, title={QServe : Quantification W4A8KV4 et co-conception de systèmes pour un service LLM efficace}, author={Lin*, Yujun et Tang*, Haotian et Yang*, Shang et Zhang, Zhekai et Xiao, Guangxuan et Gan , Chuang et Han, Song}, journal={préimpression arXiv arXiv:2405.04532}, année={2024}}@article{
li2024svdquant, title={SVDQuant : Absorption des valeurs aberrantes par les composants de bas rang pour les modèles de diffusion 4 bits}, author={Li*, Muyang et Lin*, Yujun et Zhang*, Zhekai et Cai, Tianle et Li, Xiuyu et Guo, Junxian et Xie, Enze et Meng, Chenlin et Zhu, Jun-Yan et Han, Song}, journal={arXiv préimpression arXiv :2411.05007}, année ={2024}}Les projets suivants sont fortement liés à QServe. Notre groupe a développé une prise en charge complète du matériel, de l'algorithme, du système et des applications pour de grands modèles efficaces, recevant plus de 9 000 étoiles GitHub et plus d'un million de téléchargements par la communauté Huggingface .
Vous êtes également invités à consulter le MIT HAN Lab pour d'autres projets passionnants sur l'IA générative efficace !
[ Système ] QServe : quantification W4A8KV4 pour un service LLM efficace
[ Système ] TinyChat : Chatbot efficace et léger avec AWQ
[ Application ] VILA : Sur la pré-formation des modèles de langage visuel
[ Algorithme ] AWQ : quantification du poids prenant en compte l'activation pour la compression et l'accélération LLM
[ Algorithme ] SmoothQuant : quantification post-formation précise et efficace pour les grands modèles de langage
[ Algorithme ] DistriFusion : inférence parallèle distribuée pour les modèles de diffusion haute résolution
[ Matériel ] SpAtten : architecture d'attention clairsemée efficace avec jeton en cascade et élagage de tête
DeepCompressor s'inspire de nombreuses bibliothèques open source, notamment (mais sans s'y limiter) GPTQ, QuaRot et Atom.