Entrenamiento GRPO
Entrena modelos de lenguaje usando Group Relative Policy Optimization (GRPO) con entornos de recompensa personalizados. En lugar de un modelo de recompensa, proporcionas un módulo Python con una clase de entorno que ejecuta episodios multi-turno y retorna puntuaciones.Visión General
GRPO se diferencia de PPO de una manera clave:- PPO requiere un modelo de recompensa pre-entrenado para puntuar respuestas
- GRPO usa un entorno personalizado que tú escribes — genera múltiples completaciones por prompt, las puntúa mediante tu entorno, y optimiza la política relativa al grupo
Inicio Rápido
Python API
Interfaz del Entorno
Implementas una clase Python con 3 métodos:Entorno con Configuración
Pasa configuración JSON a tu entorno mediante--rl-env-config:
**kwargs al constructor de tu entorno:
Requisitos
GRPO usa
GRPOTrainer de TRL (requiere TRL >= 0.28.0). El lado de padding del tokenizador se establece automáticamente a left como requiere GRPO.Parámetros
Parámetros Específicos de GRPO
| Parámetro | Flag CLI | Por Defecto | Descripción |
|---|---|---|---|
rl_env_module | --rl-env-module | None | Ruta del módulo Python para el entorno (requerido) |
rl_env_class | --rl-env-class | None | Nombre de la clase en el módulo del entorno (requerido) |
rl_num_generations | --rl-num-generations | 4 | Número de completaciones por prompt |
use_vllm | --use-vllm | False | Usar vLLM para generación más rápida |
vllm_mode | --vllm-mode | colocate | Modo vLLM: colocate o server |
vllm_gpu_memory_utilization | --vllm-gpu-memory-utilization | 0.3 | Fracción de memoria GPU para vLLM (modo colocate) |
vllm_server_url | --vllm-server-url | None | URL del servidor vLLM externo (modo server) |
vllm_tensor_parallel_size | --vllm-tensor-parallel-size | 1 | GPUs para paralelismo tensorial de vLLM |
vllm_server_gpus | --vllm-server-gpus | 1 | GPUs dedicadas al servidor vLLM (restadas del entrenamiento) |
Parámetros RL Compartidos (PPO + GRPO)
| Parámetro | Flag CLI | Por Defecto | Descripción |
|---|---|---|---|
rl_kl_coef | --rl-kl-coef | 0.1 | Penalización de divergencia KL (beta en GRPOConfig) |
rl_clip_range | --rl-clip-range | 0.2 | Rango de recorte (epsilon en GRPOConfig) |
rl_env_config | --rl-env-config | None | Configuración JSON pasada al constructor del entorno |
rl_max_new_tokens | --rl-max-new-tokens | 128 | Máximo de tokens a generar por completación |
rl_top_k | --rl-top-k | 50 | Muestreo top-k |
rl_top_p | --rl-top-p | 1.0 | Muestreo top-p (núcleo) |
rl_temperature | --rl-temperature | 1.0 | Temperatura de generación |
Aceleración con vLLM
Usa vLLM para generación de completaciones significativamente más rápida durante el entrenamiento GRPO:colocate(predeterminado) — vLLM comparte la GPU con el entrenamiento. Ajusta--vllm-gpu-memory-utilization(predeterminado 0.3) para controlar la división de memoria.server— vLLM se ejecuta en GPUs dedicadas. Los procesos de entrenamiento se reducen automáticamente por--vllm-server-gpus.
vLLM requiere instalación separada:
pip install aitraining[vllm] (requiere vllm>=0.14.0).GRPO no requiere
--data-path — el dataset es construido por el método build_dataset() de tu entorno.Cómo Funciona
- Carga del entorno — Tu módulo se importa vía
importlib.import_module(), la clase se instancia con config opcional - Construcción del dataset —
env.build_dataset(tokenizer)retorna prompts - Modelo genera — GRPO genera
rl_num_generationscompletaciones por prompt - Entorno puntúa —
env.score_episode()se llama para cada completación, retornando 0.0-1.0 - GRPO optimiza — La política se actualiza relativa a las puntuaciones del grupo (mejores completaciones reciben mayor peso)
GRPO vs PPO
| Característica | PPO | GRPO |
|---|---|---|
| Fuente de recompensa | Modelo de recompensa pre-entrenado | Entorno personalizado (tu código) |
| Señal de entrenamiento | Puntuaciones del modelo de recompensa | Puntuaciones de episodios del entorno (0-1) |
| Completaciones por prompt | 1 | Múltiples (rl_num_generations) |
| Ideal para | RLHF general | Entrenamiento agéntico, uso de herramientas, multi-turno |
| Requiere | Ruta del modelo de recompensa | Módulo Python env + clase |
| Versión TRL | >= 0.26.0 | >= 0.28.0 |
Mejores Prácticas
- Comienza con entornos simples — Valida que la puntuación funcione antes de lógica multi-turno compleja
- Usa
rl_num_generationspequeño — Comienza con 4, aumenta si necesitas más diversidad - Puntúa entre 0 y 1 — Usa el rango completo; evita retornar siempre 0 o 1
- Prueba tu entorno independientemente — Asegúrate de que
build_dataset()yscore_episode()funcionen antes de entrenar - Usa LoRA — GRPO con fine-tuning completo requiere memoria significativa; LoRA lo hace práctico
- Tasas de aprendizaje pequeñas — Comienza con 1e-5, misma guía que PPO