【问题标题】:Speed up and optimize scikit-learn on Google Cloud VM在 Google Cloud VM 上加速和优化 scikit-learn
【发布时间】:2017-12-25 12:07:11
【问题描述】:

我在 Ubuntu 16.04 上的 Google Cloud VM 上运行 Jupyter Notebook。 VM 有 8 个 CPU 和 32 GB 内存(并且可以轻松增加)。 当我运行我的一些 ML 脚本时,我可以看到 VM 没有完全加载。 我注意到为GridSearchCV 添加n_jobs = 16 有助于:VM 机器100% 加载并且计算更快。

有两个问题:

  • 我应该寻找哪些 scikit learn 函数的其他参数以确保我使用 VM 的全部功能?例如使用 fit、transform、predict 方法。
  • VM 中是否还有其他参数(除了 CPU 和内存)需要更改以加快 ML 任务的速度?

谢谢, 亚历克斯

【问题讨论】:

    标签: python machine-learning scikit-learn google-cloud-platform virtual-machine


    【解决方案1】:

    在 sklearn 的并行化方面,一切都由 n_jobs 控制(底层 BLAS/LAPACK 构建隐藏了很多内容;见下文!)。

    现在您的示例中有两个不同的级别:

    • A:一些方法支持的算法级别的并行化
      • 例如RandomForestClassifier
      • 在算法级别激活:例如clf = RandomForestClassifier(n_jobs=10)
      • 粒度和效果很难从文档中读出:对于 RandomForest,如果使用 n_jobs <= n_estimators,您可以获得接近线性的加速(因为每个单独的估算器都可以独立于其他估算器被触及!)
    • B:某些外部 GridSearchCV 上的并行化
      • 在 GridSearch 级别上激活:例如clf = GridSearchCV(clf_, parameters, n_jobs=10)
      • 这实现了n_grid_search_trials >= n_jobs 的近线性加速

    如果使用 A(同样:并非所有事物都支持),它也可用于预测和转换等方法。

    在这两个候选者中,B 的粒度(稍微)不那么精细,而embarrassingly parallel 的情况则更多。如果满足完全加速的条件(见上文);我只会在适合的时候使用这种方法。需要时,可以在拟合后重置估计器的n_jobs。但预计这不会有很大帮助。

    其他(更明显的硬件方面):

    • SSD 与 HDD(如果学习受 IO 限制;不经过测试很难分辨)

    另一件非常重要的事情

    • 使用最快的BLAS/LAPACK 实现并确保其构建支持并行化(在这些例程中花费了大量时间;BLAS 示例:矩阵向量乘法;LAPACK 示例:求解系统线性方程组)
      • 设置/链接在 numpy/scipy install 完成;不是sklearn
        • 虽然我不确定使用liblinearlibsvm 等第三方软件究竟会发生什么。正在使用中(由 sklearn 带来);这也将使用 BLAS
        • 我认为这些库带有自己的简化 BLAS 代码,表示为 here,这意味着:我们不在乎
      • 通常的候选者是:ATLAS、OpenBLAS、Intel 的 MKL(直觉:从慢到快)等等...
      • Anaconda-distribution 的优势之一是它与MKL 一起提供了开箱即用的功能。

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 2019-02-08
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 2023-03-09
      • 2018-01-29
      • 1970-01-01
      相关资源
      最近更新 更多