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

quantizing-models-bitsandbytes

Quantiza LLMs para 8-bit ou 4-bit com redução de memória de 50-75% e perda mínima de acurácia. Use quando a memória GPU é limitada, precisa ajustar modelos maiores ou quer inferência mais rápida. Suporta formatos INT8, NF4, FP4, treinamento QLoRA e otimizadores 8-bit. Funciona com HuggingFace Transformers.

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

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

포함된 파일(4)

  • SKILL.md10.4 KB
  • references/memory-optimization.md12.3 KB
  • references/qlora-training.md11.7 KB
  • references/quantization-formats.md10.0 KB

SKILL.md(원문)

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

bitsandbytes - Quantização de LLM

Início rápido

bitsandbytes reduz a memória de LLM em 50% (8-bit) ou 75% (4-bit) com perda <1% de acurácia.

Instalação:

pip install bitsandbytes transformers accelerate

Quantização 8-bit (redução de 50% de memória):

from transformers import AutoModelForCausalLM, BitsAndBytesConfig

config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    quantization_config=config,
    device_map="auto"
)

# Memória: 14GB → 7GB

Quantização 4-bit (redução de 75% de memória):

config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.float16
)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    quantization_config=config,
    device_map="auto"
)

# Memória: 14GB → 3.5GB

Workflows comuns

Workflow 1: Carregar modelo grande com memória GPU limitada

Copie esta checklist:

Carregamento com Quantização:
- [ ] Etapa 1: Calcular requisitos de memória
- [ ] Etapa 2: Escolher nível de quantização (4-bit ou 8-bit)
- [ ] Etapa 3: Configurar quantização
- [ ] Etapa 4: Carregar e verificar modelo

Etapa 1: Calcular requisitos de memória

Estime a memória do modelo:

Memória FP16 (GB) = Parâmetros × 2 bytes / 1e9
Memória INT8 (GB) = Parâmetros × 1 byte / 1e9
Memória INT4 (GB) = Parâmetros × 0.5 bytes / 1e9

Exemplo (Llama 2 7B):
FP16: 7B × 2 / 1e9 = 14 GB
INT8: 7B × 1 / 1e9 = 7 GB
INT4: 7B × 0.5 / 1e9 = 3.5 GB

Etapa 2: Escolher nível de quantização

VRAM da GPUTamanho do ModeloRecomendado
8 GB3B4-bit
12 GB7B4-bit
16 GB7B8-bit ou 4-bit
24 GB13B8-bit ou 70B 4-bit
40+ GB70B8-bit

Etapa 3: Configurar quantização

Para 8-bit (melhor acurácia):

from transformers import BitsAndBytesConfig
import torch

config = BitsAndBytesConfig(
    load_in_8bit=True,
    llm_int8_threshold=6.0,  # Limiar de outlier
    llm_int8_has_fp16_weight=False
)

Para 4-bit (economia máxima de memória):

config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.float16,  # Computar em FP16
    bnb_4bit_quant_type="nf4",  # NormalFloat4 (recomendado)
    bnb_4bit_use_double_quant=True  # Quantização aninhada
)

Etapa 4: Carregar e verificar modelo

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-13b-hf",
    quantization_config=config,
    device_map="auto",  # Posicionamento automático de device
    torch_dtype=torch.float16
)

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-13b-hf")

# Teste de inferência
inputs = tokenizer("Hello, how are you?", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_length=50)
print(tokenizer.decode(outputs[0]))

# Verificar memória
import torch
print(f"Memória alocada: {torch.cuda.memory_allocated()/1e9:.2f}GB")

Workflow 2: Fine-tune com QLoRA (treinamento 4-bit)

QLoRA permite fine-tuning de modelos grandes em GPUs de consumidor.

Copie esta checklist:

Fine-tuning QLoRA:
- [ ] Etapa 1: Instalar dependências
- [ ] Etapa 2: Configurar modelo base 4-bit
- [ ] Etapa 3: Adicionar adaptadores LoRA
- [ ] Etapa 4: Treinar com Trainer padrão

Etapa 1: Instalar dependências

pip install bitsandbytes transformers peft accelerate datasets

Etapa 2: Configurar modelo base 4-bit

from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.float16,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True
)

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    quantization_config=bnb_config,
    device_map="auto"
)

Etapa 3: Adicionar adaptadores LoRA

from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training

# Preparar modelo para treinamento
model = prepare_model_for_kbit_training(model)

# Configurar LoRA
lora_config = LoraConfig(
    r=16,  # Rank do LoRA
    lora_alpha=32,  # Alpha do LoRA
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)

# Adicionar adaptadores LoRA
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# Saída: trainable params: 4.2M || all params: 6.7B || trainable%: 0.06%

Etapa 4: Treinar com Trainer padrão

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
    output_dir="./qlora-output",
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    num_train_epochs=3,
    learning_rate=2e-4,
    fp16=True,
    logging_steps=10,
    save_strategy="epoch"
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    tokenizer=tokenizer
)

trainer.train()

# Salvar adaptadores LoRA (apenas ~20MB)
model.save_pretrained("./qlora-adapters")

Workflow 3: Otimizador 8-bit para treinamento eficiente em memória

Use Adam/AdamW 8-bit para reduzir memória do otimizador em 75%.

Configuração de Otimizador 8-bit:
- [ ] Etapa 1: Substituir otimizador padrão
- [ ] Etapa 2: Configurar treinamento
- [ ] Etapa 3: Monitorar economia de memória

Etapa 1: Substituir otimizador padrão

import bitsandbytes as bnb
from transformers import Trainer, TrainingArguments

# Em vez de torch.optim.AdamW
model = AutoModelForCausalLM.from_pretrained("model-name")

training_args = TrainingArguments(
    output_dir="./output",
    per_device_train_batch_size=8,
    optim="paged_adamw_8bit",  # Otimizador 8-bit
    learning_rate=5e-5
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset
)

trainer.train()

Uso manual do otimizador:

import bitsandbytes as bnb

optimizer = bnb.optim.AdamW8bit(
    model.parameters(),
    lr=1e-4,
    betas=(0.9, 0.999),
    eps=1e-8
)

# Loop de treinamento
for batch in dataloader:
    loss = model(**batch).loss
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()

Etapa 2: Configurar treinamento

Compare memória:

Memória do otimizador AdamW padrão = model_params × 8 bytes (estados)
Memória do AdamW 8-bit = model_params × 2 bytes
Economia = 75% de memória do otimizador

Exemplo (Llama 2 7B):
Padrão: 7B × 8 = 56 GB
8-bit: 7B × 2 = 14 GB
Economia: 42 GB

Etapa 3: Monitorar economia de memória

import torch

before = torch.cuda.memory_allocated()

# Passo de treinamento
optimizer.step()

after = torch.cuda.memory_allocated()
print(f"Memória usada: {(after-before)/1e9:.2f}GB")

Quando usar vs alternativas

Use bitsandbytes quando:

  • Memória GPU limitada (precisa ajustar modelo maior)
  • Treinamento com QLoRA (fine-tune 70B em GPU única)
  • Apenas inferência (redução de 50-75% de memória)
  • Usando HuggingFace Transformers
  • Degradação de acurácia de 0-2% aceitável

Use alternativas em vez disso:

  • GPTQ/AWQ: Serving em produção (inferência mais rápida que bitsandbytes)
  • GGUF: Inferência em CPU (llama.cpp)
  • FP8: GPUs H100 (FP8 de hardware mais rápido)
  • Precisão total: Acurácia crítica, memória não restrita

Problemas comuns

Problema: Erro CUDA durante carregamento

Instale versão CUDA compatível:

# Verificar versão CUDA
nvcc --version

# Instalar bitsandbytes compatível
pip install bitsandbytes --no-cache-dir

Problema: Carregamento de modelo lento

Use offload de CPU para modelos grandes:

model = AutoModelForCausalLM.from_pretrained(
    "model-name",
    quantization_config=config,
    device_map="auto",
    max_memory={0: "20GB", "cpu": "30GB"}  # Offload para CPU
)

Problema: Acurácia menor que esperado

Tente 8-bit em vez de 4-bit:

config = BitsAndBytesConfig(load_in_8bit=True)
# 8-bit tem <0.5% perda de acurácia vs 1-2% para 4-bit

Ou use NF4 com quantização dupla:

config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",  # Melhor que fp4
    bnb_4bit_use_double_quant=True  # Acurácia extra
)

Problema: OOM mesmo com 4-bit

Ativar offload de CPU:

model = AutoModelForCausalLM.from_pretrained(
    "model-name",
    quantization_config=config,
    device_map="auto",
    offload_folder="offload",  # Offload para disco
    offload_state_dict=True
)

Tópicos avançados

Guia de treinamento QLoRA: Veja references/qlora-training.md para workflows de fine-tuning completos, ajuste de hiperparâmetros e treinamento multi-GPU.

Formatos de quantização: Veja references/quantization-formats.md para comparação INT8, NF4, FP4, quantização dupla e configs de quantização customizadas.

Otimização de memória: Veja references/memory-optimization.md para estratégias de offload de CPU, gradient checkpointing e profiling de memória.

Requisitos de hardware

  • GPU: NVIDIA com compute capability 7.0+ (Turing, Ampere, Hopper)
  • VRAM: Depende do modelo e quantização
    • 4-bit Llama 2 7B: 4GB
    • 4-bit Llama 2 13B: 8GB
    • 4-bit Llama 2 70B: 24GB
  • CUDA: 11.1+ (12.0+ recomendado)
  • PyTorch: 2.0+

Plataformas suportadas: GPUs NVIDIA (primária), AMD ROCm, Intel GPUs (experimental)

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의 스킬 모두 보기

이 스킬의 문제 신고