Pular para o conteúdo principal

Treinamento ORPO

ORPO combina SFT e otimização de preferências em uma única fase de treinamento.

O que é ORPO?

ORPO (Odds Ratio Preference Optimization) é uma alternativa mais simples ao DPO que não requer um modelo de referência. Ele otimiza preferências usando razões de chances diretamente, reduzindo o uso de memória e a complexidade do treinamento.

Início Rápido

aitraining llm --train \
  --model google/gemma-2-2b \
  --data-path ./preferences.jsonl \
  --project-name gemma-orpo \
  --trainer orpo \
  --prompt-text-column prompt \
  --text-column chosen \
  --rejected-text-column rejected \
  --peft
ORPO requer --prompt-text-column e --rejected-text-column. O --text-column tem padrão "text", então especifique apenas se sua coluna escolhida tiver um nome diferente.

Python API

from autotrain.trainers.clm.params import LLMTrainingParams
from autotrain.project import AutoTrainProject

params = LLMTrainingParams(
    model="google/gemma-2-2b",
    data_path="./preferences.jsonl",
    project_name="gemma-orpo",

    trainer="orpo",
    prompt_text_column="prompt",
    text_column="chosen",
    rejected_text_column="rejected",
    dpo_beta=0.1,  # Default: 0.1
    max_prompt_length=128,  # Default: 128
    max_completion_length=None,  # Default: None

    epochs=3,
    batch_size=2,
    lr=5e-5,

    peft=True,
    lora_r=16,
)

project = AutoTrainProject(params=params, backend="local", process=True)
project.create()

Formato dos Dados

O mesmo que DPO - pares de preferência:
{
  "prompt": "What is AI?",
  "chosen": "AI is artificial intelligence, a field of computer science focused on creating systems that can perform tasks requiring human intelligence.",
  "rejected": "AI is just robots."
}

ORPO vs DPO

AspectoORPODPO
Modelo de referênciaNão necessárioNão necessário com PEFT, obrigatório para fine-tuning completo
Uso de memóriaMenorMaior (se usar modelo de referência)
Velocidade de treinamentoMais rápidoMais lento
Fase SFTCombinadaSeparada
ComplexidadeMais simplesMais opções

Parâmetros

ParâmetroDescriçãoPadrão
trainerDefinir como "orpo"Obrigatório
dpo_betaPeso da razão de chances0.1
max_prompt_lengthMáximo de tokens do prompt128
max_completion_lengthMáximo de tokens da respostaNone

Quando Usar ORPO

Escolha ORPO quando:
  • Memória é limitada (nenhum modelo de referência necessário)
  • Você quer SFT + alinhamento combinado
  • Pipeline de treinamento mais simples é preferido
  • Começando de um modelo base (não ajustado para instruções)
Escolha DPO quando:
  • Você precisa de controle fino
  • Trabalhando com modelos já ajustados para instruções
  • Comportamento do modelo de referência é importante

Exemplo: Suporte ao Cliente

params = LLMTrainingParams(
    model="google/gemma-2-2b",
    data_path="./support_preferences.jsonl",
    project_name="support-bot",

    trainer="orpo",
    dpo_beta=0.15,

    epochs=3,
    batch_size=2,
    gradient_accumulation=4,
    lr=2e-5,

    peft=True,
    lora_r=32,
    lora_alpha=64,

    log="wandb",
)

Próximos Passos