Avançado

Quantização I: int8, int4 e fundamentos

Quantização representa pesos ou ativações com menos bits e escalas, reduzindo tráfego ao introduzir erros de arredondamento e clipping.

Atualizada em

1

Conceito

Parâmetros de modelos são números reais, normalmente treinados em formatos de ponto flutuante. Quantização mapeia esses valores — ou ativações em runtime — para uma representação discreta menor. O objetivo pode ser arquivo compacto, menor memory bandwidth, batches maiores ou aritmética rápida. O custo é erro de aproximação, metadata e complexidade de kernel.

Na quantização uniforme simétrica, um valor xx é aproximado pelo código inteiro qq e pela scale ss:

q=clip(round(x/s),qmin,qmax),x^=sq.q=\operatorname{clip}\left(\operatorname{round}(x/s),q_{min},q_{max}\right), \qquad \hat{x}=s q.

Quantização affine acrescenta zero point e permite faixa assimétrica. Arredondamento mapeia valores distintos ao mesmo código; clipping leva extremos ao limite. A diferença diante do original é o erro.

“Int8” ou “int4” é informação incompleta. Pergunte o que foi quantizado: pesos, ativações ou KV cache? Em qual granularidade: tensor, canal, grupo de entrada ou token? Scales são float e com que frequência aparecem? A representação é simétrica? Qual dtype acumula produtos? Pesos de quatro bits ainda podem usar ativações e acumuladores de precisão maior.

Granularidade controla uma troca. Uma scale para o tensor inteiro tem pouca metadata, mas cobre a maior magnitude. Um outlier aumenta o passo e representa mal valores pequenos comuns. Scales por canal se adaptam a linhas ou colunas. Quantização groupwise divide uma dimensão. Grupos menores acompanham distribuições locais, mas guardam mais scales e complicam kernels.

Pesos e ativações se comportam de forma distinta. Pesos ficam fixos e aceitam calibração offline. Ativações dependem do prompt e têm outliers por canal. SmoothQuant, publicado em 2022, move parte da dificuldade das ativações para os pesos por uma transformação de escala equivalente, facilitando quantização de ambos em arquiteturas suportadas.

Weight-only quantization reduz bytes de pesos, algo valioso no decode limitado por memória. O kernel desempacota e dequantiza tiles numa dtype de compute. Se o runtime expande o modelo inteiro para float primeiro, o arquivo encolhe, mas memória e bandwidth de execução não. Kernels nativos diferenciam arquivo compacto de inferência eficiente.

Perda de accuracy é desigual. Camadas e canais variam em sensibilidade. Embeddings e output heads podem ficar em outra precisão. Esquemas mistos preservam pesos selecionados. Perplexity é um sinal, mas tarefas, structured output, idiomas, tokens raros e long context revelam falhas que médias escondem.

Calibração escolhe faixas a partir de dados representativos. Um conjunto estreito preserva padrões familiares e falha nos demais. Registre dataset, comprimentos, idiomas, preprocessing, algoritmo e versão. Artefatos quantizados são modelos derivados e precisam de hashes e avaliações próprios.

Uma estimativa simples divide bits por oito e acrescenta scales, zero points, índices, alinhamento e tensores de maior precisão. Runtime ainda precisa de KV cache, ativações, workspace e allocator. Um arquivo que cabe na RAM pode não executar.

O modelo mental é aproximação medida. Códigos discretos economizam movimento; scales reconstroem magnitudes; grupos acompanham estatísticas; acumuladores preservam faixa. Quantização funciona quando o erro cabe na tolerância da tarefa e o hardware consome de verdade a forma compacta.

2

Como explicar para uma criança de cinco anos

Uma topógrafa registra elevações de montanhas. Guardar cada medida em milímetros ocupa muito; registrar cada uma como um degrau relativo ao vale local é compacto. Regiões largas exigem degraus grosseiros, enquanto uma escala para cada pequeno mapa acompanha melhor o terreno. Quantização mapeia pesos reais para códigos discretos, e o agrupamento decide se uma escala cobre a cordilheira inteira ou apenas um bairro.

3

Ensine de volta

Descreva quantização affine com scale e zero point e explique por que group size, outliers e kernels reais determinam o benefício.

Mínimo: 80 caracteres e 15 palavras. Seu texto fica somente neste navegador.

Salvo somente neste dispositivo.

Ver uma resposta-modelo

Quantização affine aproxima x por um inteiro q e o reconstrói com uma scale e um zero point. Uma scale compartilhada por grupo grande precisa cobrir toda a faixa; outliers ampliam o passo e reduzem precisão dos valores comuns. Grupos menores acrescentam metadata e se adaptam localmente. Menos bits reduzem capacidade e bandwidth apenas quando o runtime consome a representação empacotada com kernels eficientes; dequantization ou conversões podem apagar o ganho.

4

Teste seu entendimento

1. O que cria erro de quantização?
Resposta e explicação

Arredondar para níveis discretos e cortar valores fora da faixa — Um codebook finito não representa todo valor real e pode cortar extremos.

2. Por que escalas por canal ou grupo melhoram accuracy?
Resposta e explicação

Adaptam a faixa a subconjuntos com distribuições diferentes — Escalas locais evitam que o range ou outlier de um subconjunto determine a resolução inteira.

Conclua o teach-back e acerte o quiz para finalizar a aula.

Fontes

  1. Guangxuan Xiao et al. (2022). SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models.