资讯详情

Hydra Nevergrad Sweeper 插件实战:用无导数优化算法自动搜索超参数

发布时间:2026/9/16 19:45:40

500+
企业客户服务经验
120+
行业领域内容覆盖
3000+
原创页面设计沉淀
98%
客户满意度

Hydra Nevergrad Sweeper 插件实战:用无导数优化算法自动搜索超参数

Hydra Nevergrad Sweeper 插件实战用无导数优化算法自动搜索超参数【免费下载链接】hydraHydra is a framework for elegantly configuring complex applications项目地址: https://gitcode.com/GitHub_Trending/hyd/hydra本指南完整讲解 Hydra 生态中的hydra-nevergrad-sweeper插件它让 Hydra 应用能够调用 Nevergrad 无导数优化平台中一系列先进的超参数搜索算法在--multirun模式下对实验/应用参数进行智能寻优。读完本文你将掌握该插件的安装激活方式、完整配置项含义、命令行与配置文件两种搜索空间定义语法并能结合仓库中的示例应用跑通一次端到端优化、读懂optimization_results.yaml输出结果。插件概述从网格/随机搜索到智能寻优Hydra 自身的 Basic Sweeper 提供的是网格与随机组合搜索而 Nevergrad 则是一个无导数优化平台内置了大量状态先进的超参数搜索算法如进化策略、CMA-ES 类算法、差分进化等。hydra-nevergrad-sweeper将两者衔接起来Hydra 负责配置组合、任务函数注入与并行调度Nevergrad 负责下一个候选参数怎么生成即根据历史评估结果自适应地选择更优的方向从而用远少于网格搜索的预算逼近最优参数。从源码看插件的核心实现位于 nevergrad_sweeper.py其NevergradSweeper类实现了 Hydra 的 Sweeper 接口内部委托给NevergradSweeperImpl见 _impl.py完成优化循环optimizer.ask()取候选参数 →launcher.launch()并行评估 →optimizer.tell()回传损失 → 循环直至预算耗尽 → 输出推荐结果。安装与激活安装插件会同时拉取hydra-core与nevergrad依赖仓库 setup.py 中声明了hydra-core1.1.0.dev7、nevergrad1.0.12且要求 Python 3.10pip install hydra-nevergrad-sweeper --upgrade激活方式有两种任选其一方式一命令行指定适合一次性使用python your_app.py hydra/sweepernevergrad -m方式二在配置文件的defaults中声明适合作为项目的默认寻优方案defaults: - hydra/sweeper: nevergrad激活后可用下面的命令查看该 sweeper 的默认配置文档中原样给出的参数即为 config.py 中NevergradSweeperConf的默认值# package hydra.sweeper _target_: hydra_plugins.hydra_nevergrad_sweeper.nevergrad_sweeper.NevergradSweeper optim: optimizer: OnePlusOne budget: 80 num_workers: 10 noisy: false maximize: false seed: null parametrization: {} version: 1说明仓库当前源码的默认配置与文档快照略有演进——config.py 中optimizer默认值已改为NGOpt并新增了max_failure_rate: 0.0参数同时用params取代了旧字段parametrization后者保留但标记为弃用两者不可同时配置。下表以当前仓库源码为准。优化器配置项hydra.sweeper.optim.*配置项类型默认值含义optimizerstrNGOpt旧文档快照为OnePlusOneNevergrad 优化器名称可从ng.optimizers.registry中取值budgetint80函数评估job 运行的总预算次数num_workersint10并行 worker 数控制每批同时评估多少个参数组合noisyboolfalse目标函数是否含噪声含噪时优化器会采用抗噪策略maximizeboolfalse置true时执行最大化而非最小化seedOptional[int]null随机种子用于结果复现max_failure_ratefloat0.0一批参数中允许的最大失败率超过则抛错终止config.py 的注释给出了常用优化器的选型建议OnePlusOne极其简单且稳健尤其适合低预算但容易过早收敛CMA非常优秀的算法但通常需要较显著预算如 120 次评估TwoPointsDE在广泛场景下表现良好适合较大预算 120 次评估NGOpt旨在根据你的参数定义自动挑选最优优化器会定期更新适合不确定选型的场景。搜索空间配置项hydra.sweeper.params.*配置项说明params当前推荐的搜索空间配置方式使用 Hydra 的 override 语法描述参数如db: choice(mnist, cifar)parametrization旧字段已弃用Hydra 1.4 起告警、1.5 移除仅接受列表Choice或 Scalar 字典两种结构不可与params同时使用示例用 Nevergrad 做一次端到端超参寻优仓库在 plugins/hydra_nevergrad_sweeper/example 下提供了一个可直接运行的示例。目标函数由 my_app.py 定义是一个最小值为 0 的伪训练函数真实值为 0最优解位于dbmnist, lr0.12, dropout0.33, batch_size4hydra.main(config_path., config_nameconfig) def dummy_training(cfg: DictConfig) - float: do cfg.dropout bs cfg.batch_size out float( abs(do - 0.33) int(cfg.db mnist) abs(cfg.lr - 0.12) abs(bs - 4) ) log.info(fdummy_training(dropout{do:.3f}, lr{cfg.lr:.3f}, db{cfg.db}, batch_size{bs}) {out:.3f}) if cfg.error: raise RuntimeError(cfg.error is True) return out注意三点① 被hydra.main()装饰的函数必须返回一个 float作为优化目标值越小越好除非设置maximize: true②cfg.error字段用于演示job 失败场景③ 示例配置 config.yaml 通过- override hydra/sweeper: nevergrad预置了 sweeper并给出了 4 个参数的搜索空间定义。克隆仓库代码后在plugins/hydra_nevergrad_sweeper目录下执行python example/my_app.py -m启动后日志会依次展示初始化信息、并行批次与最终最优参数文档给出的真实运行片段预算 100、10 个并行 worker[2020-10-08 20:13:53,592][HYDRA] NevergradSweeper(optimizerOnePlusOne, budget100, num_workers10) minimization [2020-10-08 20:13:53,593][HYDRA] with parametrization Dict(batch_sizeChoice(choicesTuple(4,8,16),weightsArray{(1,3)}),dbChoice(choicesTuple(mnist,cifar),weightsArray{(1,2)}),dropoutScalar{Cl(0,1,b)}[sigmaLog{exp2.0}],lrLog{exp3.162277660168379,Cl(0.001,1,b)}):{db: mnist, lr: 0.03162277660168379, dropout: 0.5, batch_size: 8} [2020-10-08 20:13:53,593][HYDRA] Sweep output dir: multirun/2020-10-08/20-13-53 [2020-10-08 20:13:55,023][HYDRA] Launching 10 jobs locally [2020-10-08 20:13:55,023][HYDRA] #0 : dbmnist lr0.03162277660168379 dropout0.5 batch_size16 [2020-10-08 20:13:55,217][__main__][INFO] - dummy_training(dropout0.500, lr0.032, dbmnist, batch_size16) 13.258 [2020-10-08 20:13:55,218][HYDRA] #1 : dbcifar lr0.018178519762066934 dropout0.5061074452336254 batch_size4 [2020-10-08 20:13:55,408][__main__][INFO] - dummy_training(dropout0.506, lr0.018, dbcifar, batch_size4) 0.278 [2020-10-08 20:13:55,409][HYDRA] #2 : dbcifar lr0.10056825918734161 dropout0.6399687427725211 batch_size4 [2020-10-08 20:13:55,595][__main__][INFO] - dummy_training(dropout0.640, lr0.101, dbcifar, batch_size4) 0.329 [2020-10-08 20:13:55,596][HYDRA] #3 : dbmnist lr0.06617542958182834 dropout0.5059497416026679 batch_size8 [2020-10-08 20:13:55,812][__main__][INFO] - dummy_training(dropout0.506, lr0.066, dbmnist, batch_size8) 5.230 [2020-10-08 20:13:55,813][HYDRA] #4 : dbmnist lr0.16717013388679514 dropout0.6519070394318255 batch_size4 ... [2020-10-08 20:14:27,988][HYDRA] Best parameters: dbcifar lr0.11961221693764439 dropout0.37285878409770895 batch_size4优化后期收敛日志展示最后 2 次评估此时已围绕最优解微调[HYDRA] #8 : dbmnist batch_size4 lr0.094 dropout0.381 [__main__][INFO] - my_app.py(dropout0.381, lr0.094, dbmnist, batch_size4) 1.077 [HYDRA] #9 : dbmnist batch_size4 lr0.094 dropout0.381 [__main__][INFO] - my_app.py(dropout0.381, lr0.094, dbmnist, batch_size4) 1.077 [HYDRA] Best parameters: dbmnist batch_size4 lr0.094 dropout0.381用命令行覆盖搜索空间不修改任何配置文件直接通过 Hydra 的 override 语法重定义搜索空间示例中db与batch_size用列表/范围表达离散选项lr用对数区间、dropout用线性区间python example/my_app.py --multirun dbmnist,cifar batch_size4,8,16 \ lrtag(log, interval(0.001, 1)) dropoutinterval(0,1)理解optimization_results.yaml优化结束后sweep 目录下会生成optimization_results.yaml记录优化器给出的最终推荐由 _impl.py 写入best_evaluated_result: 0.381 best_evaluated_params: batch_size: 4 db: mnist dropout: 0.381 lr: 0.094 name: nevergrad字段含义best_evaluated_result为历史评估中最优的目标函数值注意maximize: true时此处为去符号后的原始值见源码中direction * best[0]的处理best_evaluated_params为该最优结果对应的参数组合name固定为nevergrad便于下游脚本识别。测试 test_nevergrad_sweeper_plugin.py 会校验该文件的name nevergrad、包含 3 个键且best_evaluated_params.batch_size收敛到 4。定义搜索空间两种方式详解插件支持两类 Nevergrad 参数ng.p.Choice。方式一命令行 override这依赖 Hydra 自带的富语法 override 解析器建议先阅读 Override 语法基础 与 Override 语法扩展。Choices离散选项key1,5 keyshuffle(range(1, 8)) keyrange(1,5)用ordered标签可将选择转换为ng.p.TransitionChoice有序传递选择适合相邻取值有相似性的场景如学习率档位keytag(ordered, choice(1,2,3))Scalar连续标量keyinterval(1,12) # Interval 默认是 float keyint(interval(1,8)) # 将 Scalar 边界转为 int整数离散化 keytag(log, interval(1,12)) # 带 log 标签则调用 ng.p.Log对数分布这些语法与解析器的对应关系可以在插件的参数映射函数create_nevergrad_parameter_from_override_impl.py与单元测试用例test_nevergrad_sweeper_plugin.py中找到一一验证如keychoice(1,2)→ng.p.Choice([1,2])、keytag(ordered, choice(1,2,3))→ng.p.TransitionChoice([1,2,3])、keyrange(1,5)→ng.p.Choice([1,2,3,4])、keyint(interval(1,12))→ 整数化的ng.p.Scalar、keytag(log, interval(1,12))→ng.p.Log。方式二配置文件Choices离散选项直接写一个 YAML 列表即可db: - mnist - cifarScalar连续标量用一个字典描述可用的字段如下对应 config.py 中的ScalarConfigSpec字段说明init可选初始值lower可选下界upper可选上界log置true时采用对数分布取值step可选搜索步长线性模式下为加性步长对数模式下为乘性步长integer置true时取值限定为整数优先使用 float 而非整数关键行为只提供lower与upper时init自动取区间中点step自动取区间长度的六分之一。另外注意无界标量缺省lower和/或upper只能通过配置文件定义命令行 override 无法表达无界区间。示例配置中三种标量的实际写法config.yaml# 一个对数分布的连续正标量平均按 2 倍因子演变 lr: {init: 0.02, step: 2.0, log: true} # 一个 0 到 1 之间线性分布的标量 dropout: interval(0, 1) # 一个 4 到 16 的整数标量init 与 step 缺省时取中点与区间六分之一 batch_size: int(interval(4, 16))配置式与命令行式的混合能力也在测试中被覆盖params中值为字符串如choice(1,2,3)的项会被当作 override 追加解析值为字典/列表的项则直接转成 Nevergrad 参数见 _impl.py 与 test_nevergrad_sweeper_plugin.py。优化循环的内部机制与失败处理从源码看一次完整的寻优由NevergradSweeperImpl.sweep()_impl.py驱动核心流程如下合并params/parametrization配置与命令行 overrides逐一映射为 Nevergrad 参数组装成ng.p.Dict参数化对象依据noisy与seed设置parametrization.function.deterministic与随机种子实现可复现实验从ng.optimizers.registry[optimizer]实例化优化器传入budget与num_workers循环每轮optimizer.ask()生成min(num_workers, 剩余预算)个候选转成 override 后交给 Hydra Launcher 并行启动 job收集返回的目标值失败 job 计为inf调用optimizer.tell()反馈损失并维护历史最优若一批任务中失败率超过max_failure_rate直接抛出异常终止缺省 0.0 即不允许失败预算耗尽后optimizer.provide_recommendation()给出最终推荐写入optimization_results.yaml并打印Best parameters:。失败处理的行为差异有测试专门验证test_nevergrad_sweeper_plugin.py当max_failure_rate1.0时失败 job 只记录日志Returning infinity for failed experiment不中断优化低于 1.0 时则重新抛出真实异常栈。这为真实训练中偶发的 job 崩溃提供了容错选项。小结与最佳实践无导数优化 ≠ 网格搜索在评估代价高昂的场景真实训练、仿真下用budget控制评估次数、num_workers控制并行度通常能以远小于全网格搜索的开销逼近最优参数。预算紧张优先选OnePlusOne预算充足可尝试CMA/TwoPointsDE/NGOptseed固定后结果可复现。参数类型上优先使用 float 而非 integer整数离散化会限制优化器效率无界标量只能写在配置文件里。若任务可能失败适当调高max_failure_rate让优化继续而非整体中断。更多验证与进阶用法可直接阅读仓库的 测试用例 与插件 源码以及示例应用 config.yaml。【免费下载链接】hydraHydra is a framework for elegantly configuring complex applications项目地址: https://gitcode.com/GitHub_Trending/hyd/hydra创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
热门专题

继续阅读更多专题内容

围绕企业服务、数字化转型与官网运营的常青话题,持续输出深度内容

企业官网建设指南 企业托管服务模式 财税政策与解读 企业数字化转型 官网SEO与获客 网站安全与运维
配套服务

读完这篇文章,了解更多服务

从整站搭建到SEO布局,17项核心服务助您打造高转化的企业官网

01

企业托管整站搭建

从信息架构到栏目预留,搭建可生长的企业站点骨架,每个页面独立原创设计。...

了解详情
02

规整可信网页设计

雪地靴温暖风原创设计,金属铜线条贯穿全页,拒绝通用模板与AI流水线。...

了解详情
03

企业服务SEO布局

关键词体系与语义化结构,从建站源头为搜索排名而生。...

了解详情
04

业务预约咨询表单

多场景表单与线索收集体系,把访问流量转化为可追踪的销售线索。...

了解详情
05

企业服务站点运维

安全巡检、数据备份与内容更新支持,全年守护网站稳定运行。...

了解详情
06

全终端商务适配

电脑、平板、手机一致呈现,移动端体验与转化同样出色。...

了解详情
需要专业建议?

让专业顾问为您解读行业趋势

关于企业官网建设、SEO获客与数字化转型的任何疑问,欢迎一对一咨询我们的专业顾问。