如果有人可以帮忙:
非常感谢!
以下是我在 hyperopt 的 github 上的交流:
没有每次试验超时,但 hyperopt-sklearn 通过仅包装函数来实现自己的解决方案。请在 https://github.com/hyperopt/hyperopt-sklearn/ 查找“fn_with_timeout”。
来自问题 210:“优化器是无状态的,fmin 将实验的所有状态存储在试验对象中。因此,如果从试验对象中删除一些实验,就好像它们从未发生过一样。使用 fmin 的“max_evals”参数根据您需要进行此类修改的频率来中断搜索。如果您想要真正细粒度的控制,那么使用重复调用应该没问题,例如 max_evals 每次增加 1。”
感谢您对此进行调查,@doxav。我编写了一些解决问题 1 的代码,从
fn_with_timeout
获取 hyperopt-sklearn
的一部分,并将其调整为标准 Hyperopt 成本函数。
您可以在这里找到它: https://gist.github.com/hunse/247d91d14aaa8f32b24533767353e35d
要为整个实验设置超时,如果您正在使用 Spark Trials(如此处所述),则可以使用超时参数。文档说“timeout:fmin()可以运行的最大时间(以秒为单位)。默认没有最大时间限制。”
from hyperopt import SparkTrials
trials = SparkTrials(parallelism = 20, timeout= 1800)
现在使用运行中的试验:
with mlflow.start_run():
argmin = fmin(
fn=objective,
space=search_space,
algo=algo,
max_evals=16,
trials=spark_trials)