Caixa de ferramentas de compactação de modelo para modelos de linguagem grande e modelos de difusão
[2024/11] ? Nosso mais recente trabalho de quantização do modelo de difusão W4A4 , algoritmo SVDQuant e sistema Nunchaku , foram lançados publicamente! Confira nosso jornal!
[2024/05] ? Nosso mais recente algoritmo QoQ de trabalho de quantização W4A8KV4 LLM e sistema QServe foram lançados publicamente! QoQ é a abreviação de quattuor-octō-quattuor que é 4-8-4 em latim. Confira nosso jornal!
DeepCompressor é uma caixa de ferramentas de compressão de modelos de código aberto para modelos de linguagem grande e modelos de difusão baseados em PyTorch. DeepCompressor atualmente suporta quantização falsa com qualquer tipo de dados inteiro e de ponto flutuante dentro de 8 bits, por exemplo, INT8, INT4 e FP4_E2M1. Aqui estão exemplos que implementam os seguintes algoritmos.
Quantização pós-treinamento para modelos de linguagem grandes:
QoQ (W4A8KV4)
SmoothQuant (W8A8)
AWQ (W4A16)
GPTQ (W4A16)
Quantização somente por peso
Quantização por Ativação de Peso
Ativação de Peso e Quantização KV-Cache
Quantização pós-treinamento para modelos de difusão:
SVDQuant (W4A4)
Quantização por Ativação de Peso
DeepCompressor também contém exemplos que se integram a outras bibliotecas de inferência.
Implante LLMs quantizados apenas por peso com TinyChat
Implante LLMs quantizados com QServe
Implante modelos de difusão quantizados com Nunchaku
Clone este repositório e navegue até a pasta deepcompressor
git clone https://github.com/mit-han-lab/deepcompressor cd deepcompressor
Instalar pacote
conda env create -f environment.yml poetry install
[Site][Artigo][Sistema de Inferência Nunchaku]
Os modelos de difusão provaram ser altamente eficazes na geração de imagens de alta qualidade. No entanto, à medida que estes modelos crescem, requerem significativamente mais memória e sofrem de maior latência, o que representa desafios substanciais para a implementação. Neste trabalho pretendemos acelerar modelos de difusão quantizando seus pesos e ativações para 4 bits. Em um nível tão agressivo, tanto os pesos quanto as ativações são altamente sensíveis, onde os métodos convencionais de quantização pós-treinamento para grandes modelos de linguagem, como suavização, tornam-se insuficientes. Para superar esta limitação, propomos SVDQuant , um novo paradigma de quantização de 4 bits. Diferente da suavização que redistribui valores discrepantes entre pesos e ativações, nossa abordagem absorve esses valores discrepantes usando uma ramificação de classificação baixa. Primeiro consolidamos os valores discrepantes, transferindo-os de ativações para pesos e, em seguida, empregamos uma ramificação de baixa classificação de alta precisão para absorver os valores discrepantes de peso com Decomposição de Valor Singular (SVD). Este processo facilita a quantização em ambos os lados. No entanto, executar ingenuamente a ramificação de classificação inferior de forma independente incorre em sobrecarga significativa devido à movimentação extra de dados das ativações, anulando a aceleração da quantização. Para resolver isso, co-projetamos um mecanismo de inferência Nunchaku que funde os núcleos do ramo de baixo escalão com os do ramo de baixo bit para cortar o acesso redundante à memória. Ele também pode suportar perfeitamente adaptadores de baixa classificação (LoRAs) prontos para uso, sem a necessidade de requantização. Extensos experimentos em SDXL, PixArt-∑ e FLUX.1 validam a eficácia do SVDQuant na preservação da qualidade da imagem. Reduzimos o uso de memória para os modelos FLUX.1 de 12B em 3,5×, alcançando uma aceleração de 3,0× em relação à linha de base quantizada apenas de peso de 4 bits na GPU 4090 do laptop de 16GB, abrindo caminho para aplicativos mais interativos em PCs.
Abaixo está a qualidade e similaridade avaliadas com 5.000 amostras do conjunto de dados MJHQ-30K. IR significa ImageReward. Nossos resultados de 4 bits superam outras linhas de base de 4 bits, preservando efetivamente a qualidade visual dos modelos de 16 bits.
Modelo | Precisão | Método | FID ( | RI ( | LPIPS ( | PSNR( |
---|---|---|---|---|---|---|
FLUX.1-dev (50 etapas) | BF16 | -- | 20.3 | 0,953 | -- | -- |
INT W8A8 | Nosso | 20.4 | 0,948 | 0,089 | 27,0 | |
W4A16 | NF4 | 20.6 | 0,910 | 0,272 | 19,5 | |
INT W4A4 | Nosso | 19,86 | 0,932 | 0,254 | 20.1 | |
FP W4A4 | Nosso | 21,0 | 0,933 | 0,247 | 20.2 | |
FLUX.1-schnell (4 etapas) | BF16 | -- | 19.2 | 0,938 | -- | -- |
INT W8A8 | Nosso | 19.2 | 0,966 | 0,120 | 22,9 | |
W4A16 | NF4 | 18,9 | 0,943 | 0,257 | 18.2 | |
INT W4A4 | Nosso | 18.4 | 0,969 | 0,292 | 17,5 | |
FP W4A4 | Nosso | 19,9 | 0,956 | 0,279 | 17,5 | |
FP16 | -- | 16.6 | 0,944 | -- | -- | |
PixArt-Sigma (20 etapas) | INT W8A8 | ViDiT-Q | 15,7 | 0,944 | 0,137 | 22,5 |
INT W8A8 | Nosso | 16.3 | 0,955 | 0,109 | 23,7 | |
INT W4A8 | ViDiT-Q | 37,3 | 0,573 | 0,611 | 12,0 | |
INT W4A4 | Nosso | 20.1 | 0,898 | 0,394 | 16.2 | |
FP W4A4 | Nosso | 18.3 | 0,946 | 0,326 | 17.4 |
[Site][Artigo][Código do Algoritmo QoQ][Sistema GPU QServe]
A quantização pode acelerar a inferência de modelos de linguagem grande (LLM). Indo além da quantização do INT8, a comunidade de pesquisa está explorando ativamente uma precisão ainda menor, como o INT4. No entanto, as técnicas de quantização INT4 de última geração apenas aceleram a inferência de LLM de borda e de lote baixo, falhando em fornecer ganhos de desempenho em serviços de LLM de lote grande e baseados em nuvem. Descobrimos um problema crítico: os métodos de quantização INT4 existentes sofrem uma sobrecarga significativa de tempo de execução (20-90%) ao desquantizar pesos ou somas parciais em GPUs. Para enfrentar esse desafio, apresentamos QoQ , um algoritmo de quantização W4A8KV4 com peso de 4 bits, ativação de 8 bits e cache KV de 4 bits. QoQ significa quattuor-octo-quattuor , que representa 4-8-4 em latim. QoQ é implementado pela biblioteca de inferência QServe que atinge aceleração medida. O principal insight que impulsiona o QServe é que a eficiência do serviço LLM em GPUs é criticamente influenciada por operações em núcleos CUDA de baixo rendimento . Com base nesse insight, no algoritmo QoQ, introduzimos a quantização progressiva que pode permitir baixa sobrecarga de desquantização no W4A8 GEMM. Além disso, desenvolvemos SmoothAttention para mitigar efetivamente a degradação da precisão incorrida pela quantização KV de 4 bits. No sistema QServe, realizamos reordenação de peso com reconhecimento de computação e aproveitamos o paralelismo em nível de registro para reduzir a latência de desquantização. Também vinculamos a atenção fundida à memória, aproveitando o ganho de desempenho trazido pela quantização KV4. Como resultado, o QServe melhora o rendimento máximo de serviço do Llama-3-8B em 1,2× no A100, 1,4× no L40S; e Qwen1.5-72B em 2,4× no A100, 3,5× no L40S, em comparação com o TensorRT-LLM.
Abaixo está a perplexidade do WikiText2 avaliada com comprimento de sequência de 2.048. Quanto menor é melhor.
Métodos | Precisão | Lhama-3.1 70B | Lhama-3.1 8B | Lhama-3 70B | Lhama-3 8B | Lhama-2 7B | Lhama-2 13B | Lhama-2 70B | Lhama 7B | Lhama 13B | Lhama 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 | |
SuaveQuant | 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 | 5h20 | 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 | NaN |
Átomo | W4A4 g128 | - | - | 4,33 | 7,78 | 6.12 | 5.31 | 3,73 | 6,25 | 5.52 | 4,61 | 5,76 | 4,97 |
Trimestralmente | 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 |
Trimestralmente | 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 é avaliado com quantização de cache KV estático por tensor.
Ao servir os grandes modelos de linguagem Llama-3-8B e Qwen1.5-72B em GPUs L40S e A100, o QServe demonstra desempenho superior, alcançando um rendimento 1,2x-1,4x maior em comparação com a solução líder do setor, TensorRT-LLM, para Llama- 3-8B e um rendimento 2,4x-3,5x maior para Qwen1.5-72B.
Veja mais sobre a configuração de benchmarking no QServe GPU Inference System.
L40S (48G) | Lhama-3-8B | Lhama-2-7B | Mistral-7B | Lhama-2-13B | Lhama-30B | Yi-34B | Lhama-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 |
QServe-W4A8KV4 | 3656 | 2394 | 3774 | 1327 | 504 | 869 | 286 | 59 |
Aumento de rendimento* | 1,39x | 1,13x | 1,47x | 3,02x | 3,41x | 2,39x | 2,40x | 3,47x |
A100 (80G) | Lhama-3-8B | Lhama-2-7B | Mistral-7B | Lhama-2-13B | Lhama-30B | Yi-34B | Lhama-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 |
QServe-W4A8KV4 | 3005 | 2908 | 2970 | 1741 | 749 | 803 | 419 | 340 |
Aumento de rendimento* | 1,20x | 1,25x | 1,22x | 1,36x | 2,07x | 1,23x | 1,17x | 2,38x |
As taxas de transferência absolutas de geração de tokens do QServe e dos sistemas de linha de base (Unidade: tokens/segundo. --
significa não suportado). Todos os experimentos foram conduzidos sob o mesmo orçamento de memória do dispositivo. O aumento de rendimento do QServe é calculado com base na melhor linha de base em cada coluna.
Se você achar deepcompressor
útil ou relevante para sua pesquisa, por favor, cite nosso artigo:
@artigo{lin2024qserve, title={QServe: W4A8KV4 Quantization and System Co-design for Efficient LLM Serving}, autor={Lin*, Yujun e Tang*, Haotian e Yang*, Shang e Zhang, Zhekai e Xiao, Guangxuan e Gan , Chuang e Han, Song}, diário = {pré-impressão arXiv arXiv:2405.04532}, ano={2024}}@artigo{ li2024svdquant, título={SVDQuant: Absorvendo outliers por componentes de baixa classificação para modelos de difusão de 4 bits}, autor={Li*, Muyang e Lin*, Yujun e Zhang*, Zhekai e Cai, Tianle e Li, Xiuyu e Guo, Junxian e Xie, Enze e Meng, Chenlin e Zhu, Jun-Yan e Han, Song}, diário = {pré-impressão arXiv arXiv:2411.05007}, ano={2024}}
Os projetos a seguir estão altamente relacionados ao QServe. Nosso grupo desenvolveu suporte full-stack de hardware de sistema de algoritmo de aplicativo para modelos grandes e eficientes, recebendo mais de 9 mil estrelas no GitHub e mais de 1 milhão de downloads da comunidade Huggingface .
Você também pode conferir o MIT HAN Lab para outros projetos interessantes sobre IA generativa eficiente !
[ Sistema ] QServe: Quantização W4A8KV4 para serviço LLM eficiente
[ Sistema ] TinyChat: Chatbot eficiente e leve com AWQ
[ Aplicativo ] VILA: Sobre pré-treinamento de modelos de linguagem visual
[ Algoritmo ] AWQ: Quantização de peso com reconhecimento de ativação para compressão e aceleração LLM
[ Algoritmo ] SmoothQuant: Quantização pós-treinamento precisa e eficiente para modelos de linguagem grandes
[ Algoritmo ] DistriFusion: Inferência Paralela Distribuída para Modelos de Difusão de Alta Resolução
[ Hardware ] SpAtten: arquitetura eficiente de atenção esparsa com token em cascata e remoção de cabeça
DeepCompressor é inspirado em muitas bibliotecas de código aberto, incluindo (mas não limitado a) GPTQ, QuaRot e Atom.