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

# Entrenamiento ORPO

> Optimización de Preferencias por Razón de Probabilidades

# Entrenamiento ORPO

ORPO combina SFT y optimización de preferencias en una sola fase de entrenamiento.

## ¿Qué es ORPO?

ORPO (Odds Ratio Preference Optimization) es una alternativa más simple a DPO que no requiere un modelo de referencia. Optimiza preferencias usando razones de probabilidades directamente, reduciendo el uso de memoria y la complejidad del entrenamiento.

## Inicio 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 requiere `--prompt-text-column` y `--rejected-text-column`. El `--text-column` tiene por defecto `"text"`, así que solo especifícalo si tu columna elegida tiene un nombre 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 de Datos

Igual que DPO - pares de preferencia:

```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 referencia       | No necesario | No necesario con PEFT, requerido para fine-tuning completo |
| Uso de memoria             | Menor        | Mayor (si usa modelo de referencia)                        |
| Velocidad de entrenamiento | Más rápido   | Más lento                                                  |
| Fase SFT                   | Combinada    | Separada                                                   |
| Complejidad                | Más simple   | Más opciones                                               |

## Parámetros

| Parámetro               | Descripción                                               | Por Defecto |
| ----------------------- | --------------------------------------------------------- | ----------- |
| `trainer`               | Establecer como `"orpo"`                                  | Requerido   |
| `dpo_beta`              | Peso de razón de probabilidades                           | `0.1`       |
| `max_completion_length` | Máximo de tokens de la respuesta                          | `None`      |
| `image_column`          | Columna de imagenes para entrenamiento de preferencia VLM | `None`      |

### VLM (Vision-Language) ORPO

ORPO soporta modelos de vision-lenguaje como Qwen 3.5-VL para alineacion de preferencia con imagen+texto. Establece `image_column` para habilitar el 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",
)
```

El dataset debe tener columnas `chosen`/`rejected` con listas de mensajes, y una columna de imagen que contenga las imagenes. La columna de imagen se renombra automaticamente a `images` para compatibilidad con TRL.

## Cuándo Usar ORPO

Elige ORPO cuando:

* La memoria es limitada (no se necesita modelo de referencia)
* Quieres SFT + alineación combinado
* Se prefiere un pipeline de entrenamiento más simple
* Comenzando desde un modelo base (no ajustado para instrucciones)

Elige DPO cuando:

* Necesitas control fino
* Trabajando con modelos ya ajustados para instrucciones
* El comportamiento del modelo de referencia es importante

## Ejemplo: Soporte al 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 Pasos

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

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