본문으로 건너뛰기
cccskills
무료GitHub에 공개

gptq

Quantização pós-treinamento em 4-bits para LLMs com perda mínima de precisão. Use para implantar modelos grandes (70B, 405B) em GPUs de consumo, quando você precisa de redução de memória 4× com <2% de degradação de perplexidade, ou para inferência mais rápida (aceleração de 3-4×) vs FP16. Integra com transformers e PEFT para fine-tuning QLoRA.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구DiscordHugging Face
설치 방법 보기

포함된 파일(4)

  • SKILL.md12.1 KB
  • references/calibration.md8.0 KB
  • references/integration.md2.7 KB
  • references/troubleshooting.md1.9 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

GPTQ (Generative Pre-trained Transformer Quantization)

Método de quantização pós-treinamento que comprime LLMs para 4-bits com perda mínima de precisão usando quantização group-wise.

Quando usar GPTQ

Use GPTQ quando:

  • Precisa encaixar modelos grandes (70B+) em memória GPU limitada
  • Quer redução de memória 4× com <2% de perda de precisão
  • Implantando em GPUs de consumo (RTX 4090, 3090)
  • Precisa de inferência mais rápida (aceleração de 3-4× vs FP16)

Use AWQ em vez disso quando:

  • Precisa de precisão ligeiramente melhor (<1% de perda)
  • Tem GPUs mais novas (Ampere, Ada)
  • Quer suporte do kernel Marlin (2× mais rápido em algumas GPUs)

Use bitsandbytes em vez disso quando:

  • Precisa de integração simples com transformers
  • Quer quantização 8-bit (menos compressão, melhor qualidade)
  • Não precisa de arquivos de modelo pré-quantizados

Início rápido

Instalação

# Instalar AutoGPTQ
pip install auto-gptq

# Com Triton (apenas Linux, mais rápido)
pip install auto-gptq[triton]

# Com extensões CUDA (mais rápido)
pip install auto-gptq --no-build-isolation

# Instalação completa
pip install auto-gptq transformers accelerate

Carregar modelo pré-quantizado

from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM

# Carregar modelo quantizado do HuggingFace
model_name = "TheBloke/Llama-2-7B-Chat-GPTQ"

model = AutoGPTQForCausalLM.from_quantized(
    model_name,
    device="cuda:0",
    use_triton=False  # Defina como True no Linux para velocidade
)

tokenizer = AutoTokenizer.from_pretrained(model_name)

# Gerar
prompt = "Explain quantum computing"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda:0")
outputs = model.generate(**inputs, max_new_tokens=200)
print(tokenizer.decode(outputs[0]))

Quantizar seu próprio modelo

from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
from datasets import load_dataset

# Carregar modelo
model_name = "meta-llama/Llama-2-7b-chat-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Configuração de quantização
quantize_config = BaseQuantizeConfig(
    bits=4,              # Quantização 4-bit
    group_size=128,      # Tamanho do grupo (recomendado: 128)
    desc_act=False,      # Ordem de ativação (False para kernel CUDA)
    damp_percent=0.01    # Fator de amortecimento
)

# Carregar modelo para quantização
model = AutoGPTQForCausalLM.from_pretrained(
    model_name,
    quantize_config=quantize_config
)

# Preparar dados de calibração
dataset = load_dataset("c4", split="train", streaming=True)
calibration_data = [
    tokenizer(example["text"])["input_ids"][:512]
    for example in dataset.take(128)
]

# Quantizar
model.quantize(calibration_data)

# Salvar modelo quantizado
model.save_quantized("llama-2-7b-gptq")
tokenizer.save_pretrained("llama-2-7b-gptq")

# Enviar para HuggingFace
model.push_to_hub("username/llama-2-7b-gptq")

Quantização group-wise

Como GPTQ funciona:

  1. Agrupar pesos: Divide cada matriz de pesos em grupos (tipicamente 128 elementos)
  2. Quantizar por grupo: Cada grupo tem sua própria escala/ponto zero
  3. Minimizar erro: Usa informações de Hessiana para minimizar erro de quantização
  4. Resultado: Pesos 4-bit com precisão próxima a FP16

Trade-off de tamanho de grupo:

Tamanho do GrupoTamanho do ModeloPrecisãoVelocidadeRecomendação
-1 (por coluna)MenorMelhorMais lentaApenas pesquisa
32MenorMelhorMais lentaPrecisão alta necessária
128MédioBoaRápidaPadrão recomendado
256MaiorMenorMais rápidaCrítico em velocidade
1024MaiorMenorMais rápidaNão recomendado

Exemplo:

Matriz de pesos: [1024, 4096] = 4.2M elementos

Tamanho de grupo = 128:
- Grupos: 4.2M / 128 = 32.768 grupos
- Cada grupo: escala 4-bit própria + ponto zero
- Resultado: Melhor granularidade → melhor precisão

Configurações de quantização

4-bit padrão (recomendado)

from auto_gptq import BaseQuantizeConfig

config = BaseQuantizeConfig(
    bits=4,              # Quantização 4-bit
    group_size=128,      # Tamanho de grupo padrão
    desc_act=False,      # Kernel CUDA mais rápido
    damp_percent=0.01    # Fator de amortecimento
)

Performance:

  • Memória: Redução 4× (modelo 70B: 140GB → 35GB)
  • Precisão: ~1.5% de aumento de perplexidade
  • Velocidade: 3-4× mais rápido que FP16

Alta precisão (3-bit com grupos maiores)

config = BaseQuantizeConfig(
    bits=3,              # 3-bit (mais compressão)
    group_size=128,      # Manter tamanho de grupo padrão
    desc_act=True,       # Melhor precisão (mais lenta)
    damp_percent=0.01
)

Trade-off:

  • Memória: Redução 5×
  • Precisão: ~3% de aumento de perplexidade
  • Velocidade: 5× mais rápido (mas menos preciso)

Máxima precisão (4-bit com grupos pequenos)

config = BaseQuantizeConfig(
    bits=4,
    group_size=32,       # Grupos menores (melhor precisão)
    desc_act=True,       # Reordenação de ativação
    damp_percent=0.005   # Amortecimento menor
)

Trade-off:

  • Memória: Redução 3.5× (ligeiramente maior)
  • Precisão: ~0.8% de aumento de perplexidade (melhor)
  • Velocidade: 2-3× mais rápido (overhead de kernel)

Backends de kernel

ExLlamaV2 (padrão, mais rápido)

model = AutoGPTQForCausalLM.from_quantized(
    model_name,
    device="cuda:0",
    use_exllama=True,      # Usar ExLlamaV2
    exllama_config={"version": 2}
)

Performance: 1.5-2× mais rápido que Triton

Marlin (GPUs Ampere+)

# Quantizar com formato Marlin
config = BaseQuantizeConfig(
    bits=4,
    group_size=128,
    desc_act=False  # Obrigatório para Marlin
)

model.quantize(calibration_data, use_marlin=True)

# Carregar com Marlin
model = AutoGPTQForCausalLM.from_quantized(
    model_name,
    device="cuda:0",
    use_marlin=True  # 2× mais rápido em A100/H100
)

Requisitos:

  • NVIDIA Ampere ou mais novo (A100, H100, RTX 40xx)
  • Capacidade de computação ≥ 8.0

Triton (apenas Linux)

model = AutoGPTQForCausalLM.from_quantized(
    model_name,
    device="cuda:0",
    use_triton=True  # Apenas Linux
)

Performance: 1.2-1.5× mais rápido que backend CUDA

Integração com transformers

Uso direto do transformers

from transformers import AutoModelForCausalLM, AutoTokenizer

# Carregar modelo quantizado (transformers detecta automaticamente GPTQ)
model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Llama-2-13B-Chat-GPTQ",
    device_map="auto",
    trust_remote_code=False
)

tokenizer = AutoTokenizer.from_pretrained("TheBloke/Llama-2-13B-Chat-GPTQ")

# Usar como qualquer modelo transformers
inputs = tokenizer("Hello", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=100)

Fine-tuning QLoRA (GPTQ + LoRA)

from transformers import AutoModelForCausalLM
from peft import prepare_model_for_kbit_training, LoraConfig, get_peft_model

# Carregar modelo GPTQ
model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Llama-2-7B-GPTQ",
    device_map="auto"
)

# Preparar para treinamento LoRA
model = prepare_model_for_kbit_training(model)

# Configuração LoRA
lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)

# Adicionar adaptadores LoRA
model = get_peft_model(model, lora_config)

# Fine-tune (muito eficiente em memória!)
# Modelo 70B treináv em um único A100 80GB

Benchmarks de performance

Redução de memória

ModeloFP16GPTQ 4-bitRedução
Llama 2-7B14 GB3.5 GB4×
Llama 2-13B26 GB6.5 GB4×
Llama 2-70B140 GB35 GB4×
Llama 3-405B810 GB203 GB4×

Habilita:

  • 70B em um único A100 80GB (vs 2× A100 necessários para FP16)
  • 405B em 3× A100 80GB (vs 11× A100 necessários para FP16)
  • 13B em RTX 4090 24GB (vs OOM com FP16)

Velocidade de inferência (Llama 2-7B, A100)

PrecisãoTokens/segvs FP16
FP1625 tok/s1×
GPTQ 4-bit (CUDA)85 tok/s3.4×
GPTQ 4-bit (ExLlama)105 tok/s4.2×
GPTQ 4-bit (Marlin)120 tok/s4.8×

Precisão (perplexidade em WikiText-2)

ModeloFP16GPTQ 4-bit (g=128)Degradação
Llama 2-7B5.475.55+1.5%
Llama 2-13B4.884.95+1.4%
Llama 2-70B3.323.38+1.8%

Preservação de qualidade excelente - menos de 2% de degradação!

Padrões comuns

Implantação multi-GPU

# Mapeamento automático de dispositivo
model = AutoGPTQForCausalLM.from_quantized(
    "TheBloke/Llama-2-70B-GPTQ",
    device_map="auto",  # Divide automaticamente entre GPUs
    max_memory={0: "40GB", 1: "40GB"}  # Limite por GPU
)

# Mapeamento manual de dispositivo
device_map = {
    "model.embed_tokens": 0,
    "model.layers.0-39": 0,  # Primeiras 40 camadas na GPU 0
    "model.layers.40-79": 1,  # Últimas 40 camadas na GPU 1
    "model.norm": 1,
    "lm_head": 1
}

model = AutoGPTQForCausalLM.from_quantized(
    model_name,
    device_map=device_map
)

Offloading para CPU

# Descarregar algumas camadas para CPU (para modelos muito grandes)
model = AutoGPTQForCausalLM.from_quantized(
    "TheBloke/Llama-2-405B-GPTQ",
    device_map="auto",
    max_memory={
        0: "80GB",  # GPU 0
        1: "80GB",  # GPU 1
        2: "80GB",  # GPU 2
        "cpu": "200GB"  # Descarregar overflow para CPU
    }
)

Inferência em batch

# Processar múltiplos prompts eficientemente
prompts = [
    "Explain AI",
    "Explain ML",
    "Explain DL"
]

inputs = tokenizer(prompts, return_tensors="pt", padding=True).to("cuda")

outputs = model.generate(
    **inputs,
    max_new_tokens=100,
    pad_token_id=tokenizer.eos_token_id
)

for i, output in enumerate(outputs):
    print(f"Prompt {i}: {tokenizer.decode(output)}")

Encontrando modelos pré-quantizados

TheBloke no HuggingFace:

Pesquisar:

# Encontrar modelos GPTQ no HuggingFace
https://huggingface.co/models?library=gptq

Download:

from auto_gptq import AutoGPTQForCausalLM

# Baixa automaticamente do HuggingFace
model = AutoGPTQForCausalLM.from_quantized(
    "TheBloke/Llama-2-70B-Chat-GPTQ",
    device="cuda:0"
)

Modelos suportados

  • Família LLaMA: Llama 2, Llama 3, Code Llama
  • Mistral: Mistral 7B, Mixtral 8x7B, 8x22B
  • Qwen: Qwen, Qwen2, QwQ
  • DeepSeek: V2, V3
  • Phi: Phi-2, Phi-3
  • Yi, Falcon, BLOOM, OPT
  • 100+ modelos no HuggingFace

Referências

Recursos

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Especialista em construir experiências 3D para a web - Three.js, React Three Fiber, Spline, WebGL e cenas 3D interativas. Cobre configuradores de produtos, portfólios 3D, websites imersivos e adição de profundidade às experiências web. Use quando: website 3D, three.js, WebGL, react three fiber, experiência 3D.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

artubss/SKILLS-CLAUDE-CODE112026년 5월 17일 업데이트

Quando o usuário quer planejar, projetar ou implementar um teste A/B ou experimento. Também use quando o usuário menciona "teste A/B", "split test", "experimento", "testar essa mudança", "copy variante", "teste multivariado" ou "hipótese". Para implementação de rastreamento, veja analytics-tracking.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

artubss/SKILLS-CLAUDE-CODE112026년 5월 17일 업데이트

Auditar e melhorar a acessibilidade web seguindo as diretrizes WCAG 2.1. Use quando solicitado para "melhorar acessibilidade", "auditoria a11y", "conformidade WCAG", "suporte a leitor de tela", "navegação por teclado" ou "tornar acessível".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

artubss/SKILLS-CLAUDE-CODE112026년 5월 17일 업데이트

Testes e benchmarking de agentes LLM incluindo testes comportamentais, avaliação de capacidades, métricas de confiabilidade e monitoramento em produção—onde até os melhores agentes alcançam menos de 50% em benchmarks do mundo real. Use quando: testes de agentes, avaliação de agentes, benchmark de agentes, confiabilidade de agentes, teste de agentes.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

artubss/SKILLS-CLAUDE-CODE112026년 5월 17일 업데이트

Criar, gerenciar e orquestrar agentes de IA usando o CLI AI Maestro. Use quando o usuário pedir para "criar agente", "listar agentes", "deletar agente", "hibernar agente", "despertar agente", "instalar plugin", "mostrar agente", "reiniciar agente" ou qualquer tarefa de gerenciamento do ciclo de vida do agente.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

artubss/SKILLS-CLAUDE-CODE112026년 5월 17일 업데이트

Gerencie múltiplos agentes CLI locais via sessões tmux (iniciar/parar/monitorar/atribuir) com agendamento compatível com cron.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

artubss/SKILLS-CLAUDE-CODE112026년 5월 17일 업데이트

artubss의 스킬 모두 보기

이 스킬의 문제 신고