Saltar al contenido principal

Entrenamiento PPO

Entrena modelos de lenguaje usando Proximal Policy Optimization (PPO) para aprendizaje por refuerzo con retroalimentación humana (RLHF).
También disponible: RL explicado en Portugués

Visión General

El entrenamiento PPO es un proceso de 2 pasos:
  1. Entrenar un Modelo de Recompensa - Entrena un modelo para puntuar respuestas (ver Reward Modeling)
  2. Ejecutar Entrenamiento PPO - Usa el modelo de recompensa para guiar la optimización de la política

Inicio Rápido

aitraining llm --train \
  --model google/gemma-3-270m \
  --data-path ./prompts.jsonl \
  --project-name ppo-model \
  --trainer ppo \
  --rl-reward-model-path ./reward-model

Python API

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

params = LLMTrainingParams(
    model="google/gemma-3-270m",
    data_path="./prompts.jsonl",
    project_name="ppo-model",

    trainer="ppo",
    rl_reward_model_path="./reward-model",

    # PPO hyperparameters
    rl_gamma=0.99,
    rl_gae_lambda=0.95,
    rl_kl_coef=0.1,
    rl_clip_range=0.2,
    rl_num_ppo_epochs=4,

    epochs=1,
    batch_size=4,
    lr=1e-5,
)

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

Requisitos

El entrenamiento PPO requiere --rl-reward-model-path (ruta a un modelo de recompensa entrenado) o --model-ref (modelo de referencia para divergencia KL). Al menos uno debe ser especificado.

Parámetros

Parámetros Principales de PPO

ParámetroFlag CLIPor DefectoDescripción
rl_reward_model_path--rl-reward-model-pathNoneRuta al modelo de recompensa (requerido)
rl_gamma--rl-gamma0.99Factor de descuento (0.9-0.99)
rl_gae_lambda--rl-gae-lambda0.95Lambda GAE para estimación de ventaja (0.9-0.99)
rl_kl_coef--rl-kl-coef0.1Coeficiente de divergencia KL (0.01-0.5)
rl_value_loss_coef--rl-value-loss-coef1.0Coeficiente de pérdida de valor (0.5-2.0)
rl_clip_range--rl-clip-range0.2Rango de recorte PPO (0.1-0.3)
rl_value_clip_range--rl-value-clip-range0.2Rango de recorte de función de valor

Parámetros de Entrenamiento

ParámetroFlag CLIPor DefectoDescripción
rl_num_ppo_epochs--rl-num-ppo-epochs4Épocas PPO por batch
rl_chunk_size--rl-chunk-size128Tamaño de chunk de entrenamiento
rl_mini_batch_size--rl-mini-batch-size8Tamaño de mini-batch
rl_optimize_device_cache--rl-optimize-device-cacheTrueOptimización de memoria

Parámetros de Generación

ParámetroFlag CLIPor DefectoDescripción
rl_max_new_tokens--rl-max-new-tokens128Máximo de tokens a generar
rl_top_k--rl-top-k50Muestreo top-k
rl_top_p--rl-top-p1.0Muestreo top-p (núcleo)
rl_temperature--rl-temperature1.0Temperatura de generación

Parámetros Avanzados

ParámetroFlag CLIPor DefectoDescripción
rl_reward_fn--rl-reward-fnNoneFunción de recompensa: default, length_penalty, correctness, custom
rl_multi_objective--rl-multi-objectiveFalseHabilitar recompensas multi-objetivo
rl_reward_weights--rl-reward-weightsNonePesos JSON para multi-objetivo
rl_env_type--rl-env-typeNoneTipo de entorno RL
rl_env_config--rl-env-configNoneConfiguración JSON del entorno

Formato de Datos

El entrenamiento PPO usa solo prompts (el modelo genera respuestas):
{"text": "What is machine learning?"}
{"text": "Explain quantum computing."}
{"text": "Write a haiku about coding."}

Tipos de Entorno RL

Tres tipos de entorno están disponibles:
EntornoDescripción
text_generationGeneración de texto estándar con puntuación de recompensa
multi_objectiveMúltiples componentes de recompensa combinados
preference_comparisonComparar respuestas generadas

Recompensas Multi-Objetivo

Habilitar múltiples señales de recompensa:
params = LLMTrainingParams(
    ...
    trainer="ppo",
    rl_multi_objective=True,
    rl_env_type="multi_objective",
    rl_reward_weights='{"correctness": 1.0, "formatting": 0.1}',
)

Ejemplo: Pipeline RLHF Completo

Paso 1: Entrenar Modelo de Recompensa

aitraining llm --train \
  --model google/gemma-3-270m \
  --data-path ./preferences.jsonl \
  --project-name reward-model \
  --trainer reward \
  --prompt-text-column prompt \
  --text-column chosen \
  --rejected-text-column rejected

Paso 2: Ejecutar Entrenamiento PPO

aitraining llm --train \
  --model google/gemma-3-270m \
  --data-path ./prompts.jsonl \
  --project-name ppo-model \
  --trainer ppo \
  --rl-reward-model-path ./reward-model \
  --rl-kl-coef 0.1 \
  --rl-clip-range 0.2

Mejores Prácticas

  1. Comienza con un buen modelo base - Haz fine-tuning con SFT antes de PPO
  2. Usa un modelo de recompensa bien entrenado - La calidad de las recompensas determina el éxito de PPO
  3. Monitorea la divergencia KL - Demasiado alta significa que el modelo está divergiendo demasiado del original
  4. Comienza con hiperparámetros por defecto - Ajusta según la dinámica del entrenamiento
  5. Usa tasas de aprendizaje pequeñas - PPO es sensible a la tasa de aprendizaje (1e-5 a 5e-6)

Próximos Pasos