Voltar ao blog

Quantização GGUF: qual nível usar?

13 de setembro de 2026

Escolha Q4_K_M por default; vá de Q6_K ou Q8_0 quando sobrar VRAM e faltar só o último ponto percentual de qualidade. A quantização GGUF encolhe os pesos de um modelo de 16 bits para menos — o Q4_K_M guarda cerca de 4.85 bits por peso, então um modelo 7B cai de ~14 GB para ~4.1 GB com perplexidade tipicamente menos de 1% pior que a original. A pergunta “qual quantização gguf usar” tem uma resposta estável a ponto de entediar, que a maior parte do drama online esconde. Abaixo: o que a quantização realmente faz com os pesos, quanta qualidade cada nível custa, como fazer a conta de tamanho sozinho e um comando para medir o dano no seu próprio hardware em vez de confiar no benchmark de um desconhecido.

O que a quantização GGUF realmente faz?

Um modelo é treinado em ponto flutuante de 16 bits (FP16 ou BF16): cada um dos seus bilhões de pesos é um número de 2 bytes. Quantização comprime cada peso em menos bits. O jeito ingênuo — arredondar todo peso para um inteiro de 4 bits — destrói valores pequenos mas importantes, então o GGUF usa dois truques:

  1. Escalonamento por blocos. Os pesos são agrupados em blocos (geralmente 32), e cada bloco ganha seu próprio fator de escala. Os valores de 4 bits são offsets dentro do bloco, então uma faixa ampla de magnitudes sobrevive.
  2. K-quants conscientes de importância. O “K” em Q4_K_M significa super-blocos de escalas, além de tratar as camadas de attention e feed-forward de forma diferente entre si, porque toleram compressão de maneira desigual.

A família “I” (IQ4_XS e companhia) vai além com codebooks de teoria da informação emprestados da compressão de imagem. Mesma ideia, encoding mais sofisticado: menos bits por peso com qualidade parecida, ao custo de inferência um pouco mais lenta em alguns backends.

Um esclarecimento que evita a maior parte da confusão: a quantização muda apenas os pesos armazenados. Arquitetura, tokenizer e tratamento de contexto ficam intactos. Um arquivo Q4 e um Q8 do mesmo modelo são o mesmo modelo usando casacos diferentes.

Q4 vs Q8: quantização mais alta é melhor?

Tecnicamente sim; perceptualmente não. Usando as rodadas de perplexidade do próprio llama.cpp em modelos Llama como referência: o Q8_0 fica a ~0.02% do FP16 — para qualquer propósito prático, lossless. O Q6_K é quase indistinguível. O Q4_K_M ganha cerca de 1–2% de perplexidade, o Q4_0 um pouco mais, e o Q2_K é onde respostas coerentes começam a desmoronar em modelos pequenos.

Duas regras que os números implicam:

  • Tamanho do modelo compra folga de quantização. Um modelo 70B sobrevive a Q2/Q3 muito melhor que um 7B, porque modelos maiores são mais redundantes. Quantizar um 7B para Q2 é amputação; quantizar um 70B para Q3 é alfaiataria.
  • O piso de qualidade se move com a tarefa. Chat tolera Q4. Geração exata de código, matemática e RAG sobre documentos precisos expõem o ruído de quantização mais cedo. Se um modelo Q4 vive escrevendo código sutilmente errado, teste o mesmo modelo em Q6_K antes de culpar o modelo.
NívelBits/pesoTamanho vs FP16Perda de qualidadeUse quando
Q2_K~3.4~21%Severa abaixo de 13BNada mais cabe, só modelos grandes
Q3_K_M~3.9~25%PerceptívelVRAM apertada, modelos ≥14B
Q4_K_S~4.6~29%PequenaQ4_K_M não cabe e está perto
Q4_K_M~4.85~30%~1% de perplexidadeO default. Melhor troca qualidade/tamanho
Q5_K_M~5.7~35%~0.5%VRAM disponível, tarefas críticas de qualidade
Q6_K~6.6~41%Quase nulaCódigo/matemática, ainda cabe confortavelmente
Q8_0~8.5~53%Efetivamente nenhumaRodadas de referência, bases de fine-tune
IQ4_XS~4.3~27%≈Q4_K_MQ4_K_M um pouco grande demais, backend suporta i-quants

De quanta VRAM cada nível precisa?

Faça a conta de tamanho em vez de decorar tabelas — é uma linha:

size_GB ≈ (bits_per_weight × params) / 8
# modelo 8B @ Q4_K_M: 4.85 × 8 / 8 ≈ 4.9 GB
# modelo 8B @ Q8_0:   8.50 × 8 / 8 ≈ 8.5 GB

Depois some as partes que a fórmula deixa de fora: o KV cache (cresce com o tamanho do contexto — de algumas centenas de MB a vários GB), as ativações e os buffers de computação. Margem prática: um modelo “de 4.9 GB” quer uma placa de 6 GB em contexto 4k, e flash-attention com quantização de KV cache para continuar lá em 16k. Os pesos são a manchete, não a conta inteira.

Qual quantização GGUF você deve usar?

Ordem de decisão, sem exceções que valham decorar:

  1. Calcule seu orçamento de contexto + KV primeiro, depois os pesos. Contexto que não cabe é pior que qualidade que você não consegue medir.
  2. Fique no Q4_K_M por default. É o default da comunidade por um motivo — cerca de 1% de perplexidade por 70% do tamanho. Todo registry, incluindo o do Ollama, o entrega como baseline.
  3. Suba para Q6_K quando a tarefa pune ruído: código, matemática, extração, qualquer coisa que você alimenta a um pipeline sem supervisão.
  4. Use Q8_0 só para referência — testes A/B, medição de dano de quantização ou base de fine-tune. Como máquina do dia a dia, ele principalmente compra calor nos seus sensores de VRAM.
  5. Desça abaixo de Q4 só sob coação, e só em modelos grandes. Teste com um prompt conhecidamente difícil antes de confiar.

Se você está escolhendo qual arquivo baixar no Hugging Face, prefira um Q4_K_M.gguf único a splits fragmentados, a menos que quem subiu só tenha publicado estes — menos peças móveis. E se está escolhendo onde rodar, a escolha de engine é outro eixo: veja llama.cpp vs Ollama para esse lado.

Como medir o dano da quantização você mesmo?

Benchmarks diferem; seu prompt é constante. Compile o llama.cpp uma vez, baixe dois níveis do mesmo modelo e meça perplexidade (menor é melhor) e tokens/segundo:

git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
cmake -B build && cmake --build build --config Release -j

huggingface-cli download bartowski/Meta-Llama-3.1-8B-Instruct-GGUF 
  Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf Meta-Llama-3.1-8B-Instruct-Q8_0.gguf 
  --local-dir models

# perplexidade num trecho de wiki-text (menor = mais perto do modelo original)
./build/bin/llama-perplexity -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf -ngl 99
./build/bin/llama-perplexity -m models/Meta-Llama-3.1-8B-Instruct-Q8_0.gguf  -ngl 99

# e velocidade no mesmo hardware
./build/bin/llama-bench -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf -ngl 99

O número do Q4_K_M será alguns centésimos de ponto pior que o do Q8_0, e o arquivo será ~40% menor. Se sua tarefa downstream não nota a diferença — e para a maioria, não nota — você tem a resposta sem ler leaderboard de ninguém.

A quantização prejudica privacidade ou o discurso de local-only?

Não — é aritmética sobre pesos, inteiramente offline, e o arquivo quantizado é só um contêiner menor dos mesmos parâmetros. Rodar um Q4_K_M localmente vaza exatamente tanto (ou tão pouco) quanto rodar o modelo em precisão total localmente: nada sai da máquina. A variável relevante para privacidade é onde a inferência roda, não a largura em bits. As ressalvas de sempre sobre proveniência de modelo valem igualmente para cada nível de quant: um fine-tune “uncensored” de base roubada em Q8 não é mais seguro que os mesmos pesos em Q4. Para o lado do formato de arquivo, veja como rodar modelos GGUF localmente.

Qual nível escolher?

Q4_K_M, e pare de ler fórum sobre isso. Suba para Q6_K em trabalho que exige precisão se a VRAM permitir, mantenha um Q8_0 por perto para comparações A/B, e trate tudo abaixo de Q4 como ração de emergência, só para modelos grandes. O único erro que vale evitar é simétrico: se preocupar com Q4-vs-Q5 enquanto ignora o tamanho do contexto, que quebra mais setups locais do que qualquer quant já quebrou.

— mrsaynothing

Get the next one by email

One email per post. No spam, no algorithms.

self-hosted · no third parties · one-click unsubscribe

what is this?

Git cherry-pick: vários commits, branches e conflitos

Gostou dos artigos? É assim que eu construo profissionalmente. me contrate