Training
На этой странице
Hermes Agent включает встроенный конвейер обучения с подкреплением (RL), построенный на базе Tinker-Atropos. Это позволяет обучать языковые модели на задачах, специфичных для конкретной среды, используя GRPO (Group Relative Policy Optimization) с адаптерами LoRA, полностью управляемый через инструментальный интерфейс агента.
Обзор¶
Система RL-обучения состоит из трёх компонентов:
- Atropos — Сервер API траекторий, который координирует взаимодействие со средой, управляет группами развёртывания (rollout groups) и вычисляет преимущества (advantages)
- Tinker — Сервис обучения, который управляет весами модели, LoRA-обучением, семплированием/инференсом и шагами оптимизатора
- Среды (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(), который:
- Генерирует YAML-файл конфигурации, объединяющий заблокированные настройки с настраиваемыми переопределениями
- Создаёт уникальный ID запуска
- Запускает три процесса:
- Сервер API Atropos (
run-api) — координация траекторий - Тренер Tinker (
launch_training.py) — LoRA-обучение + сервер инференса FastAPI на порту 8001 - Среда (
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 — Обеспечивает инференс с использованием последних обученных весов
Цикл обучения:
- Запрашивает пакет развёртываний из Atropos (промпт + завершения + оценки)
- Преобразует в объекты Tinker Datum с дополненными logprobs и преимуществами
- Выполняет прямой и обратный проходы с loss на основе importance sampling
- Делает шаг оптимизатора (Adam: lr=4e-5, β1=0.9, β2=0.95)
- Сохраняет веса и создаёт новый клиент семплирования для следующего шага инференса
- Логирует метрики в WandB
Диаграмма архитектуры¶
Создание пользовательских сред¶
Чтобы создать новую RL-среду:
- Создайте Python-файл в
tinker-atropos/tinker_atropos/environments/ - Определите класс, наследующий от
BaseEnv - Реализуйте необходимые методы:
load_dataset()— Загрузите тренировочные данныеget_next_item()— Предоставьте следующий элемент моделиscore_answer()— Оцените выходные данные модели и назначьте вознагражденияcollect_trajectories()— Соберите и верните траектории- При необходимости определите пользовательский класс конфигурации, наследующий от
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]
Эти журналы бесценны для отладки, когда обучение завершается с ошибкой или выдаёт неожиданные результаты.
- Обзор
- Требования
- Доступные инструменты
- Рабочий процесс
- 1. Обнаружение сред
- 2. Выбор и настройка
- 3. Запуск обучения
- 4. Отслеживание прогресса
- 5. Остановка или получение результатов
- Тестирование инференса
- Интеграция с API Tinker
- Диаграмма архитектуры
- Создание пользовательских сред
- Метрики WandB
- Файлы журналов