#fb-hydra #hydra-python
#fb-hydra
Вопрос:
Я изучаю варианты рекурсивной инициализации в hydra. Я смог настроить рабочий пример на основе этого PR. Пробуя более продвинутые вещи, я наткнулся на следующую проблему. Моя структура каталогов выглядит следующим образом:
config/
config.yaml
/tokenizer
Tokenizer.yaml
/normalizer
Normalizer.yaml
Конфигурации содержат:
<config.yaml>
default:
- tokenizer: Tokenizer
<Tokenizer.yaml>
_target_: some.path.Tokenizer
normalizer: Normalizer # I want this to be the Normalizer object after instantiation, but getting string.
<Normalizer.yaml>
_target_: some.other.path.Normalizer
arg1: value1
Я хочу рекурсивно создать экземпляр токенизатора без необходимости явной записи всех аргументов нормализатора, поскольку все они уже упомянуты в файле Normalizer.yaml. Другими словами, я хотел бы использовать группу конфигурации нормализатора внутри группы конфигурации токенизатора. Прямо сейчас, если я вызываю tokenizer = instantiate(cfg.tokenizer)
, результатом является объект класса Tokenizer, но tokenizer.normalizer
это строка Normalizer
. Если я использую интерполяцию значений и настрою проект следующим образом:
<config.yaml>
default:
- tokenizer: Tokenizer
- normalizer: Normalizer
<Tokenizer.yaml>
_target_: some.path.Tokenizer
normalizer: ${normalizer}
<Normalizer.yaml>
_target_: some.other.path.Normalizer
arg1: value1
Результирующая переменная tokenizer.normalizer
представляет собой dict, содержащий аргументы для нормализатора, подобного so {"_target_": ...}
, вместо того, чтобы быть инициализированным классом нормализатора. Как я могу избежать необходимости явно повторять определение нормализатора внутри конфигурации токенизатора?
Комментарии:
1. Это поможет, если вы покажете свою фактическую окончательную конфигурацию и теперь, что вы делаете, чтобы ее составить.
2. Привет, спасибо за ответ. Приведенная выше конфигурация — это в основном то, что я использую. Я составляю конфигурацию с основным декоратором по умолчанию, упомянутым в базовом руководстве. Возможно, вопрос больше похож на то, как использовать параметр конфигурации группы в другой групповой конфигурации и как использовать рекурсивное создание экземпляра в таком случае. Я переформулирую, как только доберусь до своего ПК
3. @omry Я отредактировал вопрос, чтобы придать ему больше смысла. Некоторые части отсутствовали. Теперь это более понятно?
Ответ №1:
Я не думаю, что то, что вы хотите, поддерживается прямо сейчас. Пожалуйста, отправьте запрос функции с минимальной конфигурацией и объяснением текущего поведения и желаемого поведения.