从本地导入代码到所有远程引擎

时间:2014-03-03 22:07:21

标签: ipython scikit-learn ipython-parallel starcluster

我正在努力并行化一个sklearn网格搜索,扫描三个参数,但我无法重构项目以使用ipython.parallel。我目前的思维方法是创建一个简单的函数:

  • 接受一个山脊参数
  • 下载数据集以使用
  • 训练模型
  • 训练模型,在S3上保存得分和结果模型?

这是否有助于并行化网格搜索?

如果是这样,有没有办法在我的本地机器和远程引擎之间共享代码?

例如,我有一个包含许多不同模块的源树:

/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的过程。但是,我发现没有简单的方法可以与远程引擎共享我的所有本地模块。有没有这样做的模式,或者我应该如何重构我的思想呢?

1 个答案:

答案 0 :(得分:0)

如果将代码部署到多个节点上而不是为并行处理设计代码,那么您可以考虑通过本地(到您的网络)源代码管理(git或mercurial服务器)来访问代码然后编写部署脚本:在启动处理之前连接到所有节点的一些实用程序,并准备工作环境。当然,这将涉及检查代码的最新版本以及必要的依赖项。假设你正在使用类似unix的操作系统,有一些python实用程序可以帮助解决这个问题:

  • virtualenv,用于通过pip访问许多python库的自包含python环境。
  • paramiko,用于脚本化ssh连接和shell交互
  • vcstools,一个为几个scms(svn,git,mercurial,...)提取常见源代码操作的库

此外,如果您不想从头开始设置源代码管理的麻烦,您可以在github上托管您的代码,或者如果您不希望您的代码公开,您可以转到bitbucket(提供免费的私有存储库,也可以选择git和mercurial)。