hyperopt中文文档:Parallelizing-Evaluations-During-Search-via-MongoDB
通过MongoDB在搜索时进行并行计算
Font Tian translated this article on 23 December 2017
因此想要进行并行搜索,您需要执行以下操作(在安装 mongodb
之后):
在程序运行的计算机可以链接的的地方启动一个mongod进程,本地,远程都可以。
修改您的调用以
hyperopt.fmin
连接到该mongod
进程的MongoTrials
模块。启动一个或多个
hyperopt-mongo-worker
连接到mongod
进程的进程,并在fmin
blocks(块) 进行搜索。
1.启动一个mongod进程
安装mongodb
后启动一个数据库进程(mongod)十分简单,命令如下。(当然,你也可以参考其他文档,译者注)
mongod --dbpath . --port 1234# or storing each db its own directory is nice:mongod --dbpath . --port 1234 --directoryperdb --journal --nohttpinterface# or consider starting mongod as a daemon:mongod --dbpath . --port 1234 --directoryperdb --fork --journal --logpath log.log --nohttpinterface
Mongo会预先分配几GB空间(你可以用 --noprealloc
来禁用这个空间)以获得更好的性能,所以当你想创建这个数据库的位置请思考一下这个问题。在远程创建数据库不仅可能会给您的数据库带来糟糕的性能体验,还会给网络上的其他人带来不好的体验,请小心。
另外,如果你的机器可以连接互联网,那么也就可以绑定到 loopback
接口并通过ssh连接,或者读取有关密码保护的 mongodb
文档。
本教程的其余部分则是基于运行 mongo
端口1234的的本地主机。
2.使用 MongoTrials
为了演示程序本处使用math.sin
函数,然后通过 hyperopt
来最小化该函数。示例如下:
import mathfrom hyperopt import fmin, tpe, hpfrom hyperopt.mongoexp import MongoTrialstrials = MongoTrials('mongo://localhost:1234/foo_db/jobs', exp_key='exp1')best = fmin(math.sin, hp.uniform('x', -2, 2), trials=trials, algo=tpe.suggest, max_evals=10)
MongoTrials
的第一个参数是使用哪个 mongod
进程,以及该进程中的哪个数据库 (这里是 'foo_db' )
。第二个参数 (exp_key='exp_1')
用于某次实验的标记(这样可以在一个数据库中保存多次试验),该参数是可选的。
注意目前有一个使用要求,数据库名称后必须加上 “/ jobs”
字段。
无论是把你的试验放在一个单独的数据库中,还是使用 exp_key
机制来区分它们都取决于你的代码,都是可行的。单独使用数据库的好处在于可以从shell中操作它们(它们显示为不同的文件),并确保实验拥有更好的独立性/隔离性。使用exp_key的好处:hyperopt-mongo-worker进程(请参阅下文)在数据库级别进行轮询,这样可以在同一个数据库中进行多次试验。
3.运行 hyperopt-mongo-worker
如果你运行上面的代码片段,你会发现它在调用 fmin
时阻塞(挂起) 。 在MongoTrials
内部中- fmin
作为异步 trials
对象(an asynchronous trials object),所以 fmin
在建议新的搜索点时实际上并不会评估度量函数。相反,它只是坐在那里,耐心等待另一个进程做这个工作,然后更新MongoDB的结果。 包含在 bin
目录中的hyperopt-mongo-worker
脚本就是为这个目的编写的。在你安装hyperopt的时候,请确保它应该加入你的 $PATH
(环境变量)中。
你也可以在上面脚本中的调用 fmin
并被阻塞的同时,打开一个新的 shell
并输入
hyperopt-mongo-worker --mongo=localhost:1234/foo_db --poll-interval=0.1
它会从MongoDB中取出一个工作项,同时评估 math.sin
函数,并将结果存回数据库。在 fmin
函数传入的运行次数全部运行完毕之后,它终止脚本并返回计算结果。然后 hyperopt-mongo-worker
脚本会等待几分钟,等待更多的工作出现,最后终止。
在这种情况下,我们最好还是显式地设置适合我们程序的轮询间隔,而默认的时间设置是为了至少需要一两分钟完成的作业(搜索点评估)设置的。
MongoTrials
是一个持久对象
如果你再次运行这个例子,
best = fmin(math.sin, hp.uniform('x', -2, 2), trials=trials, algo=tpe.suggest, max_evals=10)
你会看到它立即返回,似乎没有进行任何计算。那是因为你连接的数据库之前已经有足够的尝试(trials),程序默认会直接调取原来的结果; 实际上在你运行第一个实验时已经计算了它们。而如果你想进行一次新的搜索,你可以改变数据库名称或者exp_key
。如果你想扩展本次搜索,那么你可以为了 max_evals
设置一个拥有更高数字的 fmin
。
又或者,您可以启动其他专门创建 MongoTrials
的进程来分析数据库中已用结果。而那些其他进程根本不需要调用 fmin
。
hyperopt中文文档:Parallelizing-Evaluations-During-Search-via-MongoDB相关推荐
- Hyperopt中文文档导读
在2017年的圣诞节前,我翻译了有关HyperOpt的中文文档,这也时填补了空白,以此作为献给所有中国程序员,以及所有其他机器学习相关行业人员的圣诞礼物.圣诞快乐,各位. HyperOpt中文文档导读 ...
- Hyperopt中文文档:Cite引用
引用 Font Tian translated this article on 22 December 2017 如果你想使用这个软件进行研究,请在论文中引用以下内容: Bergstra, J., Y ...
- Hyperopt中文文档:FMin
FMin Font Tian translated this article on 22 December 2017 这一页是关于 hyperopt.fmin() 的基础教程. 主要写了如何写一个可以 ...
- Hyperopt中文文档:Home
主页 Font Tian translated this article on 22 December 2017 Hyperopt:分布式异步算法组态/超参数优化(主页,但这不是维基的主页). 加入h ...
- hyperopt中文文档:Scipy2013
Scipy2013 Font Tian translated this article on 23 December 2017 SciPy2013摘要提交 标题 Hyperopt:用于优化机器学习算法 ...
- hyperopt中文文档:RelatedWork
相关工作 Font Tian translated this article on 23 December 2017 与Hyperopt相关的软件链接,以及常用的贝叶斯优化工具. 使用Hyperopt ...
- hyperopt中文文档:Interfacing-With-Other-Languages(在其他语言中使用hyperopt)
其他语言接口 Font Tian translated this article on 23 December 2017 两种接口策略 基本上有两种方法将 hyperopt 与其他语言进行连接: 你可 ...
- hyperopt中文文档:Installation-Notes安装说明
安装说明 hyperopt安装说明 Font Tian translated this article on 23 December 2017 有关MongoDB的部分 Hyperopt要求mongo ...
- hyperopt中文文档:Recipes
食谱(Recipes) Font Tian translated this article on 23 December 2017 如何对一些给定值的配置空间内的一些值进行采样ampling%2520 ...
最新文章
- Zbrush制作手榴弹案例讲解学习教程
- echarts python源码_基于Echarts的微代码开发平台SmartChart, 免费开源使用
- Xamarin Android教程Android基本知识版本介绍与系统介绍
- mac上投屏android_全平台Win/Mac全设备Android/iOS 免费无线投屏神器
- 如何获取握手包_白话详解TCP的三次握手到底做了些什么
- CMDB收集资产脚本
- @Scheduled
- 关于自动装箱和自动拆箱
- eoe·Android 开发门户 - android开发者的必备网站
- ros之旋转加平移公式
- Atitit 软件开发方法论 attilax著 艾龙 著 1. 1.3 软件工程方法 软件工程方法论分为软件开发方法论和软件组织方法论两个部分。	1 2. 软件开发方法的演进 SP DOP PAM
- 使用ActivityGroup类显示多个Activity
- 庞皓计量经济学第四版_庞皓计量经济学第4版笔记和课后答案
- UE4多人聊天框实现
- 按键精灵手机助手基本教程以及命令-1
- js【点击 div 2s 后颜色变成『粉色」】
- POJ-1144 Network——Trajan+割点
- 首次使用计算机 鼠标没反应,电脑鼠标没反应是怎么回事
- 参加第八届中国软件杯大学生软件设计大赛如何准备?以课工场为例!
- python最小二乘法_最小二乘法(least sqaure method)