跳到主要内容

配置加载(load_cfg)

load_cfg 将路径/对象统一转换为 OmegaConf,并与 CLI 覆盖项合并,可独立用于任何工程。

何时使用

  • 需要统一处理多种配置来源(路径/字典/已有 OmegaConf),并支持命令行覆盖;
  • 需要在配置中可选地合并 ds_config(DeepSpeed 配置)等子配置。

核心 API

wall_e/config/load_config.py (L16–31)
def _to_cfg(obj):  # str/path -> OmegaConf.load; dict/list -> OmegaConf.create; DictConfig -> 原样返回
...

参数:

  • obj
    • DictConfig | ListConfig:原样返回;
    • str | os.PathLike:视作 yaml 路径,OmegaConf.load
    • Mapping | list:先将键统一字符串化(避免非字符串键报错),再 OmegaConf.create

返回:

  • DictConfig | ListConfig:标准化后的 OmegaConf 配置对象。
wall_e/config/load_config.py (L33–81)
def load_cfg(path_or_obj):
base_cfg = _to_cfg(path_or_obj)
cli_cfg = OmegaConf.from_cli()
ds_cfg_obj = OmegaConf.select(base_cfg, "training.ds_config", default=None)
ds_cfg = _to_cfg(ds_cfg_obj) if ds_cfg_obj is not None else OmegaConf.create({})
cfg = OmegaConf.merge(base_cfg, OmegaConf.create({}), ds_cfg, cli_cfg)
return cfg

参数:

  • path_or_obj:同 _to_cfg

返回:

  • DictConfig:合并后的最终配置,优先级(低 -> 高):base_cfg -> ds_cfg -> cli_cfg

说明:

  • ds_config 可为路径或对象;若不存在则用 {}
  • OmegaConf.from_cli() 支持 key=value 覆盖(如 training.lr=3e-4)。
  • 文件中关于 wandb sweep 的逻辑是注释掉的;当前不自动初始化 wandb。

使用示例

from wall_e.config.load_config import load_cfg

# 1) 从 yaml 路径加载(并允许 CLI 覆盖)
cfg = load_cfg("./configs/train.yaml")
print(type(cfg), cfg.get("run_name"))

# 2) 从 dict 创建,并合并 ds_config(同为路径或对象)
base = {
"run_name": "exp1",
"training": {
"lr": 2e-4,
"ds_config": "./configs/deepspeed.json"
}
}
cfg2 = load_cfg(base)
print(cfg2.training.lr)

# 3) 从已有 OmegaConf 对象合并
from omegaconf import OmegaConf
cfg3 = load_cfg(OmegaConf.create({"training": {"batch_size": 32}}))