Quantizacao

Quantização de Modelos

Conceitos Básicos

*uantização:*Reduzir a precisão dos pesos (eou ativações) de FP32BF16 para inteiros menores (INT8, INT4, INT3...).

Precisão Bits Memória (7B model) Uso
FP32 32 ~28 GB Optimizer states
BF16 16 ~14 GB Treino padrão
FP16 16 ~14 GB Treino (com loss scaling)
FP8 8 ~7 GB H100+; treino/inferência
INT8 8 ~7 GB Inferência; leve perda
INT4 4 ~3.5 GB Inferência eficiente
INT3 3 ~2.6 GB Experimental
1.58-bit ~1.6 ~1.4 GB BitNet b1.58

*TQ*(PostTraining Quantization): Quantiza modelo treinado — sem retreino. *AT*(Quantization-Aware Training): Treina simulando quantização — melhor qualidade, maior custo.


Métodos PTQ

GPTQ

  • *rXiv:*2210.17323 | ICLR 2023
  • *utores:*Frantar et al. (IST Austria)
  • *ecanismo:*Otimiza erros de quantização camada por camada usando segunda ordem (Hessian)
  • *esultado:*INT4 com perda < 1% vs FP16 em perplexidade
  • *elocidade:*~0.25 GPU-hora para quantizar Llama 65B
  • *mplementação:*auto-gptq, optimum

AWQ — Activation-Aware Weight Quantization

  • *rXiv:*2306.00978 | MLSys 2024
  • *utores:*Lin et al. (MIT HAN Lab)
  • *ecanismo:*Identifica canais de peso "salientes" via ativações → escala-os para proteger precisão
  • *esultado:*Melhor que GPTQ em maioria dos benchmarks; mais rápido de aplicar
  • *mplementação:*autoawq
  • *doção:*Amplamente usada em modelos distribuídos no HuggingFace

GGUF / GGML (llama.cpp)

  • *rigem:*Georgi Gerganov (llama.cpp)
  • *ormato:*Arquivo único com todos os pesos + metadados
  • *uantizações:*Q2K, Q3KM, Q4KM, Q5KM, Q6K, Q8_0
  • *antagem:*CPU-friendly; funciona em M1/M2 Mac, CPU x86, sem GPU
  • *so:*Ollama, Jan, LM Studio, GPT4All

BitsAndBytes (bitsandbytes)

  • *utores:*Tim Dettmers et al.
  • *rXiv:*2208.07339 (LLM.int8)
  • *ecanismo:*INT8 com separação de outliers para FP16; suporte a NF4 (double quant)
  • *ntegração:*HuggingFace load_in_8bit, load_in_4bit; QLoRA usa NF4
  • *imitação:*CUDA-only; performance variável vs GPTQ/AWQ

Quantização Extrema (Sub-4 bits)

BitNet b1.58 (Microsoft)

  • *rXiv:*2402.17764
  • *ecanismo:*Todos os pesos em {-1, 0, +1} (1.58 bits); ativações em INT8
  • *esultado:*Perda nula em modelos ≥3B parâmetros; 71% menos memória que BF16
  • *rade-off:*Requer treinamento do zero em 1.58b; PTQ não funciona bem
  • *mplicação:*Inferência apenas com operações de soma — sem multiplicações

SpQR — Sparse Quantization Representation

  • *rXiv:*2306.03078
  • *ecanismo:*Outliers em FP16; resto em 3-4 bits; esparsidade estruturada
  • *esultado:*Perda < 1% em INT3; melhor que GPTQ em baixa precisão

QuIP# (Cornell)

  • *rXiv:*2402.04396
  • *ecanismo:*Lattice codebooks para quantização de 2 bits; incoherence processing
  • *esultado:*Melhor qualidade em 2 bits

AQLM — Additive Quantization for Language Models

  • *rXiv:*2401.06118
  • *ecanismo:*Quantização aditiva — representa resíduo iterativamente
  • *esultado:*Estado da arte em 2 bits (abril 2025)

Quantização de KV Cache

TurboQuant (Google)

  • *rXiv:*2504.19874 | ICLR 2026
  • *ecanismo:*KV cache em 3.5 bits efetivos; quantização por bloco com calibração por ativações
  • *esultado:*~6× menos memória; 8× speedup em H100; zero perda de qualidade
  • *istinção:*Quantiza *ache*(ativações em runtime), não pesos

FP8 KV Cache

  • *doção:*vLLM, TensorRT-LLM, SGLang — suporte nativo FP8 para KV cache
  • *esultado:*~2× redução de memória do cache vs FP16

INT4 KV Cache

  • *xperimental:*Pode causar degradação em contextos longos; pesquisa ativa

NVFP4 (NVIDIA)

  • *ardware:*Blackwell (B100B200B300)
  • *ecanismo:*FP4 com scale factors por bloco; tensor cores nativos FP4
  • *esultado:*2× throughput vs FP8; 4× vs FP16
  • *isponibilidade:*TensorRT-LLM com B100+

Quantização de Ativações

SmoothQuant

  • *rXiv:*2211.10438
  • *ecanismo:*Move "dificuldade" de quantização de ativações para pesos (migração de escala)
  • *esultado:*W8A8 (pesos e ativações INT8) com quase zero perda
  • *doção:*TensorRT-LLM, vLLM

QuaRot

  • *rXiv:*2404.00456
  • *ecanismo:*Rotação de pesos antes da quantização para reduzir outliers
  • *esultado:*Melhor que SmoothQuant em INT4

Implementações e Ferramentas

Ferramenta Métodos Uso
auto-gptq GPTQ GPU; produção
autoawq AWQ GPU; produção
bitsandbytes INT8, NF4 HuggingFace integrado
llama.cpp GGUF (Q2–Q8) CPU/GPU local
optimum (HF) GPTQ, BnB, ONNX Integração HF
llmcompressor GPTQ, AWQ, AQLM vLLM pipeline
TensorRT-LLM FP8, INT8, INT4, FP4 NVIDIA produção
OpenVINO INT8, INT4 Intel; edge

Trade-offs Práticos

Cenário Recomendação
1 GPU consumer (24 GB) — modelo 70B AWQ ou GPTQ INT4 + offload
Mac M1M2M3 — CPU GGUF Q4KM ou Q5KM
Servidor A100 80GB — throughput FP8 + FP8 KV cache (vLLM)
Edge / mobile INT4 com ONNX Runtime
Qualidade máxima com quantização AWQ INT4 > GPTQ INT4
Pesquisa em bits extremos AQLM ou QuIP# (2 bits)

Impacto no Kode

  • *eploy local no laptop do dev:*GGUF Q4KM do Qwen2.5Coder7B via Ollama
  • *ervidor s.r1:*AWQ INT4 do Qwen2.5Coder32B (cabe em 2× RTX 4090)
  • *ine-tuning com QLoRA:*NF4 (bitsandbytes) + LoRA adapters — treina 32B em 1 GPU
  • *rodução:*FP8 quando H100 estiver disponível; TurboQuant para KV cache

Source: ../home/koder/dev/koder/meta/docs/ia/compendium/05-inferencia/quantizacao.md