Espremendo um modelo 7B no seu telefone: um guia de campo de quantização
Q4_K_M, AWQ, GPTQ, SmoothQuant — o que realmente importa quando você tem apenas 4 GB de RAM e 4 W de orçamento.
No mobile, quantização é o jogo inteiro
O gargalo no mobile não são FLOPs, são bytes. Um modelo 7B em fp16 é 14 GB. O seu telefone tem 4–8 GB no total, dos quais dá pra emprestar com realismo 1.5–3 GB para uma carga de IA antes de o SO começar a paginar a app em primeiro plano. A matemática não fecha sem quantização agressiva.
O que de fato entregamos
- Q4_K_M (k-quants, mistura por grupos) para LLMs gerais — a melhor qualidade por byte que medimos abaixo de 4 bits, com modos de falha surpreendentemente suaves em tokens de cauda longa.
- AWQ-int4 (quantização de pesos ciente de ativações) para código e raciocínio matemático, em que outliers de ativação importam e RTN ingênuo cai à vista.
- Pesos quentes em fp16 para a tabela de embedding e a projeção final lm_head — fração pequena dos pesos, mas contribuição desproporcional à qualidade percebida.
- Cache K/V em int8 com escala por token, mantendo o orçamento sem a perda catastrófica do KV em int4.
- GGUF como contêiner em disco, para trocar o esquema de quantização sem reescrever o loader.
Perplexidade não é a métrica certa
O usuário não liga para a entropia cruzada do próximo token. Liga se o resumo está correto, se a tradução soa natural, se a mensagem de commit descreve a mudança. Temos um eval interno pequeno que pontua qualidade de tarefa final em transcrições reais de reunião, traduções reais de cardápio e diffs de commit reais. Ele discorda da perplexidade cerca de 18% das vezes. Às vezes um esquema que perde 0.3 bit de perplexidade ganha 4 pontos em qualidade de resumo, porque o modo de falha muda de "próximo token sutilmente pior" para "menos derrapagens".
O que nos surpreendeu
- O tamanho do grupo importa mais que a largura de bits em algumas camadas. Reduzir o group size de 128 para 64 na FFN salvou mais qualidade do que subir a atenção de 4 para 5 bits.
- Outliers se agrupam. Um punhado de canais em cada bloco transformer carrega magnitude desproporcional de ativação. Tratá-los com um ramo de maior precisão (estilo SmoothQuant ou escalas por canal) é mais eficiente do que subir a largura de bits globalmente.
- Dados de calibração são alavanca. Um set de calibração de 256 amostras tirado da carga real do produto vence sempre um set de 8K amostras tirado do C4.
Conclusão
Não escolha o esquema pelo paper. Escolha pelo seu eval — e o seu eval precisa parecer exatamente o seu produto.