我正在努力并行化一个sklearn网格搜索,扫描三个参数,但我无法重构项目以使用ipython.parallel。我目前的思维方法是创建一个简单的函数:
这是否有助于并行化网格搜索?
如果是这样,有没有办法在我的本地机器和远程引擎之间共享代码?
例如,我有一个包含许多不同模块的源树:
/exploration
/log_regression/
/log_regression/experiments.py
/log_regression/make_model.py
/linear_regression/
/linear_regression/experiments.py
/linear_regression/make_model.py
/linear_regression/parallel.py
使用StarCluster,我在EC2上部署了一个集群,并希望在rock参数上并行化运行sklearn gridsearch的过程。但是,我发现没有简单的方法可以与远程引擎共享我的所有本地模块。有没有这样做的模式,或者我应该如何重构我的思想呢?
答案 0 :(得分:0)
如果将代码部署到多个节点上而不是为并行处理设计代码,那么您可以考虑通过本地(到您的网络)源代码管理(git或mercurial服务器)来访问代码然后编写部署脚本:在启动处理之前连接到所有节点的一些实用程序,并准备工作环境。当然,这将涉及检查代码的最新版本以及必要的依赖项。假设你正在使用类似unix的操作系统,有一些python实用程序可以帮助解决这个问题:
virtualenv
,用于通过pip访问许多python库的自包含python环境。paramiko
,用于脚本化ssh连接和shell交互vcstools
,一个为几个scms(svn,git,mercurial,...)提取常见源代码操作的库此外,如果您不想从头开始设置源代码管理的麻烦,您可以在github上托管您的代码,或者如果您不希望您的代码公开,您可以转到bitbucket(提供免费的私有存储库,也可以选择git和mercurial)。