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
。
-
返回类型
-
返回
新创建的作业实例。
-
参数
-
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
不同的线程调用。
-
返回类型
()