> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monostate.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Treinamento ORPO

> Otimização de Preferências por Razão de Chances

# 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

```bash theme={null}
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
```

<Warning>
  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.
</Warning>

## Python API

```python theme={null}
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_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:

```json theme={null}
{
  "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

| Aspecto                   | ORPO           | DPO                                                            |
| ------------------------- | -------------- | -------------------------------------------------------------- |
| Modelo de referência      | Não necessário | Não necessário com PEFT, obrigatório para fine-tuning completo |
| Uso de memória            | Menor          | Maior (se usar modelo de referência)                           |
| Velocidade de treinamento | Mais rápido    | Mais lento                                                     |
| Fase SFT                  | Combinada      | Separada                                                       |
| Complexidade              | Mais simples   | Mais opções                                                    |

## Parâmetros

| Parâmetro               | Descrição                                             | Padrão      |
| ----------------------- | ----------------------------------------------------- | ----------- |
| `trainer`               | Definir como `"orpo"`                                 | Obrigatório |
| `dpo_beta`              | Peso da razão de chances                              | `0.1`       |
| `max_completion_length` | Máximo de tokens da resposta                          | `None`      |
| `image_column`          | Coluna de imagens para treinamento de preferencia VLM | `None`      |

### VLM (Vision-Language) ORPO

ORPO suporta modelos de visao-linguagem como Qwen 3.5-VL para alinhamento de preferencia com imagem+texto. Defina `image_column` para habilitar o modo VLM:

```python theme={null}
params = LLMTrainingParams(
    model="Qwen/Qwen3.5-VL-9B",
    trainer="orpo",
    image_column="images",
    text_column="chosen",
    rejected_text_column="rejected",
    prompt_text_column="prompt",
)
```

O dataset deve ter colunas `chosen`/`rejected` com listas de mensagens, e uma coluna de imagem contendo as imagens. A coluna de imagem e automaticamente renomeada para `images` para compatibilidade com TRL.

## 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

```python theme={null}
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

<CardGroup cols={2}>
  <Card title="DPO Training" href="/advanced/dpo-training">
    Método alternativo de alinhamento
  </Card>

  <Card title="Reward Modeling" href="/advanced/reward-modeling">
    Treinar modelos de recompensa
  </Card>
</CardGroup>
