GEO

Quantizacao

Quantizacao e o processo de converter os pesos de um LLM de numeros de ponto flutuante de alta precisao (tipicamente bfloat ou float de 16 bits) para inteiros ou floats de precisao menor (8 bits, 4 bits, as vezes 2 bits), reduzindo a pegada de memoria e acelerando a inferencia com apenas um pequeno impacto na qualidade. A implantacao moderna de codigo aberto - llama.cpp, Ollama, vLLM, GPTQ, AWQ - roda quase inteiramente sobre modelos quantizados.

Quantizacao e o processo de converter os pesos de um LLM de numeros de ponto flutuante de alta precisao (tipicamente bfloat ou float de 16 bits) para inteiros ou floats de precisao menor (8 bits, 4 bits, as vezes 2 bits), reduzindo a pegada de memoria e acelerando a inferencia com apenas um pequeno impacto na qualidade. A implantacao moderna de codigo aberto - llama.cpp, Ollama, vLLM, GPTQ, AWQ - roda quase inteiramente sobre modelos quantizados.

Por que importa

Um modelo de 70B de parametros no formato nativo de 16 bits precisa de ~140 GB de memoria de GPU - fora do alcance de uma unica placa de consumidor. O mesmo modelo em quantizacao de 4 bits ocupa ~35 GB e cabe em duas GPUs de consumidor, ou em uma unica placa de workstation, ou ate em um Mac Studio. A quantizacao foi o que tornou os LLMs locais praticos: Llama 3 70B, Mixtral 8x22B e DeepSeek-V3 todos rodam em hardware de US$ 3.000 por causa da quantizacao. Para quem constroi produtos, e a diferenca entre "nao podemos pagar para hospedar por conta propria" e "podemos servir nossos proprios modelos".

Como funciona

Niveis de precisao:

  • FP32 (float de 32 bits): Padrao de treinamento. 4 bytes por peso. Raramente usado para inferencia.
  • FP16 / BF16 (16 bits): Padrao de inferencia. 2 bytes por peso.
  • INT8 (inteiro de 8 bits): Metade da memoria, qualidade quase identica.
  • INT4 / FP4 (4 bits): Um quarto da memoria, pequeno impacto na qualidade (geralmente 1 a 3% nos benchmarks).
  • INT2 (2 bits): Um oitavo da memoria, perda de qualidade perceptivel na maioria das tarefas.

Processo de quantizacao:

  1. Calibracao: O modelo e executado sobre um pequeno conjunto de dados para observar as faixas de ativacao.
  2. Calculo de escala e ponto zero: Para cada tensor de pesos, calcule fatores de escala que mapeiam a faixa original para a faixa de inteiros.
  3. Conversao dos pesos: Cada peso e quantizado, armazenado como inteiro mais fatores de escala por grupo ou por canal.
  4. Desquantizacao na inferencia: No momento da computacao, os pesos sao expandidos de volta para ponto flutuante logo antes da multiplicacao de matrizes.

Metodos de quantizacao

RTN (Round to Nearest): O metodo mais simples. Apenas arredonda os pesos para o valor quantizado mais proximo. Rapido, baixa qualidade.

GPTQ: Quantizacao pos-treinamento por grupos que minimiza o erro de reconstrucao. Padrao de codigo aberto para 4 bits.

AWQ (Activation-aware Weight Quantization): Preserva os pesos que lidam com ativacoes grandes; quantiza o restante de forma mais agressiva. Muito popular para LLMs de 4 bits.

GGUF (Q4_K_M, Q5_K_M, etc.): A familia de formatos de quantizacao por blocos do llama.cpp. As variantes K_M equilibram tamanho e precisao. Q4_K_M e o formato padrao de inferencia local.

SmoothQuant: Move os outliers de ativacao para os pesos, de modo que ambos possam ser quantizados de forma limpa. Permite INT8 sem muita perda de precisao em modelos grandes.

QAT (Quantization-Aware Training): Treina o modelo com a quantizacao no ciclo. Melhor qualidade, mas exige re-treinamento.

FP8: Um formato de float de 8 bits nativo de hardware, suportado pelas GPUs H100/H200. Mais rapido que INT8 para treinamento e inferencia.

Trade-offs

Qualidade x compressao: Quanto menor a precisao, mais o modelo se degrada. 8 bits e quase de graca; 4 bits e um bom padrao; 2 bits prejudica de forma visivel.

Sensibilidade da tarefa: Matematica, codigo e raciocinio longo sao mais afetados pela quantizacao do que chat ou sumarizacao.

Velocidade x memoria: A quantizacao economiza memoria, mas nem sempre acelera a inferencia em GPUs com bastante capacidade de computacao. Em hardware limitado por memoria (GPUs de consumidor, Apple Silicon), o ganho de velocidade e enorme.

Qualidade dos dados de calibracao: Uma calibracao ruim pode arruinar silenciosamente os modelos quantizados. Use prompts representativos.

Qual usar e quando

Rodando em GPU de consumidor (8 a 24 GB): GGUF de 4 bits (Q4_K_M) ou AWQ.

Rodando em H100/H200: FP8 ou INT8 com SmoothQuant.

Edge / mobile: GGUF agressivo de 4 bits ou 2 bits; aceite a perda de qualidade.

Pesquisa de benchmark: Mantenha FP16/BF16 como referencia; quantize apenas para comparacao de implantacao.

Producao de alto risco: 8 bits ou 16 bits. O custo marginal vale a garantia de qualidade.

Erros comuns

Comparar benchmarks entre precisoes diferentes sem mencionar isso: A pontuacao MMLU de um modelo quantizado nao e diretamente comparavel a pontuacao FP16 do mesmo modelo.

Ignorar a deriva de perplexidade: Mesmo que os benchmarks parecam bons, a quantizacao pode degradar habilidades especificas (matematica, especialmente). Teste na sua carga de trabalho real.

Agressivo demais, rapido demais: Pular de FP16 direto para INT2 sem testar os passos intermediarios esconde onde a qualidade quebrou.

Usar dados de calibracao defasados: Um modelo calibrado apenas em ingles vai perder qualidade em prompts em coreano.

Nao medir a latencia ponta a ponta: A quantizacao afeta tanto a carga de memoria quanto a computacao. As vezes a vazao nao melhora porque o gargalo estava em outro lugar.

Fontes: