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 (intfloat) – 指定 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

is_busy()[source]
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) – 两次尝试之间的等待时间
run(background=False)[source]

启动 Worker 的方法。

参数background (bool) – 如果设置为 False (默认),Worker 在当前线程中执行。如果设置为 True,则创建一个新的守护线程来运行 Worker。这在单个 Worker 场景/当 compute 函数只模拟工作时很有用。
shutdown()[source]
start_computation(callback, id, *args, **kwargs)[source]