RL-обучение

Hermes Agent включает в себя встроенный конвейер для обучения с креплением (RL), построенный на Tinker-Atropos. Это позволяет обучать языковые модели задачам, специфичным для конкретной среды, с использованием GRPO (оптимизация групповой относительной политики) и LoRA-адаптеров, полностью управляемых через инструментальный интерфейс агента.

Обзор

Система RL-обучения состоит из трех компонентов:

  1. Atropos — траектории API сервера, который координирует взаимодействие в соответствии с требованиями, развертывание руководства по протоколу и вычисление преимуществ
  2. Tinker — Сервис обучения, который обрабатывает весовые модели, LoRA-обучение, сэмплирование/выводы и шаги оптимизатора
  3. Среды — Классы Python, определяющие задачи, оценки и функции вознаграждения (например, математические задачи GSM8K).

Агент может находить среду, настраивать параметры обучения, запускать сеансы обучения и отслеживать метрики — всё с помощью набора инструментов rl_*.

Требования

Для RL-обучения требуется:

# Установка 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. Каждая окружающая среда определяет:

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(), который:

  1. Генерирует YAML-файл конфигурации, объединяющий заблокированные настройки с настраиваемыми переопределениями.
  2. Создает уникальный идентификатор запуска.
  3. Запускает три процесса:
  4. Сервер API Atropos (run-api) — координация траекторий
  5. Тренер Tinker (launch_training.py) — LoRA-обучение + сервер инференса FastAPI на порту 8001
  6. Среда (environment.py Serve) — выбранная среда, подключающаяся к Атропосу.

Процессы выполнения с задержками (5 секунд для API, 30 секунд для тренера, еще 90 секунд для среды), чтобы обеспечить надлежащий порядок инициации.

4. Мониторинг прогресса

Проверить статус запуска abc12345

Агент предоставляет rl_check_status(run_id), который сообщает:

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 для операций обработки моделей:

Цикл обучения: 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-среду:

  1. Создать файл Python в tinker-atropos/tinker_atropos/environments/
  2. Определите класс, следующий за BaseEnv
  3. Реализовать обязательные методы:
  4. load_dataset() — загрузите ваши рабочие данные.
  5. get_next_item() — Представьте следующий элемент модели.
  6. score_answer() — Оцените модели данных выходного дня и назначьте вознаграждение.
  7. collect_trajectories() — Соберите и верните траектории
  8. Опционально определите пользовательские классы конфигурации, следующие из 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

Они бесценны для отладки, когда обучение завершается неудачей или дает неожиданные результаты.