Одна итерация обучения может породить несколько наблюдений: значение функции потерь, возврат при оценке и затем исправленную метрику. Если считать каждую запись новой итерацией, соответствие нарушится; если удалять повторяющиеся шаги, информация потеряется. EvoRL, фреймворк обучения с подкреплением и эволюционного обучения, добавил локальную запись JSONL в main 12 ноября 2026 года. Изменение имён файлов последовало 13 ноября по пекинскому времени. Вместе эти изменения дают исходную историю записей и отдельное представление для анализа, выровненное по шагам.

Концептуальная иллюстрация: сохранять отдельные наблюдения и группировать их объединённое представление по шагам обучения.
Локальный файл с контекстом эксперимента
Выбор recorders=[log,jsonl] сохраняет машиночитаемые метрики рядом с обычными журналами без дополнительного SDK отслеживания. Версионированное руководство описывает общую настройку регистраторов для скриптов обучения. Бэкенд JSONL получает проект, имя запуска, разрешённую конфигурацию, теги, выходной путь и необязательную группу.
При инициализации этот контекст записывается в заголовок метаданных. Каждая последующая запись добавляет JSON-объект с переданным целочисленным step и вложенными data, после чего сбрасывает файловый буфер. Исходный файл сохраняет порядок поступления, включая нарушенный порядок шагов и повторные записи. При переносе выходного каталога на отдельную машину для анализа конфигурация и наблюдения передаются вместе в читаемом локальном файле.
Объединять при чтении, а не при записи
Функция load_jsonl_records(path), экспортируемая из evorl.recorders, читает весь набор данных и возвращает список, отсортированный по шагам. Словари одного шага объединяются рекурсивно: поздние записи заменяют конфликтующие значения, не затрагивая неупомянутые метрики. Массивы заменяются целиком, а позднее значение null также заменяет предыдущее. Необязательный заголовок метаданных первой строки пропускается и не включается в список метрик.
Допустим, на шаге 10 отдельно записаны потери обучения и возврат при оценке, а затем потери исправлены. Исходный файл сохраняет все три записи. Загруженная запись содержит последние потери и возврат при оценке. Пришедшая позже запись шага 8 сортируется перед шагом 10. При построении кривых обучения принадлежность итерации определяется полем step, а не номером строки или числом вызовов журналирования.
Что сохраняет сериализация
Реализация и регрессионные тесты охватывают значения NumPy, JAX и pandas. Массивы и Series превращаются в списки. DataFrame сохраняет столбцы и данные строк, но не индекс. NaN, бесконечность и пропуски pandas превращаются в JSON null. Если индекс идентифицирует образцы, перед записью преобразуйте его в явный столбец: это следует из фактического представления таблицы.
Некорректные или неполные строки вызывают ошибку с именем файла и номером строки. Загрузчик не отбрасывает молча обрезанную последнюю запись. Он загружает весь набор в память, поэтому планируйте память для анализа с учётом накопленного размера файла. Прикладная метрика с именем step остаётся внутри data, отдельно от внешнего поля итерации регистратора.
Отдельное место сохранения для каждого запуска
Последующее изменение использует общий sanitize_filename для JSONL и журналов, создаваемых скриптами. Он заменяет / на _: MetaWorld/Hammer-v3 становится MetaWorld_Hammer-v3. Другие символы не меняются, а метаданные сохраняют исходное имя запуска. Файлы имеют разные расширения .jsonl и .log. Это заменяет процентное кодирование первого коммита; нормализация имени не гарантирует уникальности.
Повторная инициализация того же пути JSONL перезаписывает содержимое. Используйте отдельный каталог или имя для каждого запуска, особенно если имена различаются только косой чертой и подчёркиванием. Начните с указанной настройки в исходном коде с обоими коммитами; загрузите небольшой эксперимент и проверьте заголовок, объединение повторных шагов и путь перед длительным запуском. Предыдущая статья о разработке EvoRL объясняет градиенты, устройства и формы метрик; это обновление упрощает локальное сохранение и повторный анализ таких наблюдений.