#hydra-python
Вопрос:
Поэтому я использую Hydra 1.1 и hydra-ax-sweeper==1.1.5
для управления своей конфигурацией, а также для выполнения некоторой оптимизации гиперпараметров в среде minerl. Для этой цели я загружаю много данных в память (пик около 50 ГБ при загрузке с многопроцессорной обработкой, падает до 30 ГБ после полной загрузки) с помощью многопроцессорной обработки (с помощью pytorch).
При обычном запуске это не проблема (у моей машины более 90 Гб оперативной памяти), одна тренировка заканчивается без каких-либо проблем.
Однако, когда я запускаю один и тот же код с -m
опцией (и hydra/sweeper: ax
в конфигурации), код останавливается примерно через 2-3 запуска очистителя, застревая на этапе загрузки данных, потому что вся память системы ( память подкачки) занята.
Сначала я подумал, что это какая-то проблема с minerl
кодом среды, который запускает java-код в подпроцессе. Поэтому я попытался запустить свой код без среды (только данные объемом 30 ГБ), и у меня все еще та же проблема. Поэтому я подозреваю, что у меня есть некоторая утечка памяти между уборщиком Гидры.
Итак, мой вопрос в том, как уборочная машина Hydra(или уборочная машина с топором) работает в промежутках между зачистками? У меня всегда складывалось впечатление , что он запускает main(cfg: DictConfig)
@hydra.main(...)
функцию с помощью, принимает скалярный возврат(оценку) и запускает байесовский оптимизатор с этой оценкой, при main()
этом вызывается аналогично функции (все внутри правильно освобождается/мусор собирается между каждым запуском развертки).
Разве это не так? Должен ли я затем загружать данные где-то за пределами main()
и хранить их между развертками?
Заранее большое вам спасибо!
Ответ №1:
Испытания hydra-ax-sweeper
могут выполняться параллельно, в зависимости от результата вызова get_max_parallelism
функции, определенной в ax.service.ax_client
. Я подозреваю, что у вашей машины заканчивается память из-за этого параллелизма.
Плагин Hydra Ax в настоящее время не имеет группы конфигурации для настройки этого max_parallelism
параметра, поэтому он автоматически устанавливается ax.
Загрузка данных за пределы main (как вы предложили) может быть хорошим решением этой проблемы.
Комментарии:
1. Привет @Яша ! спасибо за ответ и извините за поздний ответ. Спасибо за подробный ответ, хотя я не настолько знаком со всеми деталями вокруг AX, я приму этот ответ. К сожалению, процесс загрузки данных также требует некоторых параметров конфигурации от hydra, поэтому его перемещение довольно нетривиально. Я поднял вопрос в гидре гитхуб. В противном случае, я думаю, что я уберу часть загрузки данных и внесу в нее какие-либо изменения
main()
.
Ответ №2:
У Hydra sweepers, как правило, нет возможности контролировать параллелизм. За это отвечает лаунчер, который вы используете. Встроенная базовая программа запуска запускает задания последовательно, поэтому она не должна вызывать проблем с памятью. Если вы используете другие пусковые установки, вам может потребоваться контролировать их параллелизм с помощью определенных параметров пусковой установки.