Skip to main content

超参数优化

什么是超参数优化?

超参数是直接控制训练算法行为的变量,对最终机器学习模型的性能有显著影响。找到能产生最佳性能模型的超参数值可能很复杂。在许多训练试验过程中手动调整超参数可能既缓慢又繁琐。幸运的是,您可以使用ClearML的HyperParameterOptimizer类来自动化和加速超参数优化(HPO)。

ClearML的超参数优化

ClearML 提供了 HyperParameterOptimizer 类,它通过一个简单的界面为用户处理整个优化过程。

ClearML的超参数优化方法具有可扩展性,易于设置和管理,并且使得结果比较变得容易。

工作流程

超参数优化图

前面的图表展示了超参数优化的典型流程,其中基础任务的参数被优化:

  1. 配置一个优化任务,包括一个基础任务(其参数将被优化)、优化目标以及一组要测试的参数值
  2. 克隆基础任务。每个克隆的参数都会被优化任务中的值覆盖
  3. 将每个克隆加入队列,由ClearML代理执行
  4. 优化任务记录并监控克隆任务的配置和执行细节,并以表格和平行坐标格式以及标量图的形式返回优化结果的摘要。

优化结果汇总图表

平行坐标

标量

支持的优化器

HyperParameterOptimizer 类包含了 ClearML 的超参数优化模块。其模块化设计使得可以使用不同的优化器,包括现有的软件框架,从而实现简单、准确和快速的超参数优化。

定义超参数优化搜索示例

  1. 导入ClearML的自动化模块:

    from clearml.automation import UniformParameterRange, UniformIntegerParameterRange
    from clearml.automation import HyperParameterOptimizer
    from clearml.automation.optuna import OptimizerOptuna
  2. 初始化任务,当代码运行时,它将被存储在ClearML服务器中。代码至少运行一次后,可以重现,并且可以调整参数:

    from clearml import Task

    task = Task.init(
    project_name='Hyper-Parameter Optimization',
    task_name='Automatic Hyper-Parameter Optimization',
    task_type=Task.TaskTypes.optimizer,
    reuse_last_task_id=False
    )
  3. 定义优化配置和资源预算:

    optimizer = HyperParameterOptimizer(
    # specifying the task to be optimized, task must be in system already so it can be cloned
    base_task_id=TEMPLATE_TASK_ID,
    # setting the hyperparameters to optimize
    hyper_parameters=[
    UniformIntegerParameterRange('number_of_epochs', min_value=2, max_value=12, step_size=2),
    UniformIntegerParameterRange('batch_size', min_value=2, max_value=16, step_size=2),
    UniformParameterRange('dropout', min_value=0, max_value=0.5, step_size=0.05),
    UniformParameterRange('base_lr', min_value=0.00025, max_value=0.01, step_size=0.00025),
    ],
    # setting the objective metric we want to maximize/minimize
    objective_metric_title='accuracy',
    objective_metric_series='total',
    objective_metric_sign='max',

    # setting optimizer
    optimizer_class=OptimizerOptuna,

    # configuring optimization parameters
    execution_queue='default',
    max_number_of_concurrent_tasks=2,
    optimization_time_limit=60.,
    compute_time_limit=120,
    total_max_jobs=20,
    min_iteration_per_job=15000,
    max_iteration_per_job=150000,
    )
    Locating Task ID

    要定位基础任务的ID,请前往WebApp中的任务信息面板。ID会显示在任务标题中。

    Multi-objective Optimization

    如果您正在使用Optuna框架(请参阅支持的优化器),您可以列出多个优化目标。 这样做时,请确保objective_metric_titleobjective_metric_seriesobjective_metric_sign列表 长度相同。每个标题将与其相应的系列和符号匹配。

    例如,下面的代码设置了两个目标:最小化validation/loss指标和最大化validation/accuracy指标。

    objective_metric_title=["validation", "validation"]
    objective_metric_series=["loss", "accuracy"]
    objective_metric_sign=["min", "max"]

优化器执行选项

HyperParameterOptimizer 提供了在本地或通过 ClearML queue 启动优化任务的选项。 使用 HyperParameterOptimizer.start()HyperParameterOptimizer.start_locally() 启动 HyperParameterOptimizer 实例。 这两种方法都在本地运行优化器控制器。start() 通过实例化控制器时指定的队列启动基础任务克隆,而 start_locally() 则在本地运行任务。

Remote Execution

你也可以通过队列启动优化器控制器,在启动优化器之前使用Task.execute_remotely()

教程

查看超参数优化教程以获取逐步指南。

SDK 参考

有关详细信息,请参阅完整的HyperParameterOptimizer SDK参考页面

命令行界面

ClearML 还提供了 clearml-param-search,一个用于管理超参数优化过程的 CLI 工具。更多信息请参见 ClearML Param Search

UI 应用程序

Pro Plan Offering

ClearML HPO 应用程序可在 ClearML Pro 计划下使用。

ClearML 提供了 超参数优化 GUI 应用程序 用于启动和管理超参数优化过程。