Различать кампанию, конфигурацию и запуск
Кампания несёт вопрос, например сравнить базовый вариант с адаптацией. Конфигурация описывает технические решения. Запуск — это попытка выполнения этой конфигурации, с зерном, началом, концом и статусом. Таким образом, две одинаковые попытки сохраняют два идентификатора, даже если вторая заменяет прерванную попытку.
Добавьте идентификатор оценки, когда один и тот же артефакт оценивается на нескольких наборах или с новой метрикой. Это позволяет не путать новую модель с новым прочтением существующей модели. Свяжите попытку возобновления с той, что ей предшествовала, и с загруженным checkpoint.
MLflow также организует отслеживание вокруг запусков, параметров, метрик и артефактов. Это различие полезно даже в простой папке с файлами. Вы можете применить его с вашим привычным инструментом; для начала не требуется никакая特定ная платформа отслеживания.
Технические источники: MLflow — запуски, параметры, метрики и артефакты
Записывать фактически выполненный манифест
Сохраняйте разрешённые параметры после применения значений по умолчанию и аргументов запуска. Исходный файл конфигурации может опускать batch по умолчанию или опцию, изменённую во время выполнения. Записывайте то, что фактически использовалось, вместе с копией кода или неизменяемой ревизией и состоянием несохранённых изменений.
Манифест также связывает версии модели и tokenizer, программное окружение, фактически использованный GPU, точность, данные, seeds и определение метрик. Он описывает попытку, не превращаясь в руководство по установке. Указывайте единицы измерения: секунды, байты, tokens, баллы или доля от 0 до 1 в зависимости от измерения.
При запуске статус — «выполняется»; в конце он становится «завершён», «не удался» или «прерван» в зависимости от того, что вы установили. Не дополняйте задним числом забытую версию текущей установленной. Отмечайте неизвестную информацию и ограничивайте вывод, который от неё зависит.
| Блок | Элементы для сохранения | Решаемый вопрос |
|---|---|---|
| Идентичность | campaign_id, config_id, run_id, возможный parent_run_id | Какая попытка даёт этот результат? |
| Код и модель | Точные ревизии, локальные изменения, базовая модель и tokenizer | Какое вычисление фактически было запущено? |
| Данные | Версия, split, предобработка, идентификаторы и релевантный порядок | На каких входах? |
| Параметры | Фактические значения, зёрна и единицы измерения | С какими настройками? |
| Оценка | Оцениваемый артефакт, метрика/версия, порог и популяция | Что означает оценка? |
| Закрытие | Статус, ошибка, созданные файлы и решение | Пригодна ли попытка к использованию? |
Идентифицировать данные за пределами имени папки
Путь вроде donnees/final не обозначает стабильную версию. Сохраняйте инвентарь файлов или примеров, splits и процедуру преобразования. Если вы исправляете метки или фильтруете строки, создайте новую версию и сохраните связь с предыдущей. Старая оценка должна по-прежнему указывать на свои старые данные.
Hugging Face Datasets сопоставляет fingerprints с состоянием набора и его преобразованиями для управления кэшем. Этот механизм полезен, но нужно также сохранять происхождение данных и предобработку. В частности, нехешируемое преобразование может привести к случайному fingerprint: идентификатор кэша сам по себе не заменяет ваше досье о происхождении.
Для зафиксированных артефактов добавляйте размер и отпечаток файла. Дайджест SHA-256, вычисленный до и после копирования, позволяет проверить, что байты соответствуют сохранённому эталону. Он не доказывает ни качество меток, ни права на использование, ни отсутствие утечки между splits.
Технические источники: Hugging Face Datasets — fingerprints и преобразования · Python 3.14 — отпечатки файлов с помощью hashlib
Связывать метрики, предсказания и артефакты
Строка метрики должна идентифицировать run, оцениваемый артефакт, набор для оценки, версию метрики и её периметр. Укажите, относится ли значение к промежуточному checkpoint, финальной модели или подгруппе. Кривой недостаточно, если уже непонятно, какой файл соответствует выбранной точке.
Сохраняйте предсказания вместе с их идентификатором входа, статусом и информацией, необходимой для оценки. Ожидаемые эталоны могут оставаться в отдельном версионируемом файле. Для структурированного вывода различайте сырой результат, разобранный результат и вердикт: исправление парсинга не должно перезаписывать исходный вывод.
MLflow позволяет связывать метрики с моделями и данными. При работе с файлами применяйте тот же принцип через явные идентификаторы. Ведите читаемый инвентарь артефактов: веса или адаптер, параметры генерации, выводы, отчёт об оценке и заметку о решении. Не предполагайте, что скриншот заменяет эти файлы.
Технические источники: MLflow — связываем метрики, модели и наборы данных
Пример: шесть runs и дубликат, скрывающий пробел
Рассмотрим пример классификации с двумя конфигурациями и тремя зёрнами. Он даёт шесть запланированных runs. Каждый должен предсказать одни и те же 300 идентификаторов для оценки: полный набор ожидает, таким образом, 6 × 300 = 1 800 уникальных пар (run_id, input_id). Этот расчёт описывает ожидаемый инвентарь, а не реально выполненный эксперимент.
Предположим, что файл содержит 300 строк, но идентификатор doc-042 присутствует дважды, а doc-117 отсутствует. Общее число строк выглядит правильным; однако уникальных идентификаторов всего 299. Этот run не проходит проверку покрытия, пока аномалия не будет объяснена и исправлена.
Если затем каждый run оценивается на полном корпусе и на его подгруппе длинных текстов, вы получаете двенадцать строк метрики для данной метрики. Это по-прежнему шесть runs, а не двенадцать независимых обучений. Ключ оценки должен включать периметр, чтобы сохранить это различие.
| Проверка | Ожидается | Иллюстративная аномалия |
|---|---|---|
| Runs | 2 конфигурации × 3 зерна = 6 | При повторном запуске присваивается новый идентификатор |
| Предсказания на run | Ожидается 300 уникальных ID | 300 строк, но только 299 уникальных ID |
| Пары run/вход | 6 × 300 = 1 800 | Только общий подсчёт не выявляет все дубликаты |
| Оценки | 6 runs × 2 периметра = 12 | Двенадцать оценок не создают двенадцать runs |
Закрыть дело читаемым решением
Прежде чем объявить run завершённым, проверьте наличие и открытие файлов, соответствие идентификаторов, пересчитываемость метрик и статус каждой ошибки. Технически завершённая попытка может остаться отклонённой из-за недостаточного качества. Держите эти два состояния раздельно.
Заметка о решении объединяет вопрос, сравниваемые варианты, заявленный критерий, принятые результаты и причины исключения. Указывайте run_id и пути к артефактам, а не «последняя модель». Добавьте ограничения: мало повторов, недостаточная подгруппа, не найденная версия или ставшее невозможным сравнение.
Последующее исправление должно оставить след: новая оценка, новый отчёт и причина изменения. Сохраните прежний вывод как идентифицированную историческую версию, не позволяя ему выглядеть как текущее решение. Наконец, проверьте, что экспортированная копия открывается из своей папки назначения.
Избегать бесполезного сбора и обещаний воспроизведения
Собирайте поля, необходимые для доказательства, а не все переменные окружения и не историю терминала. Конфигурация или URL может содержать токен; подготовьте версию для передачи без секретов и храните данные, которые должны оставаться приватными, в разрешённом для них месте. Техническим идентификаторам испытаний не нужно включать имя человека.
Полный набор повышает возможность повторить и понять эксперимент. Он не гарантирует числового равенства между платформами или версиями: PyTorch документирует эти ограничения воспроизводимости. Различайте восстановление протокола, повторную загрузку артефакта и точное воспроизведение чисел.
Блокнот IteraGPU может хранить ваши цели, параметры и решения вместе с полезными ссылками. Он не запускает runs и не собирает автоматически файлы или телеметрию. Используйте его как указатель ваших рассуждений, а набор артефактов держите в собственных резервных копиях.
Технические источники: PyTorch 2.14 — границы воспроизводимости между средами
Практические вопросы
Достаточно ли Git-коммита, чтобы восстановить эксперимент?
Коммит идентифицирует версию кода, но не обязательно данные, веса, фактические параметры или незафиксированные изменения. Свяжите его с манифестом и полученными артефактами. Без этих связей два запуска одного коммита могут соответствовать разным экспериментам.
Нужно ли сохранять все предсказания?
Сохраняйте выходные данные, необходимые для проверки выводов и пересчёта оценки, в пределах ваших прав и ограничений по хранению. Для ограниченного корпуса сравнения идентификаторы и полные предсказания делают ошибки проверяемыми. Один лишь агрегированный показатель обычно не позволяет найти пропущенные примеры.
Должен ли перезапуск использовать тот же run_id?
Предлагаемая схема присваивает новый идентификатор каждой попытке и связывает перезапуск с предыдущим запуском и загруженным checkpoint. Вы можете объединить эти попытки в один логический эксперимент. Такое разделение делает видимыми прерывание, затраты и файлы, фактически созданные на каждом этапе.