
Caja de herramientas de compresión de modelos para modelos de lenguaje grande y modelos de difusión
[2024/11] ? ¡Nuestro último trabajo de cuantificación del modelo de difusión W4A4 , el algoritmo SVDQuant y el sistema Nunchaku , se lanza públicamente! ¡Consulta nuestro periódico!
[2024/05] ? ¡Nuestro último algoritmo QoQ de trabajo de cuantificación W4A8KV4 LLM y sistema QServe se lanzan públicamente! QoQ es la abreviatura de quattuor-octō-quattuor, que es 4-8-4 en latín. ¡Consulta nuestro periódico!
DeepCompressor es una caja de herramientas de compresión de modelos de código abierto para modelos de lenguaje grandes y modelos de difusión basados en PyTorch. DeepCompressor actualmente admite cuantificación falsa con cualquier tipo de datos entero y de punto flotante dentro de 8 bits, por ejemplo, INT8, INT4 y FP4_E2M1. A continuación se muestran ejemplos que implementan los siguientes algoritmos.
Cuantización posterior al entrenamiento para modelos de lenguaje grandes:
Trimestral (W4A8KV4)
SmoothQuant (W8A8)
AWQ (W4A16)
GPTQ (W4A16)
Cuantización sólo de peso
Cuantización por activación de peso
Activación de peso y cuantificación de caché KV
Cuantización post-entrenamiento para modelos de difusión:
SVDCuant (W4A4)
Cuantización por activación de peso
DeepCompressor también contiene ejemplos que se integran con otras bibliotecas de inferencia.
Implemente LLM cuantificados solo por peso con TinyChat
Implemente LLM cuantificados con QServe
Implemente modelos de difusión cuantificados con Nunchaku
Clona este repositorio y navega a la carpeta deepcompressor
git clone https://github.com/mit-han-lab/deepcompressor cd deepcompressor
Instalar paquete
conda env create -f environment.yml poetry install
[Sitio web][Artículo][Sistema de inferencia Nunchaku]
Se ha demostrado que los modelos de difusión son muy eficaces para generar imágenes de alta calidad. Sin embargo, a medida que estos modelos crecen, requieren mucha más memoria y sufren de una mayor latencia, lo que plantea desafíos sustanciales para la implementación. En este trabajo, nuestro objetivo es acelerar los modelos de difusión cuantificando sus pesos y activaciones a 4 bits. En un nivel tan agresivo, tanto los pesos como las activaciones son muy sensibles, donde los métodos convencionales de cuantificación post-entrenamiento para modelos de lenguaje grandes, como el suavizado, se vuelven insuficientes. Para superar esta limitación, proponemos SVDQuant , un nuevo paradigma de cuantificación de 4 bits. A diferencia del suavizado que redistribuye los valores atípicos entre pesos y activaciones, nuestro enfoque absorbe estos valores atípicos utilizando una rama de rango bajo. Primero consolidamos los valores atípicos cambiándolos de activaciones a pesos, luego empleamos una rama de rango bajo y alta precisión para tomar los valores atípicos de peso con Descomposición de Valor Singular (SVD). Este proceso facilita la cuantificación en ambos lados. Sin embargo, ejecutar ingenuamente la rama de bajo rango de forma independiente genera una sobrecarga significativa debido al movimiento adicional de datos de las activaciones, lo que anula la aceleración de la cuantificación. Para abordar esto, codiseñamos un motor de inferencia Nunchaku que fusiona los núcleos de la rama de bajo rango con los de la rama de bits bajos para cortar el acceso a la memoria redundante. También puede admitir sin problemas adaptadores de rango bajo (LoRA) disponibles en el mercado sin necesidad de volver a cuantificarlos. Amplios experimentos con SDXL, PixArt-∑ y FLUX.1 validan la eficacia de SVDQuant para preservar la calidad de la imagen. Reducimos el uso de memoria para los modelos 12B FLUX.1 en 3,5 veces, logrando una velocidad de 3,0 veces sobre la base cuantificada de peso de solo 4 bits en la GPU 4090 de la computadora portátil de 16 GB, allanando el camino para aplicaciones más interactivas en las PC.


A continuación se muestra la calidad y similitud evaluadas con 5000 muestras del conjunto de datos MJHQ-30K. IR significa ImageReward. Nuestros resultados de 4 bits superan a otras líneas base de 4 bits, preservando efectivamente la calidad visual de los modelos de 16 bits.
| Modelo | Precisión | Método | FID ( | IR ( | LPIPS ( | PSNR( |
|---|---|---|---|---|---|---|
| FLUX.1-dev (50 pasos) | bf16 | -- | 20.3 | 0.953 | -- | -- |
| INT W8A8 | Nuestro | 20.4 | 0,948 | 0,089 | 27.0 | |
| W4A16 | NF4 | 20.6 | 0.910 | 0,272 | 19.5 | |
| INT W4A4 | Nuestro | 19,86 | 0.932 | 0.254 | 20.1 | |
| FP W4A4 | Nuestro | 21.0 | 0.933 | 0.247 | 20.2 | |
| FLUX.1-schnell (4 pasos) | bf16 | -- | 19.2 | 0.938 | -- | -- |
| INT W8A8 | Nuestro | 19.2 | 0.966 | 0.120 | 22.9 | |
| W4A16 | NF4 | 18.9 | 0.943 | 0.257 | 18.2 | |
| INT W4A4 | Nuestro | 18.4 | 0.969 | 0,292 | 17,5 | |
| FP W4A4 | Nuestro | 19.9 | 0.956 | 0,279 | 17,5 | |
| FP16 | -- | 16.6 | 0.944 | -- | -- | |
| PixArt-Sigma (20 pasos) | INT W8A8 | ViDiT-Q | 15.7 | 0.944 | 0,137 | 22,5 |
| INT W8A8 | Nuestro | 16.3 | 0.955 | 0.109 | 23.7 | |
| INT W4A8 | ViDiT-Q | 37.3 | 0.573 | 0.611 | 12.0 | |
| INT W4A4 | Nuestro | 20.1 | 0,898 | 0,394 | 16.2 | |
| FP W4A4 | Nuestro | 18.3 | 0.946 | 0.326 | 17.4 |
[Sitio web][Documento][Código de algoritmo QoQ][Sistema GPU QServe]
La cuantificación puede acelerar la inferencia del modelo de lenguaje grande (LLM). Más allá de la cuantificación INT8, la comunidad de investigación está explorando activamente una precisión aún menor, como INT4. No obstante, las técnicas de cuantificación INT4 de última generación solo aceleran la inferencia de LLM de borde de lotes bajos, y no logran ofrecer ganancias de rendimiento en el servicio de LLM de lotes grandes basados en la nube. Descubrimos un problema crítico: los métodos de cuantificación INT4 existentes sufren una sobrecarga de tiempo de ejecución significativa (20-90%) al descuantificar pesos o sumas parciales en las GPU. Para abordar este desafío, presentamos QoQ , un algoritmo de cuantificación W4A8KV4 con peso de 4 bits, activación de 8 bits y caché KV de 4 bits. QoQ significa quattuor-octo-quattuor , que representa 4-8-4 en latín. QoQ se implementa mediante la biblioteca de inferencia QServe que logra una aceleración medida. La idea clave que impulsa QServe es que la eficiencia del servicio LLM en GPU está críticamente influenciada por las operaciones en núcleos CUDA de bajo rendimiento . Sobre la base de esta información, en el algoritmo QoQ, introducimos una cuantificación progresiva que puede permitir una baja sobrecarga de descuantización en W4A8 GEMM. Además, desarrollamos SmoothAttention para mitigar eficazmente la degradación de la precisión provocada por la cuantificación KV de 4 bits. En el sistema QServe, realizamos un reordenamiento de pesos consciente de la computación y aprovechamos el paralelismo a nivel de registro para reducir la latencia de descuantización. También hacemos que la atención fusionada esté ligada a la memoria, aprovechando la ganancia de rendimiento que aporta la cuantificación KV4. Como resultado, QServe mejora el rendimiento de servicio máximo alcanzable de Llama-3-8B en 1,2 veces en A100, 1,4 veces en L40S; y Qwen1.5-72B por 2.4× en A100, 3.5× en L40S, en comparación con TensorRT-LLM.


A continuación se muestra la perplejidad de WikiText2 evaluada con una longitud de secuencia de 2048. Cuanto más bajo, mejor.
| Métodos | Precisión | Llama-3.1 70B | Llama-3.1 8B | Llama-3 70B | Llama-3 8B | Llama-2 7B | Llama-2 13B | Llama-2 70B | Llama 7B | Llama 13B | Llama 30B | Mistral 7B | yi 34b |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| FP16 | 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 | 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 |
| QuaRot | W4A4 | 5,97 | 8.32 | 6.75 | 8.33 | 6.19 | 5.45 | 3.83 | 6.34 | 5.58 | 4.64 | 5.77 | Yaya |
| Átomo | W4A4 g128 | - | - | 4.33 | 7,78 | 6.12 | 5.31 | 3.73 | 6.25 | 5.52 | 4.61 | 5.76 | 4.97 |
| Intertrimestral | 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 |
| Intertrimestral | 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 se evalúa con cuantificación de caché KV estática por tensor.
Al servir los modelos de lenguaje grande Llama-3-8B y Qwen1.5-72B en GPU L40S y A100, QServe demuestra un rendimiento superior, logrando un rendimiento entre 1,2 y 1,4 veces mayor en comparación con la solución líder de la industria, TensorRT-LLM, para Llama- 3-8B y un rendimiento entre 2,4 y 3,5 veces mayor para Qwen1.5-72B.
Vea más sobre la configuración de evaluación comparativa en QServe GPU Inference System.
| L40S (48G) | Llama-3-8B | Llama-2-7B | Mistral-7B | Llama-2-13B | Llama-30B | Yi-34B | Llama-2-70B | Qwen-1.5-72B |
|---|---|---|---|---|---|---|---|---|
| TRT-LLM-FP16 | 1326 | 444 | 1566 | 92 | OOM | OOM | OOM | OOM |
| TRT-LLM-W4A16 | 1431 | 681 | 1457 | 368 | 148 | 313 | 119 | 17 |
| TRT-LLM-W8A8 | 2634 | 1271 | 2569 | 440 | 123 | 364 | OOM | OOM |
| Átomo-W4A4 | -- | 2120 | -- | -- | -- | -- | -- | -- |
| QuaRot-W4A4 | -- | 805 | -- | 413 | 133 | -- | -- | 15 |
| QServer-W4A8KV4 | 3656 | 2394 | 3774 | 1327 | 504 | 869 | 286 | 59 |
| Aumento del rendimiento* | 1,39x | 1,13x | 1,47x | 3.02x | 3,41x | 2,39x | 2,40x | 3,47x |
| A100 (80G) | Llama-3-8B | Llama-2-7B | Mistral-7B | Llama-2-13B | Llama-30B | Yi-34B | Llama-2-70B | Qwen-1.5-72B |
|---|---|---|---|---|---|---|---|---|
| TRT-LLM-FP16 | 2503 | 1549 | 2371 | 488 | 80 | 145 | OOM | OOM |
| TRT-LLM-W4A16 | 2370 | 1549 | 2403 | 871 | 352 | 569 | 358 | 143 |
| TRT-LLM-W8A8 | 2396 | 2334 | 2427 | 1277 | 361 | 649 | 235 | 53 |
| Átomo-W4A4 | -- | 1160 | -- | -- | -- | -- | -- | -- |
| QuaRot-W4A4 | -- | 1370 | -- | 289 | 267 | -- | -- | 68 |
| QServer-W4A8KV4 | 3005 | 2908 | 2970 | 1741 | 749 | 803 | 419 | 340 |
| Aumento del rendimiento* | 1,20x | 1,25x | 1,22x | 1,36x | 2,07x | 1,23x | 1,17x | 2,38x |
Los rendimientos absolutos de generación de tokens de QServe y los sistemas de referencia (Unidad: tokens/segundo. -- significa no compatible). Todos los experimentos se realizaron con el mismo presupuesto de memoria del dispositivo. El aumento del rendimiento de QServe se calcula con respecto a la mejor línea de base en cada columna.
Si encuentra deepcompressor es útil o relevante para su investigación, cite nuestro artículo:
@article{lin2024qserve, title={QServe: W4A8KV4 Cuantización y codiseño de sistemas para un servicio eficiente de LLM}, autor={Lin*, Yujun y Tang*, Haotian y Yang*, Shang y Zhang, Zhekai y Xiao, Guangxuan y Gan , Chuang y Han, Song}, diario={arXiv preprint arXiv:2405.04532}, año={2024}}@artículo{
li2024svdquant, title={SVDQuant: absorción de valores atípicos mediante componentes de bajo rango para modelos de difusión de 4 bits}, autor={Li*, Muyang y Lin*, Yujun y Zhang*, Zhekai y Cai, Tianle y Li, Xiuyu y Guo, Junxian y Xie, Enze y Meng, Chenlin y Zhu, Jun-Yan y Han, Song}, diario={arXiv preprint arXiv:2411.05007}, año={2024}}Los siguientes proyectos están altamente relacionados con QServe. Nuestro grupo ha desarrollado soporte de hardware de sistema, algoritmo de aplicación de pila completa para modelos grandes eficientes, recibiendo más de 9.000 estrellas de GitHub y más de 1 millón de descargas de la comunidad Huggingface .
¡También puede visitar MIT HAN Lab para conocer otros proyectos interesantes sobre IA generativa eficiente !
[ Sistema ] QServe: Cuantización W4A8KV4 para un servicio LLM eficiente
[ Sistema ] TinyChat: Chatbot eficiente y liviano con AWQ
[ Aplicación ] VILA: Sobre el entrenamiento previo de modelos de lenguaje visual
[ Algoritmo ] AWQ: Cuantización de peso consciente de la activación para compresión y aceleración LLM
[ Algoritmo ] SmoothQuant: Cuantización posterior al entrenamiento precisa y eficiente para modelos de lenguaje grandes
[ Algoritmo ] DistriFusion: inferencia paralela distribuida para modelos de difusión de alta resolución
[ Hardware ] SpAtten: Arquitectura eficiente de atención dispersa con token en cascada y poda de cabeza
DeepCompressor está inspirado en muchas bibliotecas de código abierto, incluidas (entre otras) GPTQ, QuaRot y Atom.