跳到主要内容

OptimizerBOHB

class automation.hpbandster.OptimizerBOHB(base_task_id, hyper_parameters, objective_metric, execution_queue, num_concurrent_workers, min_iteration_per_job, max_iteration_per_job, total_max_jobs, pool_period_min=2.0, time_limit_per_job=None, compute_time_limit=None, local_port=9090, **bohb_kwargs)

初始化 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 (list ) – 需要优化的 Parameter 对象列表

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

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

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

    • min_iteration_per_job (int ) – 每个作业运行的最少迭代次数。这里的“迭代次数”是指指定目标所报告的迭代次数,而不是任务报告的最大迭代次数。

    • max_iteration_per_job (int ) – 每个作业的迭代次数。这里的“迭代次数”是指指定目标所报告的迭代次数,而不是任务报告的最大迭代次数。

    • 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 对象的参数

  • 返回类型

    None


create_job

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

get_created_jobs_tasks()

返回此优化器迄今为止创建的任务 ID 字典。返回字典的值是 ClearmlJob。

  • 返回类型

    Mapping[str, dict]

  • 返回

    以任务 ID (str) 为键,以其 ClearmlJob 为值的字典。


get_objective_metric

get_objective_metric()

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

  • 返回类型

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

  • 返回

    (title, series)


get_random_seed

static get_random_seed()

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

  • 返回类型

    int

  • 返回

    随机种子。


get_running_jobs

get_running_jobs()

返回当前正在运行的 ClearmlJob。

  • 返回类型

    Sequence[ClearmlJob]

  • 返回

    ClearmlJob 对象列表。


get_top_experiments

get_top_experiments(top_k)

根据控制器的 Objective 对象,返回表现最佳的实验的任务列表。

  • 参数

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

  • 返回类型

    Sequence[Task]

  • 返回

    Task 对象列表,按性能排序,索引 0 是表现最佳的任务。


get_top_experiments_details

get_top_experiments_details(top_k, all_metrics=False, all_hyper_parameters=False, only_completed=False)

返回表现最佳实验的字典列表。示例:[{'task_id': 任务 ID, 'metrics': 标量指标字典, 'hyper_parameters': 超参数},]

顺序基于控制器的 Objective 对象。

  • 参数

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

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

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

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

  • 返回类型

    Sequence[Union[str, dict]]

  • 返回

    字典列表 ({task_id: '', hyper_parameters: {}, metrics: {}}),按性能排序,索引 0 是表现最佳的任务。示例 (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
    },
    }
    },
    ]

    示例 (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
    },
    }
    },
    ]

get_top_experiments_id_metrics_pair

get_top_experiments_id_metrics_pair(top_k, all_metrics=False, only_completed=False)

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

  • 参数

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

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

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

  • 返回类型

    Sequence[Union[str, dict]]

  • 返回

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

索引 0 是表现最佳的任务。示例 (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
},
}
),
]

示例 (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

  • 返回

    新创建的作业实例。

  • 参数

    • base_task_id (str ) –

    • parameter_override (Optional [ Mapping [ str *, * str ] ] ) –

    • task_overrides (Optional [ Mapping [ str *, * str ] ] ) –

    • tags (Optional [ Sequence [ str ] ] ) –

    • parent (Optional [ str ] ) –

    • kwargs (Any ) –


monitor_job

monitor_job(job)

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

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

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

  • 参数

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

  • 返回类型

    bool

  • 返回

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


process_step

process_step()

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

  • 对 jobs 中的每个 ClearmlJob 调用 monitor job

    • 检查性能或经过时间,然后决定是否终止作业。
  • 调用 create_job

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

    bool

  • 返回

    True 表示继续优化。False 表示立即停止。


set_job_class

set_job_class(job_class)

设置 helper_create_job 函数使用的类。

  • 参数

    job_class (ClearmlJob ) – 作业类类型。

  • 返回类型

    ()


set_job_default_parent

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

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) – 浮点数 (3) 在每次迭代中,都会执行完整的顺序减半(sequential halving)。其中,在相同子集大小上评估每个配置后,只有其中 1/eta 的一部分会“晋级”到下一轮。必须大于或等于 2。

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

    • max_budget (Optional[float]) – 浮点数 (1) 要考虑的最大预算。必须大于 min_budget!预算将按几何分布 $a^2 + b^2 = c^2 /sim /eta^k$,其中 $k/in [0, 1, ... , num/_subsets - 1]$。

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

    • top_n_percent (Optional[int]) – 整数 (15) 观测值中被认为是“好”的百分比(介于 1 到 99 之间,默认为 15)。

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

    • random_fraction (Optional[float]) – 浮点数 (1/3.) 从先验分布中纯随机采样(不使用模型)的配置比例。

    • bandwidth_factor (Optional[float]) – 浮点数 (3.) 为了鼓励多样性,用于优化 EI 的提议点从一个“加宽的”KDE 中采样,其带宽乘以该因子(默认为 3)

    • min_bandwidth (Optional[float]) – 浮点数 (1e-3) 为了保持多样性,即使所有(好的)样本对于某个参数具有相同的值,也会使用最小带宽(默认为 1e-3)而非零值。

  • 返回类型

    ()


set_optimizer_task

set_optimizer_task(task)

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

  • 参数

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

  • 返回类型

    ()


set_random_seed

static set_random_seed(seed=1337)

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

  • 参数

    seed (int ) – 随机种子。

  • 返回类型

    ()


start

start()

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

重要

此函数只有在优化完成或调用 stop 后才会返回。

  • 返回类型

    ()


stop

stop()

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

  • 返回类型

    ()