Hyperopt概念

本文描述了你需要知道的一些概念使用分布式Hyperopt。

的例子说明如何使用Hyperopt砖,明白了与Hyperopt Hyperparameter调优

fmin ()

你使用fmin ()执行Hyperopt运行。的理由fmin ()表中所示;看到Hyperopt文档为更多的信息。如何使用每个参数的例子,请参阅笔记本电脑的例子

参数名称

描述

fn

目标函数。Hyperopt调用这个函数的值生成hyperparameter空间提供的参数。这个函数可以返回损失作为标量值或在一个字典Hyperopt文档详情)。这个函数通常包含代码模型训练和损失计算。

空间

定义了hyperparameter空间搜索。Hyperopt在这个空间是如何定义提供极大的灵活性。你可以选择一个分类选择等算法,或概率分布均匀和日志等数值。

算法

Hyperopt搜索算法用于搜索hyperparameter空间。最常用的是hyperopt.rand.suggest随机搜索和hyperopt.tpe.suggest为TPE。

max_evals

hyperparameter设置尝试(模型)的数量。

max_queue_len

许多hyperparameter设置Hyperopt应该提前产生。因为Hyperopt TPE生成算法可以花一些时间,它可以帮助增加这超出的默认值1,但一般不大于SparkTrials设置并行性

试用

一个试用SparkTrials对象。使用SparkTrials当你叫单机算法如scikit-learn目标函数的方法。使用试用当你调用分布式训练算法如MLlib方法或Horovod目标函数。

early_stop_fn

一个可选的早期停止函数来确定fmin应该停止之前max_evals是达到了。默认是没有一个。函数的输入签名试用* args和输出签名bool,* args。布尔的输出表明是否要停止。* args任何国家,调用的输出early_stop_fn作为下一次调用的输入。试用可以是一个SparkTrials对象。当使用SparkTrials,早期停止函数是不能保证每次试验运行,,而是调查。早期停止函数的例子

SparkTrials

SparkTrials是一个砖开发的API,允许你分发Hyperopt Hyperopt代码运行不作其他变化。SparkTrials加速单机优化分配试验引发工人。

请注意

SparkTrials设计为单机并行化计算毫升scikit-learn等模型。为模型创建分布式ML算法如MLlib或Horovod,不要使用SparkTrials。在这种情况下,模型建立过程是自动并行集群,您应该使用默认Hyperopt类试用

本节描述如何配置参数传递给SparkTrials和实施方面的SparkTrials

参数

SparkTrials有两个可选参数:

  • 并行性并发:最大数量的试验评估。更多让你扩展测试更多的hyperparameter设置。基于过去的结果,因为Hyperopt提出新的试验之间有一个权衡并行性和自适应性。对于一个固定的max_evals,更大的并行加速计算,但降低每次迭代并行性可能会导致更好的结果,因为能够访问更多的过去的结果。

    默认值:火花执行人可用的数量。最大:128。如果该值大于所允许的并发任务数集群配置,SparkTrials这个值降低了并行性。

  • 超时:最大的秒数fmin ()可以打电话。当超过这个数字,所有运行和终止fmin ()退出。完成运行保存的信息。

实现

当定义目标函数fn传递给fmin (),当选择一个集群设置,它有助于理解SparkTrials分配调优任务。

Hyperopt,试验一般对应于拟合模型hyperparameters设置之一。Hyperopt迭代生成试验,评价,和重复。

SparkTrials,司机的集群节点生成新的试验,和工人节点评估这些试验。每个试验产生火花的工作有一个任务,工人和评估任务的机器。如果您的集群是人均设置运行多个任务,那么多个试验可能是评估工作。

SparkTrials和MLflow

砖运行时毫升支持日志MLflow从工人。你可以添加自定义日志代码的目标函数传递给Hyperopt。

SparkTrials日志优化结果嵌套MLflow运行如下:

  • 主要或父运行:调用fmin ()记录为主要运行。如果有一个活跃的运行,SparkTrials这个活跃日志运行,不结束运行时fmin ()的回报。如果没有积极运行,SparkTrials创建一个新的运行时,日志,并结束之前运行fmin ()的回报。

  • 孩子:每个hyperparameter设置测试记录(“审判”)作为一个孩子的主要运行下运行。MLflow日志记录从工人也存储在相应的孩子。

当调用fmin (),砖建议积极MLflow运行管理;也就是说,包装的调用fmin ()在一个mlflow.start_run ():声明。这将确保每一个fmin ()调用记录到一个单独的MLflow主要运行,并使它容易日志额外的标签,运行参数或指标。

请注意

当你打电话fmin ()多次在同一活跃MLflow运行,MLflow这些调用相同的主要运行日志。为记录参数和标签解决名称冲突,MLflow附加一个UUID名称与冲突。

当伐木工人,您不需要显式地管理运行的目标函数。调用mlflow.log_param (“param_from_worker”,x)目标函数的日志给孩子一个参数运行。您可以登录参数、指标、标签、目标函数和工件。