nanoRL: мінімалістичний фреймворк на 1800 рядків для RL-навчання великих мовних моделей
nanoRL реалізує асинхронний цикл RL-навчання для LLM у 1800 рядках коду на Python без використання Ray, DeepSpeed чи TRL. Фреймворк підтримує алгоритми REINFORCE, PPO, GRPO та RLOO.

Вплив: Середній
Чому це важливо
Ви можете легко модифікувати та налагоджувати прозорий пайплайн RL-доінструктування LLM без складного фреймворкового оверхеду.
TL;DR
- 01nanoRL зводить складне RL-доінструктування (PPO, GRPO, RLOO) до ~1800 рядків читабельного Python-коду.
- 02Розділення генерації vLLM та навчання PyTorch зменшує розмір синхронізації ваг до ~170 МБ завдяки LoRA.
- 03Перерахунок старих logprobs на тренері є необхідним для запобігання падінню точності через розбіжності ядер.
Ключові факти
- Розмір кодової бази
- ~1800 рядків у 7 файлах Python
- Підтримувані алгоритми
- REINFORCE, PPO (GAE), GRPO, RLOO
- Розмір синхронізації LoRA
- ~170 МБ (проти 16 ГБ повних ваг)
- Залежності
- PyTorch, vLLM, Hugging Face Transformers, PEFT
Архітектура та набір алгоритмів
Усі алгоритми RL у nanoRL зводяться до обчислення значень переваги (advantage) у файлі algos.py. Проєкт складається з 7 файлів, включаючи train.py (цикл і оновлення), model.py (генератор vLLM та обгортка Hugging Face), serve.py (асинхронний транспорт через HTTP stdlib) та tasks.py (промпти та функції винагороди).
Асинхронне розподілене навчання
Робочі ноди взаємодіють із тренером через стандартний HTTP. Ноди генерації запускають vLLM із власнішим розміром батчу, тоді як тренер виконує мікробатчеві оновлення. Синхронізація ваг передає лише параметри адаптерів LoRA (~170 МБ) замість повних чекпоінтів (~16 ГБ), що дозволяє виконати 200 кроків GRPO на 102 тис. послідовностей за 90 хвилин.
Точність логарифмів ймовірностей
Оскільки ядра vLLM обчислюють logprobs інакше, ніж прохід PyTorch Hugging Face, nanoRL перераховує old_logp на тренері під точними вагами вибірки. У бенчмарках використання невідкоригованих logprobs vLLM призводило до дрейфу співвідношення з 1.006 до 1.165 та падіння точності з 50.0% до 18.8%.
Спробуй за 2 хвилини
uv pip install torch gymnasium numpy transformers peft pyyaml vllm
python train.py --task cartpole --algo reinforcebash
✓ Коли використовувати
- Вивчення або прототипування власних алгоритмів RL-доінструктування LLM без оверхеду Ray
- Запуск файн-тюнінгу GRPO/PPO на споживчих або мульти-GPU інстансах з vLLM та LoRA
- Створення власних функцій винагороди для задач математичного чи доменного міркування
✕ Коли НЕ варто
- Масштабні корпоративні навантаження, що вимагають 3D-паралелізму в стилі Megatron або MoE
- Мульти-тенантні кластери із заплутаними дашбордами та диспетчерами завдань
Що зробити сьогодні
- Склонуйте alex000kim/nanoRL для ознайомлення з реалізацією RL у файлах algos.py та tasks.py.
- Запустіть python train.py --task cartpole --algo reinforce локально для перевірки середовища.
- Створіть власні функції винагороди в tasks.py для RL-доінструктування моделей на специфічних даних.
Джерела