Hyperopt概念
本文描述了使用分布式Hyperopt时需要了解的一些概念。
有关如何在Databricks中使用Hyperopt的示例,请参见使用Hyperopt进行超参数调优.
fmin ()
你使用fmin ()
来执行Hyperopt运行。的论点fmin ()
表中所示;看到Hyperopt文档获取更多信息。有关如何使用每个参数的示例,请参见笔记本的例子.
参数名称 |
描述 |
---|---|
|
目标函数。Hyperopt使用space参数中提供的超形参空间生成的值调用此函数。此函数可以以标量值或在字典中返回损失值(请参阅Hyperopt文档详情)。此函数通常包含用于模型训练和损失计算的代码。 |
|
定义要搜索的超参数空间。Hyperopt在如何定义这个空间方面提供了很大的灵活性。您可以选择一个分类选项,如算法,或数值的概率分布,如均匀和对数。 |
|
Hyperopt搜索算法用于搜索超参数空间。最常用的有 |
|
要尝试的超参数设置数量(拟合的模型数量)。 |
|
Hyperopt提前生成的超参数设置个数。由于Hyperopt TPE生成算法可能需要一些时间,因此将该值增加到默认值1之外会有所帮助,但通常不大于 |
|
一个 |
|
一个可选的早期停止函数来确定是否 |
的SparkTrials
类
SparkTrials
是由Databricks开发的API,它允许您在不更改Hyperopt代码的情况下分发Hyperopt运行。SparkTrials
通过将试验分发给Spark工人来加速单机调试。
请注意
SparkTrials
设计用于并行计算单机ML模型,如scikit-learn。对于使用分布式ML算法(如MLlib或Horovod)创建的模型,不要使用SparkTrials
.在这种情况下,模型构建过程在集群上自动并行化,您应该使用默认的Hyperopt类试用
.
本节描述如何配置传递给的参数SparkTrials
以及执行方面SparkTrials
.
参数
SparkTrials
接受两个可选参数:
并行性
:可同时评估的最大试验数。更高的数值可以让您扩展测试更多的超参数设置。因为Hyperopt基于过去的结果提出了新的试验,所以在并行性和适应性之间需要权衡。对于固定的max_evals
,更高的并行度可以加快计算速度,但较低的并行度可能会导致更好的结果,因为每次迭代都可以访问更多的过去结果。默认值:可用的Spark executor数量。最大:128。如果该值大于集群配置允许的并发任务数,
SparkTrials
减少对该值的并行性。超时
:最大秒数fmin ()
电话可以接听。当超过这个数字时,所有运行都将终止fmin ()
退出。关于已完成运行的信息将被保存。
SparkTrials
和MLflow
Databricks Runtime ML支持从worker记录到MLflow。您可以在传递给Hyperopt的目标函数中添加自定义日志记录代码。
SparkTrials
在嵌套MLflow运行时记录调优结果,如下所示:
主运行或父运行:对
fmin ()
记录为主运行。如果有主动运行,SparkTrials
记录到此活动运行,并且不会在时结束运行fmin ()
的回报。如果没有活动运行,SparkTrials
创建一个新的运行,记录到它,并在之前结束运行fmin ()
的回报。子运行:测试的每个超参数设置(一个“试验”)被记录为主运行下的子运行。来自工作者的MLflow日志记录也存储在相应的子运行下。
当调用fmin ()
, Databricks推荐主动MLflow运行管理;即,将呼叫转到fmin ()
在一个与mlflow.start_run ():
声明。这就确保了fmin ()
调用被记录到单独的MLflow主运行中,并使记录额外的标记、参数或指标更容易。
请注意
当你打电话时fmin ()
在同一个活动MLflow运行中,MLflow会多次将这些调用记录到同一个主运行中。为了解决已记录参数和标记的名称冲突,MLflow将UUID附加到有冲突的名称上。
当从工作者记录日志时,您不需要显式地管理目标函数中的运行。调用mlflow.log_param(“param_from_worker”,x)
在目标函数中记录参数到子运行。您可以在目标函数中记录参数、度量、标记和工件。