Após baixar o modelo, você pode encontrar um erro de memória insuficiente ou de memória de vídeo insuficiente durante a execução. Este é provavelmente o último resultado que qualquer pessoa quer ver ao experimentar modelos locais.
Como introduzido anteriormente, o modelo precisa carregar seus pesos na RAM ou VRAM durante a execução, e a geração de respostas também requer espaço adicional. Se seu dispositivo não pode acomodar o modelo, além de mudar para um modelo com menos parámetros, você também pode verificar se existe uma versão quantizada disponível.
Os pesos do modelo são compostos por um grande número de valores numéricos, e armazenar cada valor requer uma certa quantidade de espaço. A quantização reduz o consumo de recursos do modelo ao diminuir a precisão dessas representações numéricas. Por exemplo, pesos originalmente armazenados como números de ponto flutuante de 16 bits podem ser convertidos para representações de baixa precisão predominantemente de 8 bits ou 4 bits. O número de parámetros geralmente não muda, mas o espaço ocupado por cada parâmetro se torna menor.
Tomando como exemplo um modelo de 7 bilhões de parâmetros, e considerando apenas os pesos em si sem os custos adicionais de quantização, podemos obter as seguintes estimativas aproximadas:
Representação de pesos | Tamanho teórico dos pesos |
16 bits | Aproximadamente 14 GB |
8 bits | Aproximadamente 7 GB |
4 bits | Aproximadamente 3,5 GB |
Os valores em GB aqui são calculados em unidades decimais. Arquivos quantizados reais também armazenam informações como fatores de escala e podem usar precisões mixtas, então o tamanho real pode diferir da estimativa.
Para usuários comuns, o benefício mais direto da quantização é que os arquivos de modelo ficam menores, economizando espaço para download e armazenamento, e requerendo menos RAM ou VRAM para os pesos durante a execução. Quando suportados pelo hardware e frameworks de inferência, a quantização também pode melhorar a velocidade de inferência.
No entanto, reduzir o arquivo para um quarto de seu tamanho original não significa que a velocidade de resposta aumentará quatro vezes.
Reduzir a precisão também pode afetar a qualidade da resposta, dependendo do modelo, método de quanitzação e tarefa. Ao escolher uma versão quantizada, além de confirmar que ela pode executar, você também deve testá-la com suas próprias perguntas para ver se as respostas permanecem confiáveis.
Para modelos que já foram baixados ou ajustados, a abordagem comum é a Quantização Pós-Treinamento (PTQ), que converte pesos e outros valores numéricos em representações de menor precisão após o término do treinamento do modelo. Alguns métodos requerem um pequeno lote de dados representativos para calibrar o processo de quantização e minimizar o erro.
Entrar participar da discussão
Outra categoria é a Quantização Sensível ao Treinamento (QAT), que simula os efeitos da quantização durante o treinamento, permitindo que o modelo se adapte a representações de baixa precisão com antecedência.
Ao executar modelos com Ollama, você frequentemente verá nomes como GGUF, Q4, Q8, etc. Esses nomes estão principalmente relacionados ao formato de armazenamento e método de quantização do modelo, e são uma razão importante pela qual modelos grandes podem ser executados em computadores pessoais.
Em agosto de 2023, Georgi Gerganov introduziu o formato GGUF. Suas principais vantagens incluem deployment em arquivo único, escalabilidade, suporte a mapeamento de memória, informações completas e facilidade de uso. Um arquivo GGUF inclui um cabeçalho de arquivo, pares chave-valor de metadados e informações de tensores. Esses componentes juntos definem a estrutura e o comportamento do modelo. Como mostrado abaixo, GGUF é um formato de arquivo de modelo para inferência de modelos grandes, atualmente amplamente usado por ferramentas de inferência locais como llama.cpp e Ollama. Ollama encapsula o processamento do formato GGUF, quantização de modelos e processos de carregamento de modelos, de modo que os usuários não precisam converter formatos de modelo por si mesmos — podem baixar e executar diretamente modelos pré-quantizados. Um arquivo GGUF não contém apenas parâmetros do modelo; também inclui informações básicas do modelo, arquitetura do modelo e dados de tensores. GGUF organiza essas informações através de um formato de arquivo unificado, permitindo que ferramentas de inferência como llama.cpp leiam e carreguem diretamente. Sua estrutura básica é mostrada na figura abaixo.
ModelScope também suporta a exibição de arquivos GGUF estruturados, como mostrado abaixo. Quando ferramentas de inferência carregam arquivos GGUF, elas podem ler diretamente essas informações e carregar o modelo sem precisar preparar múltiplos arquivos de configuração de modelo separadamente.
GGUF em si é apenas um formato de arquivo de modelo e não reduz diretamente o uso de RAM ou VRAM do modelo. O que realmente reduz o consumo de recursos do modelo é a quantização.
Em llama.cpp e modelos GGUF, Q4, Q5, Q8, Q4_K_M representam diferentes nomes de quantização. Aqui, Q significa quantização, e o número seguinte indica a largura de bits principal de quantização. Por exemplo, Q4 significa quantização predominantemente de 4 bits, e Q8 significa quantização predominantemente de 8 bits.
Note que Q4 não significa que todos os parâmetros no modelo usam uniformemente representação de 4 bits. Tomando o Q4_K_M comum como exemplo, ele pertence ao tipo de quantização K-quant no llama.cpp. O Q4 no nome significa quantização predominantemente de 4 bits, K indica o uso do esquema de quantização K-quant, e M denota a configuração Medium dentro desse esquema. Na prática, diferentes tensores no modelo podem usar diferentes precisões de quantização em vez de todos os parâmetros usarem uniformemente representação de 4 bits, como mostrado na figura abaixo.
Ao escolher um modelo GGUF, primeiro confirme que sua ferramenta de inferência suporta o modelo, depois olhe a versão de quantização específica. Uma precisão de quantização menor geralmente reduz o uso de RAM e VRAM, tornando mais fácil executar o modelo em dispositivos comuns, mas pode sacrificar parte do desempenho do modelo. Uma precisão de quantização maior geralmente preserva mais das capacidades do modelo original, mas também requer mais recursos de hardware.
Se uma versão já está próxima dos limites de RAM ou VRAM do seu dispositivo, considere mudar para uma versão menor para deixar espaço para contexto e operações de execução. Se os recursos forem suficientes, você pode usar as mesmas perguntas para comparar as respostas de diferentes versões, prestando atenção especial às suas tarefas alvo como extração de informações, geração de código ou produção de saídas estruturadas.
Primeiro confirme uma execução estável, depois verifique a qualidade das respostas. Assim, a versão quantizada que você escolher será mais adequada ao seu dispositivo e caso de uso.