RL-обучение
Hermes Agent включает в себя встроенный конвейер для обучения с креплением (RL), построенный на Tinker-Atropos. Это позволяет обучать языковые модели задачам, специфичным для конкретной среды, с использованием GRPO (оптимизация групповой относительной политики) и LoRA-адаптеров, полностью управляемых через инструментальный интерфейс агента.
Обзор
Система RL-обучения состоит из трех компонентов:
- Atropos — траектории API сервера, который координирует взаимодействие в соответствии с требованиями, развертывание руководства по протоколу и вычисление преимуществ
- Tinker — Сервис обучения, который обрабатывает весовые модели, LoRA-обучение, сэмплирование/выводы и шаги оптимизатора
- Среды — Классы Python, определяющие задачи, оценки и функции вознаграждения (например, математические задачи GSM8K).
Агент может находить среду, настраивать параметры обучения, запускать сеансы обучения и отслеживать метрики — всё с помощью набора инструментов rl_*.
Требования
Для RL-обучения требуется:
- Python >= 3.11 (требование пакета Tinker)
- TINKER_API_KEY — API-ключ для сервиса обучения Tinker
- WANDB_API_KEY — API-ключ для идентификации метрики [Вес и предвзятость] (https://wandb.ai/)
- Подмодуль
tinker-atropos(находится вtinker-atropos/относительно приближающегося Гермеса)
# Установка API-ключей
hermes config set TINKER_API_KEY ваш-tinker-ключ
hermes config set WANDB_API_KEY ваш-wandb-ключ
Когда оба переключателя доступны и доступны Python >= 3.11, автоматически активируется набор инструментов rl.
Доступные инструменты
| Инструмент | Описание |
|---|---|
rl_list_environments |
Обнаружение доступных RL-сред |
rl_select_environment |
Выбор условий и загрузка ее конфигурации |
rl_get_current_config |
Просмотр настраиваемых и заблокированных полей |
rl_edit_config |
Изменение настраиваемых параметров обучения |
rl_start_training |
Запуск сеанса обучения (запускает 3 процесса) |
rl_check_status |
Мониторинг прогресса обучения и метрики WandB |
rl_stop_training |
Остановка выполнения задания обучения |
rl_get_results |
Получение итоговых метрик и пути к весовым моделям |
rl_list_runs |
Список всех активных и завершенных запусков |
rl_test_inference |
Быстрый тестовый вывод с использованием OpenRouter |
Рабочий процесс
1. Обнаружение сред
Вывести список доступных RL-сред
Агент выдает rl_list_environments(), который сканирует tinker-atropos/tinker_atropos/environments/ с помощью AST-парсинга для определения классов Python, следующих BaseEnv. Каждая окружающая среда определяет:
- Загрузка датасета — откуда берутся рабочие данные (например, датасеты HuggingFace)
- Построение промпта — как форматировать элементы для модели.
- Оценку/верификацию — как оценить модели данных выходного дня и назначить вознаграждение
2. Выбор и настройка
Выбрать среду GSM8K и показать конфигурацию
Агент выдает rl_select_environment("gsm8k_tinker"), затем rl_get_current_config() для просмотра всех параметров.
Положение повышения на две категории:
Настраиваемые поля (возможно изменение):
- group_size — Количество завершений по одному элементу (по умолчанию: 16)
- batch_size — Размер пакета обучения (по умолчанию: 128)
- wandb_name — Имя запуска в WandB (автоматически настраивается как {env}-{timestamp})
- Другие параметры, специфичные для окружающей среды
Заблокированные поля (инфраструктурные настройки нельзя изменять):
- tokenizer_name — модели токенизатора (например, Qwen/Qwen3-8B)
- rollout_server_url — URL API Atropos (http://localhost:8000)
- max_token_length — максимальная длина токенов (8192)
- max_num_workers — Максимальное параллельное количество воркеров (2048)
- total_steps — Общее количество шагов обучения (2500)
- lora_rank — Ранг LoRA-адаптера (32)
- learning_rate — Скорость обучения (4e-5)
- max_token_trainer_length — Максимальное количество токенов для тренера (9000)
3. Запуск обучения
Запустить сеанс обучения
Агент вызывает rl_start_training(), который:
- Генерирует YAML-файл конфигурации, объединяющий заблокированные настройки с настраиваемыми переопределениями.
- Создает уникальный идентификатор запуска.
- Запускает три процесса:
- Сервер API Atropos (
run-api) — координация траекторий - Тренер Tinker (
launch_training.py) — LoRA-обучение + сервер инференса FastAPI на порту 8001 - Среда (
environment.py Serve) — выбранная среда, подключающаяся к Атропосу.
Процессы выполнения с задержками (5 секунд для API, 30 секунд для тренера, еще 90 секунд для среды), чтобы обеспечить надлежащий порядок инициации.
4. Мониторинг прогресса
Проверить статус запуска abc12345
Агент предоставляет rl_check_status(run_id), который сообщает:
- Статус процессов (запущен/завершен для каждого из 3 процессов)
- Время работы
- Метрики WandB (шаг, среднее вознаграждение, процент ошибочных ответов, точность оценки)
- Расположение файлов журналов для отладок
📝 Note
Ограничение частоты запроса Проверки последствий ограничены одним разом 30 минут для каждого запуска удостоверения личности. Это собственный резервный опрос во время длительных учебных занятий, которые проводятся часами.
5. Остановка или получение результатов
Остановить сеанс обучения
# или
Получить итоговые результаты для запуска abc12345
rl_stop_training() завершает все три процесса в обратном порядке (среда → тренер → API). rl_get_results() извлекает итоговые метрики WandB и историю обучения.
Тестирование выводов
Прежде чем приступить к полноценному обучению, вы можете проверить, правильно ли работает окружающая среда, с помощью rl_test_inference. Это запускает несколько шагов вывода и оценок с использованием OpenRouter — API Tinker не требуется, достаточно OPENROOUTER_API_KEY.
Протестировать выбранную среду с помощью инференса
Конфигурация по умолчанию:
- 3 шага × 16 завершений = 48 выкатов на модели
- Тестирует 3 модели разного масштаба на предмет надежности:
- qwen/qwen3-8b (маленькая)
- z-ai/glm-4.7-flash (средняя)
- minimax/minimax-m2.7 (большая)
- Всего: ~144 выкат.
Это вчера: - Среда загружается корректно - Построение промпта работает - Анализ ответов надежен для моделей разных масштабов. - Логика верификатора/оценки выдает корректные вознаграждения.
Интеграция с API Tinker
Тренер использует API Tinker для операций обработки моделей:
- ServiceClient — Создает для клиентов обучение и эмплирование.
- Клиент обучения — Обработка прямых и обратных проходов с потерей на основе выборки важности, шагов оптимизатора (Адам) и сохранения контрольных весов
- Клиент выборки — Предоставляет выводы с использованием последних проверенных весов
Цикл обучения: 1. Получение пакета от Atropos (запрос + выполнение + оценка) 2. Преобразует в объектах Tinker Datum с заполненными logprobs и преимуществами. 3. Выполняет прямой и обратный проход с потерей выборки на основе важности. 4. Делает шаг оптимизатора (Адам: lr=4e-5, β1=0,9, β2=0,95) 5. Сохраняет вес и предлагает новым клиентам образцы для следующего этапа умозаключений. 6. Логирует метрики в WandB
Диаграмма конструкции
flowchart LR
api["API Atropos<br/>run-api<br/>порт 8000"]
env["Среда<br/>реализация BaseEnv"]
infer["API инференса<br/>OpenAI / sglang<br/>порт 8001"]
trainer["Тренер Tinker<br/>LoRA-обучение + FastAPI"]
env <--> api
env --> infer
api -->|"пакеты: токены, оценки, logprobs"| trainer
trainer -->|"обслуживает инференс"| infer
Создание надежных сред
Чтобы создать новую RL-среду:
- Создать файл Python в
tinker-atropos/tinker_atropos/environments/ - Определите класс, следующий за
BaseEnv - Реализовать обязательные методы:
load_dataset()— загрузите ваши рабочие данные.get_next_item()— Представьте следующий элемент модели.score_answer()— Оцените модели данных выходного дня и назначьте вознаграждение.collect_trajectories()— Соберите и верните траектории- Опционально определите пользовательские классы конфигурации, следующие из
BaseEnvConfig
Изучите существующий gsm8k_tinker.py в виде шаблона. Агент может помочь вам создать новую среду — он может читать различные файлы, просматривать датасеты HuggingFace и писать новый код.
Метрики WandB
Запуск обучения регистрируется в системе «Вес и предвзятость» с учетом ключевых показателей:
| Метрика | Описание |
|---|---|
поезд/потеря |
Ошибка обучения (выборка по важности) |
train/learning_rate |
Текущая скорость обучения |
награда/средство |
Среднее вознаграждение по группам |
logprobs/среднее |
Среднее значение logprobs референсной модели |
logprobs/mean_training |
Среднее значение logprobs обучаемой модели |
logprobs/diff |
Дрейф logprobs (референс - обучение) |
преимущества/средство |
Среднее значение преимущества |
преимущества/стандарт |
Стандартное отклонение преимущества |
Файлы журналов
Каждый запуск обучения создает файлы журналов в ~/.hermes/logs/rl_training/:
logs/
├── api_{run_id}.log # Журналы сервера API Atropos
├── trainer_{run_id}.log # Журналы тренера Tinker
├── env_{run_id}.log # Журналы процесса среды
└── inference_tests/ # Результаты тестов инференса
├── test_{env}_{model}.jsonl
└── test_{env}_{model}.log
Они бесценны для отладки, когда обучение завершается неудачей или дает неожиданные результаты.