Skip to main content

优化器BOHB

class automation.hpbandster.OptimizerBOHB()

初始化一个BOHB搜索策略优化器 BOHB通过结合Hyperband搜索的速度和贝叶斯优化的指导与收敛保证,在大规模上执行稳健且高效的超参数优化。BOHB不是随机采样新配置,而是使用核密度估计器来选择有希望的候选者。

For reference:
@InProceedings{falkner-icml-18,
title = {{BOHB}: Robust and Efficient Hyperparameter Optimization at Scale},
author = {Falkner, Stefan and Klein, Aaron and Hutter, Frank},
booktitle = {Proceedings of the 35th International Conference on Machine Learning},
pages = {1436--1445},
year = {2018},
}
  • 参数

    • base_task_id (str ) – 任务ID (str)

    • hyper_parameters (列表 ) – 要优化的参数对象列表

    • objective_metric (Objective ) – 要最大化/最小化的目标指标

    • execution_queue (str ) – 用于启动任务(实验)的执行队列。

    • num_concurrent_workers (int ) – 限制并发运行任务(机器)的数量

    • min_iteration_per_job (int ) – 作业运行的最小迭代次数。 ‘iterations’ 是指定目标报告的迭代次数, 而不是任务报告的最大迭代次数。

    • max_iteration_per_job (int ) – 每个作业的迭代次数 ‘iterations’ 是指定目标报告的迭代次数, 而不是任务报告的最大迭代次数。

    • total_max_jobs (int ) – 优化过程中的总最大作业数。 必须提供以计算优化过程的总预算。 总预算以“迭代次数”衡量(见上文) 并将设置为 max_iteration_per_job * total_max_jobs 这意味着可能会创建超过 total_max_jobs 的作业,只要累计迭代次数 (所有创建的作业的总和)不超过 max_iteration_per_job * total_max_jobs

    • pool_period_min (float ) – 两次连续池之间的时间(以分钟为单位)

    • time_limit_per_job (float ) – 可选,每个作业的最大执行时间(以分钟为单位),当超过时间限制时,作业将被中止

    • compute_time_limit (float ) – 最大计算时间,单位为分钟。当超过时间限制时,所有作业将被中止。(可选)

    • local_port (int ) – 默认端口 9090 tcp,这是 BOHB 工作节点进行通信所必需的,即使在本地也是如此。

    • bohb_kwargs (Any) – 直接传递给BOHB对象的参数


创建任务

create_job()

抽象辅助函数。不需要实现。在process_step的默认实现中默认使用 如果需要,创建一个新的工作。返回新创建的工作。如果不需要创建工作,返回None

  • 返回类型

    Optional[ClearmlJob]

  • 返回

    一个新创建的ClearmlJob对象,如果没有创建ClearmlJob则为None。


get_created_jobs_ids

get_created_jobs_ids()

返回由此优化器创建的任务ID字典,包括已完成和正在运行的作业。 返回字典的值是特定作业中使用的参数。

  • 返回类型

    Mapping[str, dict]

  • 返回

    任务ID(str)的字典作为键,它们的参数字典作为值。


获取创建的任务任务

get_created_jobs_tasks()

返回由此优化器创建的任务ID字典,直到现在。 返回的字典的值是ClearmlJob。

  • 返回类型

    Mapping[str, dict]

  • 返回

    任务ID的字典(str)作为键,它们的ClearmlJob作为值。


获取目标指标

get_objective_metric()

返回目标的指标标题和系列对。

  • 返回类型

    Union[Tuple[str, str], List[Tuple[str, str]]]

  • 返回

    (标题, 系列)


获取随机种子

static get_random_seed()

获取所有超参数策略随机数采样的全局种子。

  • 返回类型

    int

  • 返回

    随机种子。


获取正在运行的作业

get_running_jobs()

返回当前正在运行的ClearmlJob。

  • 返回类型

    Sequence[ClearmlJob]

  • 返回

    ClearmlJob 对象列表。


获取顶级实验

获取前k个实验(top_k)

返回基于控制器Objective对象的顶级实验任务的列表。

  • 参数

    top_k (int ) – 返回的任务(实验)数量。

  • 返回类型

    Sequence[Task]

  • 返回

    一个按性能排序的任务对象列表,其中索引0是性能最佳的任务。


获取顶级实验详情

获取顶级实验详情(top_k, all_metrics=False, all_hyper_parameters=False, only_completed=False)

返回表现最佳实验的字典列表。 示例:[{'task_id': Task-ID, 'metrics': scalar-metric-dict, 'hyper_parameters': Hyper-Parameters},]

订单基于控制器Objective对象。

  • 参数

    • top_k (int ) – 返回的任务(实验)数量。

    • all_metrics (bool ) – 默认值为 False,仅在指标字典中返回目标指标。 如果为 True,则返回实验的所有标量指标

    • all_hyper_parameters (bool ) – 默认值为 False。如果为 True,则返回所有部分的所有超参数。

    • only_completed (bool ) – 仅返回已完成的任务。默认值为 False。

  • 返回类型

    序列[(字符串, 字典)]

  • 返回

    一个字典列表 ({task_id: '', hyper_parameters: {}, metrics: {}}),按性能排序,其中索引0是表现最好的任务。 示例 w/ all_metrics=False:

    [
    {
    task_id: '0593b76dc7234c65a13a301f731958fa',
    hyper_parameters: {'General/lr': '0.03', 'General/batch_size': '32'},
    metrics: {
    'accuracy per class/cat': {
    'metric': 'accuracy per class',
    'variant': 'cat',
    'value': 0.119,
    'min_value': 0.119,
    'max_value': 0.782
    },
    }
    },
    ]

    示例 w/ all_metrics=True:

    [
    {
    task_id: '0593b76dc7234c65a13a301f731958fa',
    hyper_parameters: {'General/lr': '0.03', 'General/batch_size': '32'},
    metrics: {
    'accuracy per class/cat': {
    'metric': 'accuracy per class',
    'variant': 'cat',
    'value': 0.119,
    'min_value': 0.119,
    'max_value': 0.782
    },
    'accuracy per class/deer': {
    'metric': 'accuracy per class',
    'variant': 'deer',
    'value': 0.219,
    'min_value': 0.219,
    'max_value': 0.282
    },
    }
    },
    ]

获取顶级实验ID和指标对

获取顶部实验ID和指标对(top_k, all_metrics=False, only_completed=False)

返回表现最佳实验的(任务ID,标量指标字典)对列表。顺序基于控制器Objective对象。

  • 参数

    • top_k (int ) – 返回的任务(实验)数量。

    • all_metrics (bool ) – 默认值为 False,仅在指标字典中返回目标指标。 如果为 True,则返回实验的所有标量指标

    • only_completed (bool ) – 仅返回已完成的任务。默认值为 False。

  • 返回类型

    序列[(字符串, 字典)]

  • 返回

    按性能排序的成对列表(任务ID,指标值字典),

其中索引0是表现最好的任务。 示例 w/ all_metrics=False:

[
('0593b76dc7234c65a13a301f731958fa',
{
'accuracy per class/cat': {
'metric': 'accuracy per class',
'variant': 'cat',
'value': 0.119,
'min_value': 0.119,
'max_value': 0.782
},
}
),
]

示例 w/ all_metrics=True:

[
('0593b76dc7234c65a13a301f731958fa',
{
'accuracy per class/cat': {
'metric': 'accuracy per class',
'variant': 'cat',
'value': 0.119,
'min_value': 0.119,
'max_value': 0.782
},
'accuracy per class/deer': {
'metric': 'accuracy per class',
'variant': 'deer',
'value': 0.219,
'min_value': 0.219,
'max_value': 0.282
},
}
),
]

helper_create_job

**helper_create_job(base_task_id, parameter_override=None, task_overrides=None, tags=None, parent=None, kwargs)

使用指定的参数创建一个作业,详情请参见ClearmlJob

  • 返回类型

    ClearmlJob

  • 返回

    一个新创建的Job实例。

  • 参数

    • base_task_id (str ) –

    • parameter_override (可选 [ 映射 [ str *, * str ] ] ) –

    • task_overrides (可选 [ 映射 [ str *, * str ] ] ) –

    • 标签 (可选 [ 序列 [ 字符串 ] ] ) –

    • parent (可选 [ str ] ) –

    • kwargs (任意 ) –


监控任务

监控任务(job)

辅助函数,不需要实现。默认在process_step的默认实现中使用。 检查作业是否需要中止或已经完成。

如果返回 False,则作业已中止/完成,应从当前作业列表中移除。

如果有预算限制,此调用应更新 self.budget.compute_time.update / self.budget.iterations.update

  • 参数

    job (ClearmlJob ) – 一个要监控的 ClearmlJob 对象。

  • 返回类型

    bool

  • 返回

    如果工作不再相关,则为False。


处理步骤

process_step()

抽象辅助函数。不需要实现。默认使用在启动默认实现中 主优化循环,由start创建的守护线程调用。

  • 在每个ClearmlJob上调用监控任务:

    • 检查性能或经过的时间,然后决定是否终止任务。
  • 调用 create_job:

    • 检查是否存在空闲的工作槽,如果存在,则根据之前测试的实验创建一个新的工作。
  • 返回类型

    bool

  • 返回

    如果继续优化,则为True。如果立即停止,则为False。


设置作业类

设置作业类别(job_class)

设置用于helper_create_job函数的类。

  • 参数

    job_class (ClearmlJob ) – 作业类类型。

  • 返回类型

    ()


设置作业默认父级

set_job_default_parent(job_parent_task_id, project_name=None)

设置由helper_create_job方法创建的所有作业的默认父级。

  • 参数

    • job_parent_task_id (str ) – 父任务ID。

    • project_name (str ) – 如果指定,则在指定的项目中创建作业

  • 返回类型

    ()


设置作业命名方案

set_job_naming_scheme(naming_function)

设置用于命名新创建作业的函数。

  • 参数

    naming_function (callable) – 用于命名新创建作业的可调用函数。 使用以下格式:

    naming_functor(base_task_name, argument_dict) -> str
  • 返回类型

    ()


set_optimization_args

set_optimization_args(eta=3, min_budget=None, max_budget=None, min_points_in_model=None, top_n_percent=15, num_samples=None, random_fraction=0.3333333333333333, bandwidth_factor=3, min_bandwidth=0.001)

默认值从BOHB构造函数复制,详情请参见BOHB.init

BOHB通过将Hyperband搜索的速度与贝叶斯优化的指导和收敛保证相结合,实现了大规模、稳健且高效的超参数优化。BOHB不是随机采样新配置,而是使用核密度估计器来选择有潜力的候选配置。

For reference:
@InProceedings{falkner-icml-18,
title = {{BOHB}: Robust and Efficient Hyperparameter Optimization at Scale},
author = {Falkner, Stefan and Klein, Aaron and Hutter, Frank},
booktitle = {Proceedings of the 35th International Conference on Machine Learning},
pages = {1436--1445},
year = {2018},
}
  • 参数

    • eta (float ) – float (3) 在每次迭代中,都会执行一次完整的顺序减半运行。在其中, 在相同的子集大小上评估每个配置后,只有其中的1/eta部分会“晋级”到下一轮。 必须大于或等于2。

    • min_budget (可选 [ 浮点数 ] ) – 浮点数 (0.01) 要考虑的最小预算。必须为正数!

    • max_budget (可选 [ float ] ) – float (1) 考虑的最大预算。需要大于min_budget! 预算将按几何分布 $a^2 + b^2 = c^2 /sim /eta^k$ 对于 $k/in [0, 1, ... , num/_subsets - 1]$。

    • min_points_in_model (可选 [ int ] ) – int (None) 开始构建KDE所需的观测数量。默认值‘None’表示 dim+1,即最低要求。

    • top_n_percent (可选 [ int ] ) – int (15) 被认为是良好的观测值的百分比(介于1和99之间,默认值为15)。

    • num_samples (可选 [ int ] ) – int (64) 用于优化EI的样本数量(默认64)

    • random_fraction (可选 [ float ] ) – float (1/3.) 从先验中采样的纯随机配置的比例,不使用模型。

    • bandwidth_factor (可选 [ 浮点数 ] ) – 浮点数 (3.) 为了鼓励多样性,建议优化EI的点是从一个“加宽”的KDE中采样的,其中带宽乘以这个因子(默认值:3)

    • min_bandwidth (可选 [ float ] ) – float (1e-3) 为了保持多样性,即使所有(好的)样本在其中一个参数上具有相同的值, 也会使用最小带宽(默认值:1e-3)而不是零。

  • 返回类型

    ()


设置优化器任务

设置优化器任务(task)

设置优化器任务对象,用于存储/生成优化过程的报告。 通常这是此进程的当前任务。

  • 参数

    任务 (任务 ) – 优化器当前的任务。

  • 返回类型

    ()


设置随机种子

static set_random_seed(seed=1337)

为所有超参数策略的随机数采样设置全局种子。

  • 参数

    seed (int ) – 随机种子。

  • 返回类型

    ()


开始

start()

启动优化器控制器函数 loop() 如果调用进程停止,控制器也会停止。

important

此函数仅在优化完成或调用停止后返回。

  • 返回类型

    ()


停止

stop()

停止当前正在运行的优化循环, 从与start不同的线程调用。

  • 返回类型

    ()