详解使用wandb的sweep进行超参调优的步骤
wandb.sweep: 低代码,可视化,分布式 自动调参工具。
使用wandb 的 sweep 进行超参调优,具有以下优点。
(1)低代码:只需配置一个sweep.yaml配置文件,或者定义一个配置dict,几乎不用编写调参相关代码。
(2)可视化:在wandb网页中可以实时监控调参过程中每次尝试,并可视化地分析调参任务的目标值分布,超参重要性等。
(3)分布式:sweep采用类似master-workers的controller-agents架构,controller在wandb的服务器机器上运行,agents在用户机器上运行,controller和agents之间通过互联网进行通信。同时启动多个agents即可轻松实现分布式超参搜索。
使用 wandb 的sweep 调参的缺点:
需要联网:由于wandb的controller位于wandb的服务器机器上,wandb日志也需要联网上传,在没有互联网的环境下无法正常使用wandb 进行模型跟踪 以及 wandb sweep 可视化调参。
使用Sweep的3步骤
一. 配置 Sweep config
详细配置文档可以参考:https://docs.wandb.ai/guides/sweeps/define-sweep-configuration
1,选择一个调优算法
Sweep支持如下3种调优算法:(1)网格搜索:grid. 遍历所有可能得超参组合,只在超参空间不大的时候使用,否则会非常慢。(2)随机搜索:random. 每个超参数都选择一个随机值,非常有效,一般情况下建议使用。(3)贝叶斯搜索:bayes. 创建一个概率模型估计不同超参数组合的效果,采样有更高概率提升优化目标的超参数组合。对连续型的超参数特别有效,但扩展到非常高维度的超参数时效果不好。
2,定义调优目标
设置优化指标,以及优化方向。
sweep agents 通过 wandb.log 的形式向 sweep controller 传递优化目标的值。
3,定义超参空间
超参空间可以分成 固定型,离散型和连续型。
- 固定型:指定 value
- 离散型:指定 values,列出全部候选取值。
- 连续性:需要指定 分布类型 distribution, 和范围 min, max。用于 random 或者 bayes采样。
4,定义剪枝策略 (可选)
可以定义剪枝策略,提前终止那些没有希望的任务。
二. 初始化 sweep controller
三, 启动 Sweep agent
我们需要把模型训练相关的全部代码整理成一个 train函数。
一切准备妥当,点火🔥🔥。
四,调参可视化和跟踪
1,平行坐标系图
可以直观展示哪些超参数组合更加容易获取更好的结果。
2,超参数重要性图
可以显示超参数和优化目标最终取值的重要性,和相关性方向。