Hydra: удобные конфигурации для экспериментов

Всем привет! Предлагаю рассмотреть инструмент Hydra для работы с конфигурационными файлами на Python.

В работе датасайентиста часто необходимо пробовать разные подходы к решению задачи, в частности различные модели и их параметры. Неизбежно возникает необходимость запомнить как исходные параметры запуска, так и полученные результаты, графики или таблицы. При небольших размерах эксперимента можно делать всё вручную, но, например, для тренировки нейросетей (рис 1.) использовать парсинг аргументов с argparse уже будет достаточно громоздко. Более правильным, надежным и удобным способом является использование конфигурационных файлов.

Hydra: удобные конфигурации для экспериментов

Конфигурационные файлы - файлы, используемые для настройки параметров и начальных настроек некоторых компьютерных программ. Они используются для пользовательских приложений, серверных процессов и настроек операционной системы.

Популярные форматы: .yaml, .ini, .cnf, .cfg.

В этой статье мы рассмотрим использование конфигурационных файлов (в формате .yaml) вместе со специальным пакетом Hydra (Hydra framework: https://hydra.cc/), упрощающим работу с ними. Для иллюстрации базовых возможностей библиотеки рассмотрим минимальный пример.

Для установки модуля вызываем:

pip install hydra-core --upgrade

В директории проекта создадим папку conf и в ней конфиг-файл first.yaml, содержащий две строки с гиперпараметрами:

batch_size: 32 lr: 1e-5

Далее создадим сам скрипт main.py:

import hydra from omegaconf import DictConfig # декоратор необходимый для подгрузки конфигурации hydra @hydra.main(config_path="conf", config_name="first") def func(cfg: DictConfig): # адрес временной папки working_dir = os.getcwd() print(f"Batch size is {cfg.batch_size}") print(f"Learning rate is {cfg['lr']}") if __name__ == "__main__": func()

Обратим внимание на следующие моменты:

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 и поместить в неё несколько конфиг-файлов для каждого из оптимизаторов.

Hydra: удобные конфигурации для экспериментов

Содержание файла adam.yaml, в нём находятся параметры оптимизатора adam:

beta_1: 0.9

beta_2: 0.99

Теперь, если добавить в first.yaml:

defaults: - optimizer: adam

Тогда мы сможем получить параметры оптимизатора как:

cfg.optimizer.beta_1 cfg.optimizer.beta_2

Такой модульный подход становится особенно удобен в больших проектах.

Ещё одной интересной возможностью библиотеки является перебор нескольких конфигураций за один запуск. Предположим, мы создали ещё две конфигурации для использования различных датасетов: titanic и households.

Hydra: удобные конфигурации для экспериментов

Тогда, чтобы перебрать все 4 доступные комбинации, нужно запустить:

--config-name=first.yaml optimizer=adam,sgd dataset=housholds,titanic -m

Указав флаг -m или --multirun и перечислив через запятую различные комбинации параметров мы запустили перебор.

Для сохранения результатов будет создана отдельная директория /multirun/.

Рассмотренное выше является лишь частью всех возможностей библиотеки Hydra. Ознакомиться с остальными функциями, такими как лаунчеры (позволяют выполнять код параллельно или даже удалённо на серверах AWS), свиперы (оптимизируют определённую метрику перебирая разные конфигурации) и многим другим можно в документации: https://hydra.cc/docs/intro/.

33
11 комментариев

Ребята, увольте того, кто у вас нэцмингом занимался, и переименуйтесь пока не поздно

6

у вас

1

Сначала подумал, что Гидра совсем осмелела и вышла даже в VC)) потом понял, что над названием думали 2 секунды

6

Да, Data science- это такое, без гидры не разберёшь…

4

А как у вас сайентистов называют? Закладчиками?

3

В наше время, я бы не стал называть свой проект "гидра"
Из-за ассоциаций сами знаете с чем

2

Ахахах у меня слово hydra ассоциируется с чем то совершенно другим ... )

1