Capítulo 2: Quantização (INT8, INT4)
Por que quantizar?
Reduza o uso de memória e aumente a velocidade utilizando menor precisão:
| Precisão | Bits | Memória | Qualidade |
|---|---|---|---|
| FP32 | 32 | 100% | 100% |
| FP16 | 16 | 50% | ~100% |
| INT8 | 8 | 25% | ~99% |
| INT4 | 4 | 12,5% | ~95-98% |
GPTQ
Quantização pós-treinamento otimizada para modelos do tipo GPT:
from transformers import AutoModelForCausalLM
from auto_gptq import AutoGPTQForCausalLM
model = AutoGPTQForCausalLM.from_quantized(
"TheBloke/Llama-2-7B-GPTQ",
device="cuda:0"
)
AWQ (Activation-aware Weight Quantization)
Preserva pesos importantes:
from awq import AutoAWQForCausalLM
model = AutoAWQForCausalLM.from_quantized(
"TheBloke/Llama-2-7B-AWQ",
fuse_layers=True
)
bitsandbytes
Quantização em tempo real:
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b",
quantization_config=bnb_config
)