Hydra: удобные конфигурации для экспериментов
Всем привет! Предлагаю рассмотреть инструмент Hydra для работы с конфигурационными файлами на Python.
В работе датасайентиста часто необходимо пробовать разные подходы к решению задачи, в частности различные модели и их параметры. Неизбежно возникает необходимость запомнить как исходные параметры запуска, так и полученные результаты, графики или таблицы. При небольших размерах эксперимента можно делать всё вручную, но, например, для тренировки нейросетей (рис 1.) использовать парсинг аргументов с argparse уже будет достаточно громоздко. Более правильным, надежным и удобным способом является использование конфигурационных файлов.
Конфигурационные файлы - файлы, используемые для настройки параметров и начальных настроек некоторых компьютерных программ. Они используются для пользовательских приложений, серверных процессов и настроек операционной системы.
Популярные форматы: .yaml, .ini, .cnf, .cfg.
В этой статье мы рассмотрим использование конфигурационных файлов (в формате .yaml) вместе со специальным пакетом Hydra (Hydra framework: https://hydra.cc/), упрощающим работу с ними. Для иллюстрации базовых возможностей библиотеки рассмотрим минимальный пример.
Для установки модуля вызываем:
В директории проекта создадим папку conf и в ней конфиг-файл first.yaml, содержащий две строки с гиперпараметрами:
Далее создадим сам скрипт main.py:
Обратим внимание на следующие моменты:
1) По умолчанию при каждом запуске Hydra создает в директории скрипта отдельную папку по адресу: outputs/ДАТА_ЗАПУСКА/ВРЕМЯ_ЗАПУСКА/, куда складываются лог-файлы, конфигурация запуска и куда также можно сохранить результаты работы своего скрипта. Адрес папки получается так: working_dir = os.getcwd().
2) Для подключения гидры в проект, нужно перед методом, где будут использоваться прописанные в конфиг-файл параметры разместить декоратор: @hydra.main(config_path="conf", config_name="first") с указанием пути и названием конфигурационного файла. В качестве аргумента функции указывается cfg: DictConfig.
3) Параметры из конфиг-файла доступны по умолчанию в переменной cfg, например cfg.batch_size.
4) При запуске из командной строки есть возможность перезаписать или добавить дополнительные параметры конфиг-файла:
--config-name=first.yaml lr=2 +some_new_arg=1.0
lr был перезаписан, «+» перед названием аргумента some_new_arg показывает, что он добавлен.
Существует возможность сгруппировать конфигурации в отдельные файлы. Например, мы хотим протестировать для нашей модели различные оптимизаторы. Для этого можно создать новую директорию conf/optimizers и поместить в неё несколько конфиг-файлов для каждого из оптимизаторов.
Содержание файла adam.yaml, в нём находятся параметры оптимизатора adam:
beta_1: 0.9
beta_2: 0.99
Теперь, если добавить в first.yaml:
Тогда мы сможем получить параметры оптимизатора как:
Такой модульный подход становится особенно удобен в больших проектах.
Ещё одной интересной возможностью библиотеки является перебор нескольких конфигураций за один запуск. Предположим, мы создали ещё две конфигурации для использования различных датасетов: titanic и households.
Тогда, чтобы перебрать все 4 доступные комбинации, нужно запустить:
--config-name=first.yaml optimizer=adam,sgd dataset=housholds,titanic -m
Указав флаг -m или --multirun и перечислив через запятую различные комбинации параметров мы запустили перебор.
Для сохранения результатов будет создана отдельная директория /multirun/.
Рассмотренное выше является лишь частью всех возможностей библиотеки Hydra. Ознакомиться с остальными функциями, такими как лаунчеры (позволяют выполнять код параллельно или даже удалённо на серверах AWS), свиперы (оптимизируют определённую метрику перебирая разные конфигурации) и многим другим можно в документации: https://hydra.cc/docs/intro/.
Ребята, увольте того, кто у вас нэцмингом занимался, и переименуйтесь пока не поздно
у вас
Сначала подумал, что Гидра совсем осмелела и вышла даже в VC)) потом понял, что над названием думали 2 секунды
Да, Data science- это такое, без гидры не разберёшь…
А как у вас сайентистов называют? Закладчиками?
В наше время, я бы не стал называть свой проект "гидра"
Из-за ассоциаций сами знаете с чем
Ахахах у меня слово hydra ассоциируется с чем то совершенно другим ... )