跳转到主要内容

PPO 训练

使用近端策略优化(PPO)训练语言模型,用于人类反馈强化学习(RLHF)。

概述

PPO 训练是一个 2 步过程:
  1. 训练奖励模型 - 训练一个模型来评分响应(参见 Reward Modeling
  2. 运行 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

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()

要求

PPO 训练需要 --rl-reward-model-path(已训练奖励模型的路径)或 --model-ref(用于 KL 散度的参考模型)。至少必须指定一个。

参数

核心 PPO 参数

参数CLI 标志默认值描述
rl_reward_model_path--rl-reward-model-pathNone奖励模型路径(必需)
rl_gamma--rl-gamma0.99折扣因子(0.9-0.99)
rl_gae_lambda--rl-gae-lambda0.95GAE lambda 用于优势估计(0.9-0.99)
rl_kl_coef--rl-kl-coef0.1KL 散度系数(0.01-0.5)
rl_value_loss_coef--rl-value-loss-coef1.0价值损失系数(0.5-2.0)
rl_clip_range--rl-clip-range0.2PPO 裁剪范围(0.1-0.3)
rl_value_clip_range--rl-value-clip-range0.2价值函数裁剪范围

训练参数

参数CLI 标志默认值描述
rl_num_ppo_epochs--rl-num-ppo-epochs4每个 batch 的 PPO 轮次
rl_chunk_size--rl-chunk-size128训练块大小
rl_mini_batch_size--rl-mini-batch-size8小批量大小
rl_optimize_device_cache--rl-optimize-device-cacheTrue内存优化

生成参数

参数CLI 标志默认值描述
rl_max_new_tokens--rl-max-new-tokens128最大生成 token 数
rl_top_k--rl-top-k50Top-k 采样
rl_top_p--rl-top-p1.0Top-p(核)采样
rl_temperature--rl-temperature1.0生成温度

高级参数

参数CLI 标志默认值描述
rl_reward_fn--rl-reward-fnNone奖励函数:defaultlength_penaltycorrectnesscustom
rl_multi_objective--rl-multi-objectiveFalse启用多目标奖励
rl_reward_weights--rl-reward-weightsNone多目标 JSON 权重
rl_env_type--rl-env-typeNoneRL 环境类型
rl_env_config--rl-env-configNoneJSON 环境配置

数据格式

PPO 训练仅使用提示词(模型生成响应):
{"text": "What is machine learning?"}
{"text": "Explain quantum computing."}
{"text": "Write a haiku about coding."}

RL 环境类型

提供三种环境类型:
环境描述
text_generation带奖励评分的标准文本生成
multi_objective多个奖励组件组合
preference_comparison比较生成的响应

多目标奖励

启用多个奖励信号:
params = LLMTrainingParams(
    ...
    trainer="ppo",
    rl_multi_objective=True,
    rl_env_type="multi_objective",
    rl_reward_weights='{"correctness": 1.0, "formatting": 0.1}',
)

示例:完整 RLHF 流程

步骤 1:训练奖励模型

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

步骤 2:运行 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

最佳实践

  1. 从好的基础模型开始 - 在 PPO 之前使用 SFT 进行微调
  2. 使用训练良好的奖励模型 - 奖励质量决定 PPO 成功
  3. 监控 KL 散度 - 过高意味着模型偏离原始模型太多
  4. 从默认超参数开始 - 根据训练动态调整
  5. 使用小学习率 - PPO 对学习率敏感(1e-5 到 5e-6)

下一步