跳转到主要内容
工程的博客

在Python扩展Hyperopt调整机器学习模型

分享这篇文章
试Hyperopt笔记本复制下面的步骤,看我们的按需网络研讨会要学习BOB低频彩更多的知识。

Hyperopt是最受欢迎的开源库调优在Python中机器学习模型。我们兴奋地宣布Hyperopt 0.2.1支持分布式优化通过Apache火花。SparkTrials类允许您扩展hyperparameter优化跨集群火花,导致更快的优化和更好的模型。SparkTrials是由约瑟夫•布拉德利韩愈崔,魏晨Xu Lu Wang和张亮(砖),与马克斯Pumperla合作(为)。

Hyperopt是什么?

Hyperopt是一个开源hyperparameter调优库编写的Python。每个月有445000 + PyPI下载和3800 +明星在Github截至2019年10月,它有很强的采用和社区的支持。数据科学家,Hyperopt提供了一个通用的API搜索hyperparameters和模型类型。Hyperopt提供了两种优化算法:随机搜索和Parzen树估计的贝叶斯方法。

对于开发人员来说,Hyperopt提供可插入算法和计算后端api。我们利用这个插件编写一个新的计算后台由Apache火花。

扩展出Hyperopt火花

的新类SparkTrials,你可以告诉Hyperopt火花集群分发一个调优工作。原本在砖,这一点API hyperparameter调优使得许多砖客户分配计算复杂的优化工作,这已经导致了开源Hyperopt项目可用的最新版本。

Hyperparameter调优和模型选择通常涉及训练成百上千的模型。SparkTrials批这些训练任务并行运行,一个在每个火花执行人,允许大规模扩展调优。使用SparkTrialsHyperopt,简单地通过SparkTrials反对Hyperoptfmin ()功能:

hyperopt进口SparkTrials
              best_hyperparameters = fmin (fn=training_function,空间=search_space,算法=hyperopt山丘,max_evals= 64,试用=SparkTrials())

对于一个完整的示例代码,请查看Hyperopt文档SparkTrials

在引擎盖下,fmin ()将会产生新的hyperparameter设置测试和通过他们吗SparkTrials。下图显示了SparkTrials集群上运行这些任务异步:(a) Hyperopt火花驱动程序上运行的主要逻辑,计算新的hyperparameter设置。(B)当一个工人已经准备好一个新任务,Hyperopt开始一个单一任务引发工作hyperparameter设置。(C)在这一任务,运行在一个火花执行人,用户代码将执行培训和评估一个新的ML模式。(D)完成后,火花任务将返回结果,包括司机。使用这些新结果Hyperopt计算更好的hyperparameter设置未来的任务。

如何测试和传递给新的hyperparameter设置SparkTrials使用Hyperopt

SparkTrials适合和评估每个模型在一个火花工人,它仅限于调优单机毫升模型和工作流,如scikit-learn或单机TensorFlow。为分布式ML算法例如Apache火花MLlib或Horovod,您可以使用Hyperopt的违约试验类

在实践中使用SparkTrials

SparkTrials需要2关键参数:并行性(最大数量的平行试验运行,违约引发执行人的数量)超时(最长时间秒fmin是允许的,没有违约)。超时预算提供了一个机制,允许上限调优可以花多长时间。

并行性参数可以设置结合max_evals参数对于fmin ()使用下图中描述的准则。Hyperopt将测试max_evals总hyperparameters设置,批量的大小并行性。如果并行性=max_evals,然后Hyperopt随机搜索:它将选择所有hyperparameter设置并行独立测试和评估。如果并行性= 1,然后Hyperopt可以充分利用自适应迭代算法像Parzen树估计探索hyperparameter空间:每个新hyperparameter设置测试将选择基于以前的结果。设置并行性在1和max_evals允许你权衡可伸缩性(获取结果更快)和适应性(有时得到更好的模型)。不错的选择往往是在中间,如√max_evals)。

设置为SparkTrials并行性。

为了说明优化的好处,我们跑HyperoptSparkTrials在MNIST从我们最近的数据集使用PyTorch工作流网络研讨会。培训我们的工作流程基本深度学习模型来预测手写的数字,我们调整三个参数:批量大小,学习速率和动量。这是运行在一个砖集群与p2 AWS。超大工人和砖运行时5.5毫升。

在下面的图中,我们固定max_evals到128年,各种工人的数量。正如预期的那样,更多的工人(大并行性)允许更快的运行时,与线性扩展。

策划的效果更大Hyperopt的运行时间上的并行性

然后我们固定超时在4分钟和多样的工人的数量,数试验重复这个实验。下面的图显示了损失(负对数似然,“180”=“0.180”)和工人的数量;蓝色的点个人试验,红线是黄土曲线显示的趋势。一般来说,模型性能提高我们使用更大并行性因为这可以让我们更hyperparameter测试设置。注意,由于Hyperopt使用行为在不同试验随机化搜索。

证明改进的模型性能使用更大的并行性

开始使用Hyperopt 0.2.1

SparkTrials现在可用在Hyperopt 0.2.1(可用吗PyPi项目页面),在砖运行时对机器学习(5.4及以后)

想要了BOB低频彩解更多关于Hyperopt看看示例和演示,看看:

  • 笔记本的砖文档的例子AWSAzure

Hyperopt也可以结合MLflow跟踪实验和模型。BOB低频彩了解更多关于这个集成开源MLflow例子在我们的Hyperparameter优化博客网络研讨会

你可以通过Github参与项目页面:

相关资源

免费试着砖
看到所有工程的博客的帖子