В мире научных исследований и машинного обучения существует необходимость в эффективном управлении экспериментами. В этой статье мы рассмотрим Sacred - удобный инструмент, который помогает организовать, регистрировать и воспроизводить вычислительные эксперименты. Он обеспечивает простой и эффективный способ управления гиперпараметрами, сохранения метаданных и результатов экспериментов, а также создания иерархии экспериментов для удобного анализа.
Sacred предназначен для выполнения всей утомительной работы, которую вам необходимо выполнить в ходе реального эксперимента, он поможет Вам:
- отслеживать все параметры вашего эксперимента
- легко запускать эксперимент для различных настроек
- сохранять конфигурации для отдельных запусков в файлах или базе данных
- воспроизводить результаты
Cоздадим Sacred эксперимент
Sacred будем использовать в связке с Neptune для визуализации и более удобного взаимодействия с информацией об экспериментах полученных от Sacred
Установим Sacred и Neptune:
pip install -U neptune[sacred] sacred
В качестве примера рассмотрим задачу классификации изображений из набора данных CIFAR10
Импортируем необходимые библиотеки
Для начала эксперимента необходимо создать объект класса Experiment. Для сохранения информации об экспериментах нужно подключить к эксперименту наблюдателя, в нашем случае наблюдателем будет NeptuneObserver.
Далее необходимо определить конфигурацию эксперимента, создадим функцию cfg с декоратором @ex.config, внутри которой определим необходимые параметры
Создадим простой классификатор:
Прежде чем запустить эксперимент, необходимо определить основную функцию:
Как видите, мы снова используем атрибут объекта эксперимента в качестве декоратора, в данном случае ex.automain. Декоратор позволяет основной функции автоматически обращаться к любым переменным, определенным в конфигурации этого эксперимента. Для сохранения метрик нужно использовать метод log_scalar, в нашем случае мы будем сохранять точность и потери.
Запустить эксперимент можно из командной строки, и вот что мы получим:
Также прямо в командной строке можно изменять параметры эксперимента:
python main.py batch_size=32 lr=0.1
Посмотрим на информацию сохраненную в Neptune:
Также Sacred сохраняет метаданные, например, об исходном коде (репозиторий git, файлы, зависимости и т. д.), работающем хосте, времени запуска/остановки и т. д.
Sacred имеет много других возможностей, с которыми можно ознакомится в их документации