GGUF vs AWQ vs GPTQ vs FP8 vs NF4: opções de quantização de LLM

Tradução automática

Este artigo foi traduzido automaticamente a partir da versão original em inglês.

Escolha a quantização de LLM com base no runtime, no hardware e na tarefa que precisa de executar. GGUF empacota os tensores do modelo e os metadados. AWQ e GPTQ reduzem a precisão dos pesos após o treino. FP8 utiliza valores de vírgula flutuante de oito bits. NF4 armazena os pesos em quatro bits e é habitualmente utilizado durante o treino de adaptadores QLoRA. Estes nomes descrevem diferentes partes do processo de carregamento e execução do modelo.

Escolha primeiro o runtime e o hardware. Em seguida, escolha uma representação suportada pelo runtime fixado para a arquitetura exata. Avalie com benchmarks a qualidade nas tarefas, a memória, o tempo até ao primeiro token, o débito e a concorrência antes de aceitar ficheiros de modelo mais pequenos.

Verifique a compatibilidade antes de comparar o tamanho dos ficheiros ou o número de bits.

Tabela de decisão

ObjetivoPonto de partidaVerificar antes de utilizar
Inferência local em CPU, Metal ou llama.cpp portátilGGUF com uma quantização documentadaSuporte da arquitetura, modelo de conversa, comportamento do contexto, definições de quantização e revisão da origem.
Inferência em GPU com quantização calibrada dos pesosAWQ ou GPTQO motor de serving, a GPU, a largura de bits, o tamanho do grupo, os kernels e a arquitetura do modelo.
Serving em GPU de centro de dados compatívelFP8Capacidade do hardware, implementação no runtime, modo de calibração e qualidade de ponta a ponta.
Treino eficiente em parâmetros com pesos congelados de 4 bitsNF4 através de bitsandbytesPrecisão aritmética, memória necessária para o treino e se a implementação usa um adaptador ou pesos fundidos.
Protótipo simples com Transformersbitsandbytes de 8 ou 4 bitsSuporte do backend e se o caminho do protótipo corresponde ao servidor de produção.

GGUF não especifica uma única quantização

Uma extensão .gguf indica como os tensores e os metadados são empacotados, não a precisão de todos os tensores. Nomes como Q4_K_M identificam receitas de quantização do llama.cpp, e essas receitas podem tratar grupos de tensores de forma diferente. Registe o checkpoint original, a versão do conversor, o comando de quantização e os hashes dos ficheiros. A calibração utiliza dados de entrada representativos para escolher os parâmetros de quantização. Se a conversão tiver utilizado esses dados de entrada, registe também o dataset.

AWQ e GPTQ precisam de um caminho de serving compatível

Os ficheiros de modelo AWQ e GPTQ utilizam normalmente Safetensors, juntamente com definições que descrevem o método de quantização. Um modelo pode ser descarregado com sucesso e, ainda assim, recorrer a um kernel lento ou falhar devido a uma arquitetura não suportada. Consulte a matriz de suporte atual do Transformers, do vLLM ou da versão efetiva do servidor antes de selecionar os ficheiros do modelo.

FP8 e NF4 resolvem problemas diferentes

FP8 é uma opção apelativa quando o acelerador e o conjunto de componentes de serving o implementam de forma eficiente. NF4 é utilizado sobretudo para armazenar pesos de modelo congelados durante o treino de adaptadores pequenos através de fluxos de trabalho do tipo QLoRA. Em bitsandbytes, o dtype de computação define a precisão utilizada na aritmética; pode ser diferente dos pesos armazenados em quatro bits. A quantização aninhada opcional também comprime as constantes utilizadas para representar esses pesos. Nenhuma destas designações garante a mesma qualidade, velocidade ou utilização de memória em diferentes modelos e hardware.

Lista de verificação para avaliação

O armazenamento em quatro bits não significa que todo o processo utilize quatro bits por parâmetro. Os metadados de quantização, os tensores de maior precisão, os buffers temporários e a cache de atenção exigem mais memória. Teste o comprimento dos prompts e os pedidos concorrentes que planeia servir.

  • compare o mesmo checkpoint de origem e o mesmo conjunto de prompts
  • inclua pedidos com contexto longo e pedidos concorrentes
  • meça a conformidade com os esquemas e a correção dos tool calls juntamente com a perplexidade
  • registe o pico de memória do dispositivo e do host
  • verifique o tempo até ao primeiro token e o débito de geração
  • analise subconjuntos de avaliação da qualidade raros ou de elevado custo
  • mantenha a licença, a revisão da origem, o conversor, a receita e o hash juntamente com os ficheiros do modelo

Leitura adicional

Referências