Worker – HpBandster 的“肌肉”¶
-
class
hpbandster.core.worker.
Worker
(run_id, nameserver=None, nameserver_port=None, logger=None, host=None, id=None, timeout=None)[source]¶ Worker 负责一次性评估单个配置在单个预算下的表现。与各个 Worker 的通信通过 nameserver 进行,Worker 池的管理和作业调度由 Dispatcher 完成,而作业的确定由 Master 负责。在分布式系统中,每个集群节点运行一个 Worker 实例。要实现自己的 Worker,需要覆盖 __init__ 方法和 compute 方法。前者允许在 Worker 启动时执行初始计算,例如加载数据集;后者在优化过程中重复调用,评估给定的配置并返回相关的损失。
参数 - run_id (任何具有 __str__ 方法的对象) – 唯一的 ID,用于标识单个 HpBandSter 运行
- nameserver (str) – nameserver 的主机名或 IP 地址
- nameserver_port (int) – nameserver 的端口
- logger (logging.logger 实例) – 用于调试输出的日志记录器
- host (str) – 此 Worker 进程的主机名
- id (任何具有 __str__方法的对象) – 如果在同一进程中启动多个 Worker,则必须使用 id 参数为每个 Worker 提供一个唯一的 ID。
- timeout (int 或 float) – 指定 Worker 在完成计算后等待新作业的时间,超时后会关闭。在长时间运行且有多个 Worker 的情况下,这有助于关闭闲置的 Worker。建议设置的超时时间大约是完成次大预算所需时间的一半。默认值 (None) 意味着 Worker 将无限期等待,永远不会自行关闭。
-
compute
(config_id, config, budget, working_directory)[source]¶ 您必须重载以实现计算功能的函数。
参数 - config_id (tuple) – 唯一标识配置的三个整数元组。约定是 id = (迭代次数, 预算索引, 运行索引),含义如下:- 迭代次数:优化算法的迭代次数。例如,对于 Hyperband,这是一轮 Successive Halving。- 预算索引:优化器为此配置采样的预算(当前迭代的)。仅当大多数运行失败,Hyperband 为填补空位重新采样,或者您使用更“高级”的优化器时,此值才非零。- 运行索引:这是一个简单的整数 >= 0,用于按采样顺序对配置进行排序,即 (x,x,0) 在 (x,x,1) 之前采样。
- config (dict) – 要评估的实际配置。
- budget (float) – 用于评估的预算。
- working_directory (str) – 对应此配置的唯一目录名。可用于在较低预算下存储中间结果,以便之后在较大预算下重用(例如,对于迭代算法)。
返回 - 必须返回一个包含两个必需条目的字典:
- ‘loss’:一个数值,表示需要 MINIMIZE(最小化)的值。
- ‘info’:这几乎可以是任何内置的 Python 类型,例如包含列表作为值的字典。由于 Pyro4 处理远程函数调用,不支持 numpy 数组等第三方类型!
返回类型 dict
-
load_nameserver_credentials
(working_directory, num_tries=60, interval=1)[source]¶ 在 master 和 workers 共享文件系统的情况下加载 nameserver 凭据
参数 - working_directory (str) – HPB 运行的工作目录(参见 master)
- num_tries (int) – 查找文件的尝试次数(默认 60)
- interval (float) – 两次尝试之间的等待时间