Autor: Теридакс Макута
Period: Март — Май 2026
Topic: Fine-tuning open-source LLM (1.5B–3B params) через Reinforcement Learning на задаче классификации поведенческих паттернов в тексте. Сравнение PPO vs GRPO vs модификации (DAPO, λ-GRPO).
Данные → Препроцессинг → Base LLM (Qwen-2.5-1.5B) → RL-обучение → Reward Function → Оценка
research_work_by_a_student/
├── configs/ # YAML конфиги обучения
│ ├── grpo_config.yaml
│ └── ppo_config.yaml
├── notebooks/ # Jupyter/Colab ноутбуки
│ ├── 01_baseline.ipynb
│ ├── 02_grpo_training.ipynb
│ ├── 03_ppo_training.ipynb
│ ├── 04_evaluation.ipynb
│ └── colab_diploma_experiments.ipynb
├── scripts/ # Скрипты запуска
│ ├── run_full_pipeline.py
│ └── run_evaluation.py
├── src/
│ ├── data/ # Данные и препроцессинг
│ │ ├── dataset_loader.py
│ │ ├── preprocessor.py
│ │ └── data_utils.py
│ ├── models/ # Загрузка и eval базовой модели
│ │ ├── model_loader.py
│ │ └── baseline_eval.py
│ ├── rewards/ # Reward functions (RF1, RF2, RF3)
│ │ ├── __init__.py
│ │ ├── reward_accuracy.py
│ │ ├── reward_reasoning.py
│ │ ├── reward_binary.py
│ │ ├── reward_entropy.py
│ │ └── reward_lambda_grpo.py
│ ├── training/ # Тренеры PPO / GRPO / DAPO
│ │ ├── grpo_trainer.py
│ │ ├── ppo_trainer.py
│ │ └── dapo_trainer.py
│ ├── evaluation/ # Метрики и анализ ошибок
│ │ ├── evaluator.py
│ │ └── error_analysis.py
│ └── visualization/ # Графики для диплома
│ └── plots.py
├── .env.example
├── requirements.txt
└── README.md
pip install unsloth transformers trl datasets accelerate peft
pip install wandb bitsandbytes sentencepiece evaluate scikit-learn
pip install plotly kaleidocp .env.example .env
# Заполнить HF_TOKEN и WANDB_API_KEYimport torch
print(torch.cuda.is_available())
print(torch.cuda.get_device_name(0))python scripts/run_full_pipeline.py --mode baselinepython scripts/run_full_pipeline.py --mode grpo --reward reasoningpython scripts/run_full_pipeline.py --mode ppopython scripts/run_evaluation.py --checkpoint ./grpo_outputДля стабильного запуска в Colab используй ноутбук:
notebooks/colab_diploma_experiments.ipynb
Он включает:
- устойчивую установку зависимостей (с fix
blinker) - автоматическое обновление ветки
develop - запуск EXP-01..EXP-07 по порядку
- полное логирование, сохранение данных и построение графиков
В проект добавлен pyproject.toml с dependency-группами под разные сценарии запуска.
Быстрая настройка:
scripts/setup_uv_env.shЭто создаст .venv и установит группу local по умолчанию.
Дополнительно:
scripts/setup_uv_env.sh local colab
scripts/setup_uv_env.sh local cuda
scripts/setup_uv_env.sh --helpПримечание:
- группа
cudaнужна для Linux/CUDA-окружений (Colab GPU), для macOS обычно не подходит.
Для долгого прогона в фоне используй:
scripts/macos_nightly_runner.sh start baselineПроверка/остановка:
scripts/macos_nightly_runner.sh status
scripts/macos_nightly_runner.sh stopВажно:
- Скрипт использует
caffeinate -is, поэтому при погашенном экране процесс продолжает работать. - При закрытии крышки Mac обычно уходит в сон, и вычисления останавливаются (кроме clamshell-режима: питание + внешний дисплей + внешняя клавиатура/мышь).
- Полный цикл EXP-01..EXP-07 на M1 MacBook Pro в 7 часов обычно не укладывается и может падать из-за CUDA-ориентированных зависимостей. Для надёжности используй Colab notebook.
| RF | Описание | Диапазон | Когда использовать |
|---|---|---|---|
RF1 accuracy |
Бинарная: правильно/нет | {0.0, 1.0} |
Простой baseline |
RF2 reasoning |
RF1 + бонус за наличие раздела "Анализ:" | {0.0, 1.2} |
Основной эксперимент |
RF3 binary |
0 / -0.5 / -1.0 (штрафы за отказ и ошибку) | {-1.0, 0.0} |
DeepSeek-R1 стиль |
RF4 entropy |
RF1 + энтропийный бонус токенов | [0.0, 1.1] |
λ-GRPO / DAPO |
RF5 lambda_grpo |
RF1 × нормированная длина ответа | [0.0, 1.0] |
λ-GRPO |
| Метод | Описание | GPU RAM (4-bit LoRA) |
|---|---|---|
| Baseline | Нет RL, только инференс | ~4 GB |
| GRPO | Group Relative Policy Optimization | ~8–10 GB |
| PPO | Proximal Policy Optimization + critic | ~14–16 GB |
| DAPO | GRPO + entropy bonus | ~8–10 GB |
| λ-GRPO | GRPO + length-weighted reward | ~8–10 GB |
| Метод | Reward Fn | F1-score | Время (ч) | GPU RAM | Стабильность |
|---|---|---|---|---|---|
| Baseline | — | — | — | — | — |
| GRPO | RF2 | — | — | — | — |
| PPO | RF2 | — | — | — | — |
| DAPO | RF4 | — | — | — | — |
| λ-GRPO | RF5 | — | — | — | — |
- DeepSeek-R1: https://arxiv.org/abs/2501.12948
- TRL Docs: https://huggingface.co/docs/trl
- Unsloth GRPO: https://unsloth.ai/blog/grpo
- PPO (Schulman et al., 2017): https://arxiv.org/abs/1707.06347
- DAPO: https://arxiv.org/abs/2503.14476