espnet3.utils.run_utils.apply_training_experiment_context
espnet3.utils.run_utils.apply_training_experiment_context
espnet3.utils.run_utils.apply_training_experiment_context(, training_config: DictConfig | None, inference_config: DictConfig | None, metrics_config: DictConfig | None, log: Logger) → None
Apply runner context propagation across training, inference, and metrics.
Runner entry points call this after loading configs and before resolving interpolations. When training_config is available, its exp_tag and exp_dir are treated as the source of truth for inference and metrics. When both inference_config and metrics_config are present, metrics_config also inherits inference_dir from inference_config so measurement follows the same output location as inference.
- Parameters:
- training_config (DictConfig | None) – Training config selected for the current run. When None, this function is a no-op.
- inference_config (DictConfig | None) – Inference config to patch in place when present.
- metrics_config (DictConfig | None) – Metrics config to patch in place when present.
- log (logging.Logger) – Logger used for insert/overwrite messages.
- Returns: Provided configs are mutated in place.
- Return type: None
- Raises:This function does not raise exceptions. –
Notes
This helper is intentionally runner-oriented. It does not load configs; it only normalizes already-loaded configs before stage execution.
Examples
Insert missing experiment identity from training.
training_config = OmegaConf.create(
{"exp_tag": "train_asr_rnn", "exp_dir": "./exp/train_asr_rnn"}
)
inference_config = OmegaConf.create(
{"inference_dir": "${exp_dir}/inference"}
)
apply_training_experiment_context(
training_config=training_config,
inference_config=inference_config,
metrics_config=None,
log=logging.getLogger("example"),
)
# Logs:
# INFO Inserted inference_config.exp_tag from training_config
# INFO Inserted inference_config.exp_dir from training_config
# Expected values:
# inference_config.exp_tag == "train_asr_rnn"
# inference_config.exp_dir == "./exp/train_asr_rnn"Override conflicting experiment identity in inference.
training_config = OmegaConf.create(
{"exp_tag": "train_asr_rnn", "exp_dir": "./exp/train_asr_rnn"}
)
inference_config = OmegaConf.create(
{"exp_tag": "manual_tag", "exp_dir": "./exp/manual_tag"}
)
apply_training_experiment_context(
training_config=training_config,
inference_config=inference_config,
metrics_config=None,
log=logging.getLogger("example"),
)
# Logs:
# WARNING Overriding inference_config.exp_tag with
# training_config value: 'manual_tag' -> 'train_asr_rnn'
# WARNING Overriding inference_config.exp_dir with
# training_config value: './exp/manual_tag' -> './exp/train_asr_rnn'Align metrics with a custom inference output directory.
inference_config = OmegaConf.create(
{
"exp_tag": "eval_debug",
"exp_dir": "./exp/eval_debug",
"inference_dir": "./custom/eval_outputs",
}
)
metrics_config = OmegaConf.create({"inference_dir": None})
apply_training_experiment_context(
training_config=None,
inference_config=inference_config,
metrics_config=metrics_config,
log=logging.getLogger("example"),
)
# Logs:
# INFO Inserted metrics_config.exp_tag from inference_config
# INFO Inserted metrics_config.exp_dir from inference_config
# INFO Inserted metrics_config.inference_dir from inference_config
# Expected values:
# metrics_config.inference_dir == "./custom/eval_outputs"
# metrics_config.exp_dir == "./exp/eval_debug"
# metrics_config.exp_tag == "eval_debug"Leave standalone inference unchanged when no training config is given.
inference_config = OmegaConf.create(
{"exp_tag": "whisper_eval", "exp_dir": "./exp/whisper_eval"}
)
apply_training_experiment_context(
training_config=None,
inference_config=inference_config,
metrics_config=None,
log=logging.getLogger("example"),
)
# No logs are emitted and inference_config is unchanged.