Перейти к содержанию

Training

На этой странице

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

Обзор

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

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

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

Требования

RL-обучение требует:

  • Python >= 3.11 (требование пакета Tinker)
  • TINKER_API_KEY — API-ключ для сервиса обучения Tinker
  • WANDB_API_KEY — API-ключ для отслеживания метрик в Weights & Biases
  • Подмодуль tinker-atropos (по пути tinker-atropos/ относительно корня Hermes)

[code] # Установка API-ключей hermes config set TINKER_API_KEY your-tinker-key hermes config set WANDB_API_KEY your-wandb-key

[/code]

Когда оба ключа присутствуют и доступен 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. Обнаружение сред

[code] Список доступных RL-сред

[/code]

Агент вызывает rl_list_environments(), который сканирует tinker-atropos/tinker_atropos/environments/ с помощью AST-парсинга для поиска классов Python, наследующих от BaseEnv. Каждая среда определяет:

  • Загрузку датасета — откуда берутся тренировочные данные (например, датасеты HuggingFace)
  • Формирование промпта — как форматировать элементы для модели
  • Оценку/верификацию — как оценивать выходные данные модели и назначать вознаграждения

2. Выбор и настройка

[code] Выбери среду GSM8K и покажи мне конфигурацию

[/code]

Агент вызывает 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. Запуск обучения

[code] Запусти тренировочный процесс

[/code]

Агент вызывает rl_start_training(), который:

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

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

4. Отслеживание прогресса

[code] Проверь статус тренировочного запуска abc12345

[/code]

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

  • Статус процессов (запущен/завершён для каждого из 3 процессов)
  • Время работы
  • Метрики WandB (шаг, среднее вознаграждение, процент правильных ответов, точность оценки)
  • Расположение файлов журнала для отладки

Ограничение частоты запросов

Проверки статуса ограничены одним запросом каждые 30 минут на один ID запуска. Это предотвращает чрезмерный опрос во время длительных тренировок, которые могут занимать часы.

5. Остановка или получение результатов

[code] Останови тренировочный запуск # или Получи финальные результаты для запуска abc12345

[/code]

rl_stop_training() завершает все три процесса в обратном порядке (среда → тренер → API). rl_get_results() извлекает финальные метрики WandB и историю обучения.

Тестирование инференса

Прежде чем приступать к полноценному обучению, можно проверить, корректно ли работает среда, с помощью rl_test_inference. Этот инструмент выполняет несколько шагов инференса и оценки через OpenRouter — не требуется API Tinker, достаточно только OPENROUTER_API_KEY.

[code] Протестируй выбранную среду с инференсом

[/code]

Конфигурация по умолчанию:

  • 3 шага × 16 завершений = 48 развёртываний на модель
  • Тестирует 3 модели разного масштаба для проверки устойчивости:
  • qwen/qwen3-8b (маленькая)
  • z-ai/glm-4.7-flash (средняя)
  • minimax/minimax-m2.7 (большая)
  • Всего: ~144 развёртывания

Это проверяет:

  • Корректность загрузки среды
  • Работу формирования промптов
  • Устойчивость парсинга ответов инференса для моделей разного масштаба
  • Корректность логики верификации/оценки и формирования вознаграждений

Интеграция с API Tinker

Тренер использует API Tinker для операций обучения модели:

  • ServiceClient — Создаёт клиенты для обучения и семплирования
  • Training client — Обрабатывает прямой и обратный проходы с loss на основе importance sampling, шаги оптимизатора (Adam) и сохранение контрольных точек весов
  • Sampling client — Обеспечивает инференс с использованием последних обученных весов

Цикл обучения:

  1. Запрашивает пакет развёртываний из Atropos (промпт + завершения + оценки)
  2. Преобразует в объекты Tinker Datum с дополненными logprobs и преимуществами
  3. Выполняет прямой и обратный проходы с loss на основе importance sampling
  4. Делает шаг оптимизатора (Adam: lr=4e-5, β1=0.9, β2=0.95)
  5. Сохраняет веса и создаёт новый клиент семплирования для следующего шага инференса
  6. Логирует метрики в WandB

Диаграмма архитектуры

Создание пользовательских сред

Чтобы создать новую 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

Тренировочные запуски логируются в Weights & Biases со следующими ключевыми метриками:

Метрика Описание
train/loss Потери обучения (importance sampling)
train/learning_rate Текущая скорость обучения
reward/mean Среднее вознаграждение по группам
logprobs/mean Средние эталонные logprobs
logprobs/mean_training Средние тренировочные logprobs
logprobs/diff Дрейф logprobs (эталонные - тренировочные)
advantages/mean Средние значения преимуществ
advantages/std Стандартное отклонение преимуществ

Файлы журналов

Каждый тренировочный запуск создаёт файлы журналов в ~/.hermes/logs/rl_training/:

[code] logs/ ├── api_{run_id}.log # Журнал сервера API Atropos ├── trainer_{run_id}.log # Журнал тренера Tinker ├── env_{run_id}.log # Журнал процесса среды └── inference_tests/ # Результаты тестов инференса ├── test_{env}{model}.jsonl └── test.log}_{model

[/code]

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