Перейти к основному содержимому

SimPO-обучение

Простая оптимизация предпочтений для выравнивания LLM. Бесреференсная альтернатива DPO с лучшей производительностью (+6,4 балла на AlpacaEval 2.0). Не требует эталонной модели, эффективнее DPO. Используйте для выравнивания предпочтений, когда нужно более простое и быстрое обучение, чем DPO/PPO.

Метаданные навыка​

ИсточникОпционально — установка через vibeos skills install official/mlops/simpo
Путьoptional-skills/mlops/simpo
Версия1.0.0
АвторOrchestra Research
ЛицензияMIT
Зависимостиtorch, transformers, datasets, trl, accelerate
Платформыlinux, macos, windows
ТегиPost-Training, SimPO, Preference Optimization, Alignment, DPO Alternative, Reference-Free, LLM Alignment, Efficient Training

Справочник: полный SKILL.md​

к сведению

Ниже приведено полное описание навыка, которое VibeOS загружает при его активации. Это то, что агент видит в качестве инструкций, когда навык активен.

SimPO — простая оптимизация предпочтений

Быстрый старт​

SimPO — это бесреференсный метод оптимизации предпочтений, который превосходит DPO без необходимости в эталонной модели.

Установка:

# Создание окружения
conda create -n simpo python=3.10 && conda activate simpo

# Установка PyTorch 2.2.2
# Перейдите по ссылке: https://pytorch.org/get-started/locally/

# Установка alignment-handbook
git clone https://github.com/huggingface/alignment-handbook.git
cd alignment-handbook
python -m pip 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_name_or_path: mistralai/Mistral-7B-v0.1
torch_dtype: bfloat16

# Набор данных
dataset_mixer:
HuggingFaceH4/ultrafeedback_binarized: 1.0
dataset_splits:
- train_prefs
- test_prefs

# Гиперпараметры SimPO
beta: 2.0 # Масштабирование вознаграждения (2.0-10.0)
gamma_beta_ratio: 0.5 # Целевой отступ (0-1)
loss_type: sigmoid # sigmoid или hinge
sft_weight: 0.0 # Опциональная SFT-регуляризация

# Обучение
learning_rate: 5e-7 # Критично: 3e-7 до 1e-6
num_train_epochs: 1
per_device_train_batch_size: 1
gradient_accumulation_steps: 8

# Вывод
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: Донастройка instruct-модели (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 # Добавление SFT-потерь для сохранения возможностей

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 # Выше для более сильного сигнала
gamma_beta_ratio: 0.7 # Больший отступ
learning_rate: 3e-7 # Более низкая скорость обучения для рассуждений
sft_weight: 0.0

num_train_epochs: 1
per_device_train_batch_size: 1
gradient_accumulation_steps: 16

Когда использовать вместо альтернатив​

Используйте SimPO, когда:

  • Нужно более простое обучение, чем DPO (без эталонной модели)
  • Есть данные о предпочтениях (пары выбранный/отклонённый)
  • Нужна лучшая производительность, чем у DPO
  • Ограниченные вычислительные ресурсы
  • Достаточно обучения на одном узле

Выбор алгоритма:

  • SimPO: Самый простой, лучшая производительность, без эталонной модели
  • DPO: Нужна эталонная модель для базового сравнения, более консервативный
  • PPO: Максимальный контроль, нужна модель вознаграждения, сложная настройка
  • GRPO: Энергоэффективное RL, без критика

Используйте альтернативы, если:

  • OpenRLHF: Многоузловое распределённое обучение, PPO/GRPO
  • TRL: Нужно несколько методов в одном фреймворке
  • DPO: Устоявшееся базовое сравнение

Частые проблемы​

Проблема: Расходимость потерь

Уменьшите скорость обучения:

learning_rate: 3e-7  # Уменьшить с 5e-7

Уменьшите beta:

beta: 1.0  # Уменьшить с 2.0

Проблема: Модель забывает возможности

Добавьте SFT-регуляризацию:

sft_weight: 0.1  # Добавить компонент SFT-потерь

Проблема: Плохое разделение предпочтений

Увеличьте beta и отступ:

beta: 5.0            # Увеличить с 2.0
gamma_beta_ratio: 0.8 # Увеличить с 0.5

Проблема: OOM во время обучения

Уменьшите размер батча:

per_device_train_batch_size: 1
gradient_accumulation_steps: 16 # Сохранить эффективный батч

Включите градиентную контрольную точку:

gradient_checkpointing: true

Продвинутые темы​

Функции потерь: См. references/loss-functions.md для сравнения sigmoid и hinge потерь, математических формулировок и случаев использования каждой.

Настройка гиперпараметров: См. references/hyperparameters.md для руководства по выбору beta, gamma, скорости обучения и рекомендаций, специфичных для размера модели.

Подготовка набора данных: См. references/datasets.md для форматов данных предпочтений, фильтрации качества и создания пользовательских наборов данных.

Требования к оборудованию​

  • GPU: Рекомендуется NVIDIA A100/H100
  • VRAM:
    • Модель 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

Ресурсы​