2

我正在并行化 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 上部署了一个集群,并希望并行化在 ridge 参数上运行 sklearn gridsearch 的过程。但是,我没有发现与远程引擎共享所有本地模块的简单方法。是否有这样做的模式,或者我应该如何重组我的思维?

4

1 回答 1

0

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

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

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

于 2014-03-17T02:59:41.650 回答