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

peft-fine-tuning

Ajuste fino com eficiência de parâmetros para LLMs usando LoRA, QLoRA e 25+ métodos. Use ao fazer fine-tuning de modelos grandes (7B-70B) com memória GPU limitada, quando precisa treinar <1% dos parâmetros com perda mínima de precisão, ou para serviços multi-adapter. Biblioteca oficial do HuggingFace integrada ao ecossistema transformers.

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

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

포함된 파일(3)

  • SKILL.md12.6 KB
  • references/advanced-usage.md12.2 KB
  • references/troubleshooting.md10.1 KB

SKILL.md(원문)

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

PEFT (Parameter-Efficient Fine-Tuning)

Ajuste fino de LLMs treinando <1% dos parâmetros usando LoRA, QLoRA e 25+ métodos de adapter.

Quando usar PEFT

Use PEFT/LoRA quando:

  • Fazer fine-tuning de modelos 7B-70B em GPUs consumer (RTX 4090, A100)
  • Precisa treinar <1% dos parâmetros (6MB de adapters vs 14GB do modelo completo)
  • Quer iteração rápida com múltiplos adapters específicos por tarefa
  • Implantando múltiplas variantes com fine-tuning a partir de um modelo base

Use QLoRA (PEFT + quantização) quando:

  • Fazendo fine-tuning de modelos 70B em GPU única de 24GB
  • Memória é a restrição principal
  • Pode aceitar ~5% de trade-off de qualidade vs fine-tuning completo

Use fine-tuning completo quando:

  • Treinando modelos pequenos (<1B de parâmetros)
  • Precisa de qualidade máxima e tem orçamento de computação
  • Desvio significativo de domínio requer atualizar todos os pesos

Guia rápido

Instalação

# Instalação básica
pip install peft

# Com suporte a quantização (recomendado)
pip install peft bitsandbytes

# Stack completo
pip install peft transformers accelerate bitsandbytes datasets

Fine-tuning LoRA (padrão)

from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import get_peft_model, LoraConfig, TaskType
from datasets import load_dataset

# Carregar modelo base
model_name = "meta-llama/Llama-3.1-8B"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.pad_token = tokenizer.eos_token

# Configuração LoRA
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=16,                          # Rank (8-64, maior = mais capacidade)
    lora_alpha=32,                 # Fator de escala (tipicamente 2*r)
    lora_dropout=0.05,             # Dropout para regularização
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],  # Camadas de atenção
    bias="none"                    # Não treina vieses
)

# Aplicar LoRA
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# Output: trainable params: 13,631,488 || all params: 8,043,307,008 || trainable%: 0.17%

# Preparar dataset
dataset = load_dataset("databricks/databricks-dolly-15k", split="train")

def tokenize(example):
    text = f"### Instruction:\n{example['instruction']}\n\n### Response:\n{example['response']}"
    return tokenizer(text, truncation=True, max_length=512, padding="max_length")

tokenized = dataset.map(tokenize, remove_columns=dataset.column_names)

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

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized,
    data_collator=lambda data: {"input_ids": torch.stack([f["input_ids"] for f in data]),
                                 "attention_mask": torch.stack([f["attention_mask"] for f in data]),
                                 "labels": torch.stack([f["input_ids"] for f in data])}
)

trainer.train()

# Salvar apenas adapter (6MB vs 16GB)
model.save_pretrained("./lora-llama-adapter")

Fine-tuning QLoRA (com eficiência de memória)

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

# Configuração de quantização 4-bit
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",           # NormalFloat4 (melhor para LLMs)
    bnb_4bit_compute_dtype="bfloat16",   # Computar em bf16
    bnb_4bit_use_double_quant=True       # Quantização aninhada
)

# Carregar modelo quantizado
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-70B",
    quantization_config=bnb_config,
    device_map="auto"
)

# Preparar para treinamento (habilita gradient checkpointing)
model = prepare_model_for_kbit_training(model)

# Configuração LoRA para QLoRA
lora_config = LoraConfig(
    r=64,                              # Rank maior para 70B
    lora_alpha=128,
    lora_dropout=0.1,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
    bias="none",
    task_type="CAUSAL_LM"
)

model = get_peft_model(model, lora_config)
# Modelo 70B agora cabe em GPU única de 24GB!

Seleção de parâmetros LoRA

Rank (r) - capacidade vs eficiência

RankParâmetros TreináveisMemóriaQualidadeCaso de Uso
4~3MMínimaMenorTarefas simples, prototipagem
8~7MBaixaBoaPonto de partida recomendado
16~14MMédiaMelhorFine-tuning geral
32~27MMaiorAltaTarefas complexas
64~54MAltaMáximaAdaptação de domínio, modelos 70B

Alpha (lora_alpha) - fator de escala

# Regra prática: alpha = 2 * rank
LoraConfig(r=16, lora_alpha=32)  # Padrão
LoraConfig(r=16, lora_alpha=16)  # Conservador (taxa de aprendizado menor)
LoraConfig(r=16, lora_alpha=64)  # Agressivo (taxa de aprendizado maior)

Módulos alvo por arquitetura

# Llama / Mistral / Qwen
target_modules = ["q_proj", "v_proj", "k_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]

# GPT-2 / GPT-Neo
target_modules = ["c_attn", "c_proj", "c_fc"]

# Falcon
target_modules = ["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"]

# BLOOM
target_modules = ["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"]

# Detecção automática de todas as camadas lineares
target_modules = "all-linear"  # PEFT 0.6.0+

Carregando e mesclando adapters

Carregar adapter treinado

from peft import PeftModel, AutoPeftModelForCausalLM
from transformers import AutoModelForCausalLM

# Opção 1: Carregar com PeftModel
base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B")
model = PeftModel.from_pretrained(base_model, "./lora-llama-adapter")

# Opção 2: Carregar diretamente (recomendado)
model = AutoPeftModelForCausalLM.from_pretrained(
    "./lora-llama-adapter",
    device_map="auto"
)

Mesclar adapter no modelo base

# Mesclar para implantação (sem overhead de adapter)
merged_model = model.merge_and_unload()

# Salvar modelo mesclado
merged_model.save_pretrained("./llama-merged")
tokenizer.save_pretrained("./llama-merged")

# Fazer push para Hub
merged_model.push_to_hub("username/llama-finetuned")

Serviço multi-adapter

from peft import PeftModel

# Carregar base com primeiro adapter
model = AutoPeftModelForCausalLM.from_pretrained("./adapter-task1")

# Carregar adapters adicionais
model.load_adapter("./adapter-task2", adapter_name="task2")
model.load_adapter("./adapter-task3", adapter_name="task3")

# Alternar entre adapters em tempo de execução
model.set_adapter("task1")  # Usar adapter task1
output1 = model.generate(**inputs)

model.set_adapter("task2")  # Alternar para task2
output2 = model.generate(**inputs)

# Desabilitar adapters (usar modelo base)
with model.disable_adapter():
    base_output = model.generate(**inputs)

Comparação de métodos PEFT

MétodoTreináveis %MemóriaVelocidadeMelhor Para
LoRA0.1-1%BaixaRápidoFine-tuning geral
QLoRA0.1-1%Muito BaixaMédioMemória limitada
AdaLoRA0.1-1%BaixaMédioSeleção automática de rank
IA30.01%MínimaMais rápidoAdaptação few-shot
Prefix Tuning0.1%BaixaMédioControle de geração
Prompt Tuning0.001%MínimaRápidoAdaptação simples de tarefa
P-Tuning v20.1%BaixaMédioTarefas NLU

IA3 (parâmetros mínimos)

from peft import IA3Config

ia3_config = IA3Config(
    target_modules=["q_proj", "v_proj", "k_proj", "down_proj"],
    feedforward_modules=["down_proj"]
)
model = get_peft_model(model, ia3_config)
# Treina apenas 0.01% dos parâmetros!

Prefix Tuning

from peft import PrefixTuningConfig

prefix_config = PrefixTuningConfig(
    task_type="CAUSAL_LM",
    num_virtual_tokens=20,      # Tokens prependidos
    prefix_projection=True       # Usar projeção MLP
)
model = get_peft_model(model, prefix_config)

Padrões de integração

Com TRL (SFTTrainer)

from trl import SFTTrainer, SFTConfig
from peft import LoraConfig

lora_config = LoraConfig(r=16, lora_alpha=32, target_modules="all-linear")

trainer = SFTTrainer(
    model=model,
    args=SFTConfig(output_dir="./output", max_seq_length=512),
    train_dataset=dataset,
    peft_config=lora_config,  # Passar configuração LoRA diretamente
)
trainer.train()

Com Axolotl (config YAML)

# axolotl config.yaml
adapter: lora
lora_r: 16
lora_alpha: 32
lora_dropout: 0.05
lora_target_modules:
  - q_proj
  - v_proj
  - k_proj
  - o_proj
lora_target_linear: true  # Almejar todas as camadas lineares

Com vLLM (inference)

from vllm import LLM
from vllm.lora.request import LoRARequest

# Carregar modelo base com suporte LoRA
llm = LLM(model="meta-llama/Llama-3.1-8B", enable_lora=True)

# Servir com adapter
outputs = llm.generate(
    prompts,
    lora_request=LoRARequest("adapter1", 1, "./lora-adapter")
)

Benchmarks de desempenho

Uso de memória (Llama 3.1 8B)

MétodoMemória GPUParâmetros Treináveis
Fine-tuning completo60+ GB8B (100%)
LoRA r=1618 GB14M (0.17%)
QLoRA r=166 GB14M (0.17%)
IA316 GB800K (0.01%)

Velocidade de treinamento (A100 80GB)

MétodoTokens/segvs Fine-tuning Completo
Fine-tuning Completo2.5001x
LoRA3.2001.3x
QLoRA2.1000.84x

Qualidade (benchmark MMLU)

ModeloFine-tuning CompletoLoRAQLoRA
Llama 2-7B45.344.844.1
Llama 2-13B54.854.253.5

Problemas comuns

CUDA OOM durante treinamento

# Solução 1: Habilitar gradient checkpointing
model.gradient_checkpointing_enable()

# Solução 2: Reduzir batch size + aumentar acumulação
TrainingArguments(
    per_device_train_batch_size=1,
    gradient_accumulation_steps=16
)

# Solução 3: Usar QLoRA
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4")

Adapter não está aplicando

# Verificar se adapter está ativo
print(model.active_adapters)  # Deve mostrar nome do adapter

# Verificar parâmetros treináveis
model.print_trainable_parameters()

# Garantir que modelo está em modo treinamento
model.train()

Degradação de qualidade

# Aumentar rank
LoraConfig(r=32, lora_alpha=64)

# Almejar mais módulos
target_modules = "all-linear"

# Usar mais dados de treinamento e épocas
TrainingArguments(num_train_epochs=5)

# Taxa de aprendizado menor
TrainingArguments(learning_rate=1e-4)

Melhores práticas

  1. Comece com r=8-16, aumente se qualidade for insuficiente
  2. Use alpha = 2 * rank como ponto de partida
  3. Almejar camadas de atenção + MLP para melhor qualidade/eficiência
  4. Habilitar gradient checkpointing para economizar memória
  5. Salvar adapters frequentemente (arquivos pequenos, rollback fácil)
  6. Avaliar em dados retidos antes de mesclar
  7. Use QLoRA para modelos 70B+ em hardware consumer

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

이 스킬의 문제 신고