ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Hydra 1.2 搜索空间配置迁移指南:hydra.sweeper.params 新语法与 BasicSweeper/Optuna Sweeper 的完整对照

Hydra 1.2 搜索空间配置迁移指南:hydra.sweeper.params 新语法与 BasicSweeper/Optuna Sweeper 的完整对照 Hydra 1.2 搜索空间配置迁移指南hydra.sweeper.params 新语法与 BasicSweeper/Optuna Sweeper 的完整对照【免费下载链接】hydraHydra is a framework for elegantly configuring complex applications项目地址: https://gitcode.com/GitHub_Trending/hyd/hydra本文基于 Hydra 仓库中 1.1 → 1.2 升级文档《Changes to configuring sweepers search space》展开说明 Hydra 1.2 引入的统一搜索空间配置节点hydra.sweeper.params的设计动机、新旧配置语法对照含原文档中 Optuna 的完整迁移示例并结合仓库源码讲清 BasicSweeper 与 Optuna Sweeper 是如何解析这组参数的帮助你在升级后正确迁移 multirun/HPO 配置并理解底层解析链路。一、核心变更所有 Sweeper 的搜索空间统一收敛到 hydra.sweeper.paramsHydra 1.2 引入了hydra.sweeper.params配置节点。从这一版本开始所有Hydra Sweeper——无论是内置的BasicSweeper还是 HPO 类插件如 Optuna Sweeper——的搜索空间search space都统一在该配置节点下定义。在 1.1 及更早版本中各 Sweeper 插件各自为政Optuna Sweeper 使用hydra.sweeper.search_space子节点且采用一套与命令行覆盖语法无关的私有结构type/low/high/step/choices等键值对。1.2 的改动带来三个直接收益配置面统一所有 Sweeper 共用同一个参数入口切换 Sweeper 时不再需要更换搜索空间的描述方式与命令行语法一致搜索空间定义改为与你在命令行覆盖一个值时的写法保持一致Change the search space definition to be consistent with how youd override a value from commandline即直接复用 Hydra override 解析器已有的choice()、range()、interval()等函数消除重复实现Sweeper 插件不再需要自行解析一套私有 DSL而是把params拼回标准 override 字符串后交给 Hydra 的OverridesParser解析。二、迁移方法从 hydra.sweeper.search_space 到 hydra.sweeper.params官方升级文档给出的迁移步骤非常直接把搜索空间定义从hydra.sweeper.search_space移动到hydra.sweeper.params并把每个参数的定义改写为命令行覆盖语法。下面完整继承原文档中 Optuna 场景的新旧对照示例。Hydra 1.1 旧写法search_space 私有结构hydra: sweeper: search_space: search_space: x: type: float low: -5.5 high: 5.5 step: 0.5 y: type: categorical choices: - -5 - 0 - 5Hydra 1.2 新写法params override 语法hydra: sweeper: params: x: range(-5.5, 5.5, step0.5) y: choice(-5, 0, 5)对照可以看出映射关系1.1 字段1.2 表达式语义type: float, low: -5.5, high: 5.5, step: 0.5range(-5.5, 5.5, step0.5)浮点数区间扫描起点 -5.5、终点 5.5不含、步长 0.5type: categorical, choices: [-5, 0, 5]choice(-5, 0, 5)在三个候选值中做类别扫描params节点的类型就是Optional[Dict[str, str]]见 Optuna 配置类 与 BasicSweeper 配置类键是配置项名会被视作 override 的 key值是 override 的 value 部分字符串形式可包含扫描函数。新语法中可用的扫描函数由于params的值走的是 Hydra override 值解析路径你可以直接使用 override 语法里定义的扫描函数。这些函数在 grammar_functions.py 中实现并在 overrides_parser.py 中注册choice、rangechoice(v1, v2, ...)在给定候选值中做离散扫描实现。空choice()非法嵌套 choice 也不支持range(start, stop, step1)对整数或浮点数区间做扫描只给一个参数时视为range(0, start)负 step 时按r[i] start step*i stop取值实现与注释interval(start, end)连续浮点区间语义为start value end实现tag(log, ...)给扫描附加标签例如 Optuna Sweeper 用tag(log, ...)表示对数尺度分布。需要注意一个版本相关的限制interval()是连续扫描BasicSweeper不支持见下文。因此hydra.sweeper.params下能通用的写法主要是choice与rangeinterval只对支持连续分布的 HPO Sweeper如 Optuna有效。三、源码印证一BasicSweeper 如何消费 params内置的 BasicSweeper 通过笛卡尔积方式生成 job。其配置节点声明了params字段dataclass class BasicSweeperConf: _target_: str hydra._internal.core_plugins.basic_sweeper.BasicSweeper max_batch_size: Optional[int] None params: Optional[Dict[str, str]] None运行时的处理链路见 BasicSweeper.sweep拼装 override_parse_config()把params逐项拼成keyvalue字符串源码再追加命令行参数arguments——这正是配置文件写法 命令行写法承诺的实现落点统一解析用OverridesParser.create(config_loader...)解析全部 override笛卡尔积与分批split_arguments()源码对每个 sweep 键展开取值itertools.product生成全部组合再按hydra.sweeper.max_batch_size分批合法性校验每个 batch 在提交给 Launcher 前先经validate_batch_is_legal做配置合成校验定义在 Sweeper 抽象基类尽早暴露合成错误。BasicSweeper 的一个重要边界在split_arguments中体现遇到非离散扫描例如interval会直接抛出HydraException提示BasicSweeper does not support sweep type : ...源码。因此对 BasicSweeper 而言params中只应出现choice(...)、range(...)或逗号分隔的离散列表这类离散扫描。四、源码印证二Optuna Sweeper 的 params → Optuna Distribution 映射文档原文明确提到Check out Optuna Sweeper for more info对应仓库中的 Optuna Sweeper 文档。Optuna Sweeper 是本次变更的典型受益方其插件的 NEWS 也记录Add hydra.sweeper.params and deprecate hydra.sweeper.search_space见 NEWS.md。配置结构OptunaSweeperConf 是hydra/sweeper: optuna的配置节点除params外还提供sampler采样算法默认tpe可选random、cmaes、nsgaii、grid、gp、qmc等均以hydra/sweeper/sampler组名注册direction优化方向minimize/maximize多目标时可用列表storage/study_nameOptuna study 的持久化存储如sqlite:///example.db与名称n_trials默认 20/n_jobs默认 2试验总数与并行 worker 数max_failure_rate允许的批次失败率0.0–1.0custom_search_space以 instantiate 风格的点路径指向Callable[[DictConfig, optuna.Trial], None]的 Python 方法用于自定义试验配置。解析与分布构造OptunaSweeperImpl.sweep源码的处理流程与 BasicSweeper 同构_parse_sweeper_params_config()把params拼为keyvalue列表源码create_params_from_overrides()源码用OverridesParser解析后把每个 override 归类为三类扫描型进入search_space_distributions、固定值进入fixed_params即命令行列出的非扫描 override、删除操作~key进入fixed_overridescreate_optuna_distribution_from_override()源码完成到 Optuna 分布对象的具体映射params 写法Optuna 分布choice(...)CategoricalDistributionrange(...)含浮点参数FloatDistribution带 steprange(...)全整型参数IntDistributionshuffle(range(...))退化为CategoricalDistribution随机序类别interval(a, b)IntDistribution/FloatDistributiontag(log, ...)对应logTrue的对数分布随后若使用的是GridSampler插件会把带 step 的分布展开为离散候选列表注入 sampler并把n_trials自动调整为网格总点数源码命令行列出的固定参数会从搜索空间中剔除避免与trial.params重叠重叠会抛出Overlapping fixed parameters and search space parameters found!。仓库中的真实 1.2 风格配置示例Optuna 示例应用配置 就是迁移后的标准形态可直接作为迁移模板对照defaults: - override hydra/sweeper: optuna - override hydra/sweeper/sampler: tpe hydra: sweeper: sampler: seed: 123 direction: minimize study_name: sphere storage: null n_trials: 20 n_jobs: 1 max_failure_rate: 0.0 params: x: range(-5.5, 5.5, step0.5) y: choice(-5 ,0 ,5) x: 1 y: 1 z: 1注意params里同时混用了区间扫描与类别扫描且x/y正是应用配置里的目标键——这与原文档中 Optuna 迁移示例的参数名完全一致。测试侧同样使用该形态如 Grid 采样测试配置 与 MOTPE 测试配置。五、迁移检查清单结合原文档与仓库实现升级时建议按以下清单核对节点替换确认配置中不再出现hydra.sweeper.search_space搜索空间全部移至hydra.sweeper.params下语法改写把type/low/high/step/choices结构改写成 override 值语法——区间用range(low, high, step...)类别用choice(v1, v2, ...)连续区间才考虑interval(start, end)Sweeper 能力匹配若使用内置 BasicSweeperparams只能包含离散扫描choice/range/逗号列表使用interval会在启动扫描时抛出HydraException见 BasicSweeper 源码固定值与搜索空间不重叠Optuna Sweeper 会把命令行中的非扫描 override 视为固定参数若与params中的键重叠则报错迁移后建议清理命令行的重复项回归验证对每个改动过的配置文件实际跑一次--multirun检查生成的 job 参数是否符合预期BasicSweeper 还会在 sweep 根目录写multirun.yaml便于核对见 BasicSweeper.sweep。六、相关文档与源码索引本文主文档changes_to_sweeper_config.md升级目录upgrades/1.1_to_1.2Optuna Sweeper 插件文档optuna_sweeper.md内置 BasicSweeper 实现basic_sweeper.pySweeper 插件接口sweeper.py扫描函数实现grammar_functions.pyOptuna Sweeper 配置与实现config.py、_impl.pyOptuna 示例与测试配置example/conf/config.yaml、tests/conf/test_grid.yaml【免费下载链接】hydraHydra is a framework for elegantly configuring complex applications项目地址: https://gitcode.com/GitHub_Trending/hyd/hydra创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表