本文へ移動
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.

インストール方法を見る

含まれるファイル(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

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

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 のスキルをすべて見る

このスキルの問題を報告する