Эксперимент — гипотеза про данные или про модель (реже одновременно):
Мы полагаем, что [используя данные] и [метод обучения] мы получим [метрику] не менее [значения]
Нужно стараться избегать ситуации, когда мы одновременно улучшаем данные и метод. Тогда, если даже мы получим улучшение, то не сможем выяснить, с чем именно оно связано.
Результат эксперимента — код + данные + модель = положительное изменение метрик в reports/metrics.json:
dvc metrics [show|diff]Разумеется, если эксперимент не удался и есть интерпретация/обоснование неудачи — это тоже полезный инкремент для проекта и им стоит делиться!
Для экспериментов важна воспроизводимость. Любые ML-артефакты, будь то новые данные для обучения модели или сама обученная модель, должны быть добавлены в DVC. Если возможно, артефакты нужно связывать с кодом, который их порождает в рамках DVC-пайплайна dvc.yaml. В иных же случаях можно воспользоваться dvc add:
dvc add path/to/artifactПри исследовании подхода и быстром прототипировании решения может быть достаточно интерактивного ноутбука .ipynb. Однако желательно как можно больше кода выносить в пакет или переиспользовать готового из yoric.
Ноутбуки следует добавлять в папку notebooks. Если наряду с ноутбуком есть дополнительные файлы или ноутбук порождает их в процессе, лучше создать отдельную подпапку эксперимента.
Для названия ноутбуков и экспериментов лучше предпочитать snake_case или PascalCase, где уместно.
Обратите внимание, что по умолчанию директория ноутбуков добавлена в исключения Git, поскольку это довольно стандартная директория для черновых скриптов в DS/ML проектах. Чтобы не добавить лишнего, процесс публикации ноутбуков выполняется с ключом --force (-f).
Крайне важно зафиксировать в коде случайные генераторы, включить детерминированный режим при расчётах на GPU в используемом ML/DL фреймворке.
В конечном итоге, если при ревью PR станет понятно, что эксперимент несёт большую ценность, но недостаточно оформлен, мы перенесём его в скрипты и зафиксируем совместными усилиями. Лучшее — враг хорошего.
Изменения в данных — это про директорию data, а изменения в модели (веса, предобученный стейт, токенайзеры и т. п.) — model.
Предположение, что использование определенного метода (модели) улучшит метрику.
Далее следует пример информации об эксперименте, которую следует приложить либо в описании к PR, либо в файле reports/model.md.
Хочется трекать эти подробности, чтобы в дальнейшем было проще составить дерево экспериментов и таблицу сравнения разных подходов.
Название эксперимента/модели: ...
Автор(ы): Имя(имена) участника(ов), проводившего эксперимент или разрабатывавшего модель
Дата: дата завершения эксперимента
Описание: опционально, краткий обзор эксперимента или модели, включая постановку задачи, цели и любую другую соответствующую информацию
Данные: опционально, если были изменения
Метрики: опционально, если есть сравнения или интерпретация
Архитектура/Модель: ...
Гиперпараметры: какие параметры можно перебирать для улучшения метрик, как выбирать при обучении на новых данных или ином железе
Предобработка: опционально, какие-то особенности подготовки данных для модели
Процедура обучения: опционально, какие-то нюансы и особенности обучения модели
Ограничения: на каких кейсах модель не будет работать или результат будет непредсказуем
Дальнейшая работа: что можно попробовать далее на базе эксперимента, как улучшить предложенное решение
Предположение, что дополнительные данные улучшат метрику.
Здесь нет какого-то конкретного шаблона, важно просто мотивировать обновление данных. Идеально — привести графики, статистики из датасета, показать краевые случаи в работе модели на текущих данных.
Поскольку каждая ветка — это полноценный эксперимент с обученной моделью, если нет возможности обучить модель на новых данных, укажите это в PR. Когда появится нужный компьют, мы запустим обучение на новых данных.