mcpField
S
simpo-training

simpo-training

github.com/kalarislabs开发9054 次安装3 天前更新
代码仓库

关于 simpo-training

SimPO 是一种无需参考模型的偏好优化训练方法,适用于使用成对偏好数据微调语言模型的研究者和工程师。该技能提供训练配置与流程,涵盖模型微调、推理任务和常见问题处理。

主要功能

  1. 01无需参考模型的偏好优化
  2. 02使用 chosen/rejected 偏好对
  3. 03通过配置运行训练
  4. 04支持 SFT 正则化
  5. 05梯度检查点等显存优化

适用场景

  1. 01基于偏好数据微调基础模型
  2. 02对指令模型进行偏好训练
  3. 03为数学或代码任务配置训练
  4. 04通过梯度累积缓解显存不足

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill simpo-training

安装后在 Claude Code 中输入/simpo-training确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
datasets.md
hyperparameters.md
loss-functions.md

详细介绍

SimPO - 简单偏好优化

快速开始

SimPO 是一种无需参考模型的无参考偏好优化方法,性能优于 DPO。

安装:

# Create environment
conda create -n simpo python=3.10 && conda activate simpo

# Install PyTorch 2.2.2
# Visit: https://pytorch.org/get-started/locally/

# Install alignment-handbook
git clone https://github.com/huggingface/alignment-handbook.git
cd alignment-handbook
python -m pip install .

# Install Flash Attention 2
python -m pip install flash-attn --no-build-isolation

训练(Mistral 7B):

ACCELERATE_LOG_LEVEL=info accelerate launch \
  --config_file accelerate_configs/deepspeed_zero3.yaml \
  scripts/run_simpo.py \
  training_configs/mistral-7b-base-simpo.yaml

常见工作流

工作流 1:从基础模型开始训练(Mistral 7B)

配置(mistral-7b-base-simpo.yaml):

# Model
model_name_or_path: mistralai/Mistral-7B-v0.1
torch_dtype: bfloat16

# Dataset
dataset_mixer:
  HuggingFaceH4/ultrafeedback_binarized: 1.0
dataset_splits:
  - train_prefs
  - test_prefs

# SimPO hyperparameters
beta: 2.0                  # Reward scaling (2.0-10.0)
gamma_beta_ratio: 0.5       # Target margin (0-1)
loss_type: sigmoid          # sigmoid or hinge
sft_weight: 0.0             # Optional SFT regularization

# Training
learning_rate: 5e-7         # Critical: 3e-7 to 1e-6
num_train_epochs: 1
per_device_train_batch_size: 1
gradient_accumulation_steps: 8

# Output
output_dir: ./outputs/mistral-7b-simpo

启动训练:

accelerate launch --config_file accelerate_configs/deepspeed_zero3.yaml \
  scripts/run_simpo.py training_configs/mistral-7b-base-simpo.yaml
工作流 2:微调指令模型(Llama 3 8B)

配置(llama3-8b-instruct-simpo.yaml):

model_name_or_path: meta-llama/Meta-Llama-3-8B-Instruct

dataset_mixer:
  argilla/ultrafeedback-binarized-preferences-cleaned: 1.0

beta: 2.5
gamma_beta_ratio: 0.5
learning_rate: 5e-7
sft_weight: 0.1             # Add SFT loss to preserve capabilities

num_train_epochs: 1
per_device_train_batch_size: 2
gradient_accumulation_steps: 4
output_dir: ./outputs/llama3-8b-simpo

启动:

accelerate launch --config_file accelerate_configs/deepspeed_zero3.yaml \
  scripts/run_simpo.py training_configs/llama3-8b-instruct-simpo.yaml
工作流 3:推理密集型任务(较低学习率)

用于数学/代码任务:

model_name_or_path: deepseek-ai/deepseek-math-7b-base

dataset_mixer:
  argilla/distilabel-math-preference-dpo: 1.0

beta: 5.0                   # Higher for stronger signal
gamma_beta_ratio: 0.7       # Larger margin
learning_rate: 3e-7         # Lower LR for reasoning
sft_weight: 0.0

num_train_epochs: 1
per_device_train_batch_size: 1
gradient_accumulation_steps: 16

何时使用 SimPO,而非其他方案

适合使用 SimPO 的情况:

  • 希望训练比 DPO 更简单(无需参考模型)
  • 拥有偏好数据(chosen/rejected 对)
  • 需要比 DPO 更好的性能
  • 计算资源有限
  • 单节点训练即可满足需求

算法选择:

  • SimPO:最简单、性能最佳,无需参考模型
  • DPO:需要参考模型作为基线,更保守
  • PPO:控制力最强,需要奖励模型,配置复杂
  • GRPO:内存高效的强化学习,无需评论家模型

改用其他方案的情况:

  • OpenRLHF:多节点分布式训练、PPO/GRPO
  • TRL:需要在一个框架中使用多种方法
  • DPO:用于与成熟基线进行比较

常见问题

问题:损失发散

降低学习率:

learning_rate: 3e-7  # Reduce from 5e-7

降低 beta:

beta: 1.0  # Reduce from 2.0

问题:模型遗忘已有能力

添加 SFT 正则化:

sft_weight: 0.1  # Add SFT loss component

问题:偏好区分度较差

提高 beta 和 margin:

beta: 5.0            # Increase from 2.0
gamma_beta_ratio: 0.8  # Increase from 0.5

问题:训练期间发生 OOM

减小批次大小:

per_device_train_batch_size: 1
gradient_accumulation_steps: 16  # Maintain effective batch

启用梯度检查点:

gradient_checkpointing: true

高级主题

损失函数:请参阅 references/loss-functions.md,了解 sigmoid 与 hinge 损失、数学公式以及各自的适用场景。

超参数调优:请参阅 references/hyperparameters.md,了解 beta、gamma、学习率选择指南以及针对不同模型规模的建议。

数据集准备:请参阅 references/datasets.md,了解偏好数据格式、质量筛选和自定义数据集创建。

硬件要求

  • GPU:推荐使用 NVIDIA A100/H100
  • 显存:
    • 7B 模型:1× A100 40GB(DeepSpeed ZeRO-3)
    • 8B 模型:2× A100 40GB
    • 70B 模型:8× A100 80GB
  • 单节点:DeepSpeed ZeRO-3 即可满足需求
  • 混合精度:推荐使用 BF16

内存优化:

  • DeepSpeed ZeRO-3(默认配置)
  • 梯度检查点
  • Flash Attention 2

资源

Agent 操作流程

  1. 检查环境。 检查 GPU 类型、内存、驱动/CUDA 版本(nvidia-smi)、框架版本,以及数据集的位置和大小。
  2. 确认输入。 根据数据或用户提供的信息确认格式、标识符和参数。任何会影响结果的值都应询问,不要猜测。
  3. 先运行小规模版本。 执行冒烟测试:使用小型模型或子集、较少的步数,并确认损失下降且检查点已保存。
  4. 按照上述说明和参考资料执行完整任务。
  5. 验证结果。 跟踪留出数据上的指标,与基线进行比较,并记录随机种子、配置和硬件。
  6. 报告。 说明运行了什么(版本、命令、参数)、检查了什么,以及还有哪些不确定之处。
如果发生这种情况执行此操作
CUDA 显存不足减小批次大小,启用梯度累积/检查点或混合精度,或者对模型进行分片。
损失为 NaN 或发散降低学习率,检查数据是否包含无效值,并启用梯度裁剪。
这些说明中的函数、标志或端点在已安装版本中不存在查阅已安装版本自己的文档(help()、--help、官方文档),据此调整,并告知用户。切勿编造 API。
必需的输入、标识符或参数含糊不清询问用户,或在运行前明确说明所采用的假设。

完整性规则

  • 切勿捏造结果、参数、标识符、引文或统计数据。如果无法运行或验证某项内容,请明确说明。
  • 没有日志时,切勿声称取得了训练结果;启动大型任务前应估算计算成本。
  • 此处与特定版本相关的细节可能已过时:请对照已安装版本的官方文档进行确认。
  • 对于需要花费资金、占用共享 GPU 或云配额、涉及个人或患者数据,或无法撤销的操作,请先征求同意。

相关技能

  • fine-tuning-with-trl:使用 TRL 通过强化学习微调大模型——用于指令微调的 SFT、用于偏好对齐的 DPO、用于奖励优化的 PPO/GRPO…
  • openrlhf-training:通过 Ray+vLLM 加速的高性能 RLHF 框架。
  • axolotl:提供使用 Axolotl 微调大语言模型的指导,涵盖 YAML 训练配置、LoRA 和 QLoRA、偏好训练等…

评论

支持 Markdown