У меня проблема с переопределением только частей конфигурации, но с сохранением значений по умолчанию. Например, полная конфигурация выглядит следующим образом (структурированная конфигурация):
Код: Выделить всё
@dataclass
class MyConfig(DictConfig):
_target_: str = "py.runner.MyRunner"
some_other_field: Any
loss: LossConfig
model: ModelConfig
defaults: list[Any] = field(
default_factory=lambda: [{"model": "default"}, "_self_"]
)
Код: Выделить всё
conf/model/default.yamlКод: Выделить всё
_target_: "src.model.DefaultModel"
decoder:
_target_: "torch.nn.TransformerDecoder"
...
encoder:
_target_: "torch.nn.TransformerEncoder"
...
prediction_layer:
_target_: "src.model.PredictionLayer"
...
Код: Выделить всё
_target_: "src.model.EncoderOnlyModel"
decoder:
_target_: "src.model.Dummy"
...
encoder:
_target_: "torch.nn.TransformerEncoder"
...
prediction_layer:
_target_: "src.model.PredictionLayer"
...
Использование CLI: Что работает, так это просто использовать model._target_=src.model .EncoderOnlyModel из интерфейса командной строки. Однако это становится очень затруднительным, если необходимо изменить несколько частей конфигурации.
Я пробовал различное содержимое conf/model/decoder_only.yaml и вызывал его из CLI через model=prediction_layer:
- Наивный
Код: Выделить всё
model:
_target_: src.model.PredictionLayerModel
- Использование подхода @package
Код: Выделить всё
# @package model
_target_: src.model.PredictionLayerModel
- Переопределить
Код: Выделить всё
# @package _global_
defaults:
- override /model: default
model:
_target_: src.model.PredictionLayerModel
- Использование переопределения, как указано в разделе «Настройка экспериментов»:
Код: Выделить всё
# @package _global_
defaults:
- override /_target_: src.model.PredictionLayerModel
[*]Использование списка значений по умолчанию:
Код: Выделить всё
# @package _global_
defaults:
- model: default
Подробнее здесь: https://stackoverflow.com/questions/791 ... f-packages
Мобильная версия