我在做一个nlp
项目,算法都搞好了,训练数据大概 20G 左右的样子,本想用GridSearchCV
直接调参(一个有 7 个参数,几万个候选值),结果发现半天都没动静( 48Core e5v3, 128G 内存),但是参数改小后可以正常跑,于是我认为是性能不够,请问一下大家,sklearn
有办法分布式调参不?
找到解决方法了,可以使用celery
可以完成这项目工作,但是不能用GridSearchCv
,而是用RandomsearchCV
。
解决思路如下:
celery里面需要有一个scheduler
和worker
,下面讲一下作用和思路。
用户提交任务后,第一个收到任务的节点将会成为scheduler
。
将用要调的参数范围确定,根据迭代次数,预先随机生成参数,将参数生成多个任务,发到其它节点上,然后等待所有的worker,将调参结果排序,取score
最优结果的参数,进行交叉验证,输出给用户。
作为计算资源池的一部分,将计算结果通过回调的方式进行返回
1
Allianzcortex 2019-03-12 07:39:45 +08:00 1
我记得之前有人分享过 ML 应该是 Sklearn 出原型,Spark 上生产; DL 是 PyTorch 出原型,TensorFlow 上生产? DataBricks 倒是有一篇文章讲过 sklearn 的分布式计算,https://databricks.com/blog/2016/02/08/auto-scaling-scikit-learn-with-apache-spark.html (:D
|
2
Moming 2019-03-12 10:23:03 +08:00
想调参的话,也没必要 20G 全用上吧。
@Allianzcortex 顺便问一下,这个怎么讲?是 TF inference 性能好还是因为方便多机多卡? > DL 是 PyTorch 出原型,TensorFlow 上生产 |
3
ddzzhen 2019-03-12 13:30:55 +08:00 via Android
之前看过文档没找到
|