Python - 超越RAM限制?

时间:2017-09-02 14:00:50

标签: python macos machine-learning scikit-learn out-of-memory

我正在尝试分析文本,但我的Mac的RAM只有8场演出,而RidgeRegressor在Killed: 9一段时间后就停止了。我认为这是因为它需要更多的记忆。

有没有办法禁用堆栈大小限制器,以便算法可以使用某种交换内存?

1 个答案:

答案 0 :(得分:0)

您需要手动完成。

这里可能存在两个不同的核心问题:

  • A:持有您的训练数据
  • B:训练回归者

对于A,你可以尝试numpy的memmap,它抽象出来。 作为替代方案,请考虑将数据准备到HDF5或某些数据库。对于HDF5,您可以使用h5pypytables,两者都允许使用类似numpy。

对于B:使用一些核外就绪算法是个好主意。在scikit-learn中,那些支持partial_fit

请记住,此培训过程会分解为至少两个新元素:

  • 关于记忆的高效率
    • 交换缓慢;你不想在学习期间使用能够保存N ^ 2辅助记忆的东西
  • 高效融合

上述链接中的那些算法对两者都应该没问题。

可以将

SGDRegressor参数化为类似RidgeRegression。

另外:可能需要手动使用partial_fit,遵守算法规则(通常是收敛证明所需的某种随机排序)。抽象交换的问题是:如果你的回归量在每个时代都在进行排列,而不知道它的代价是多少,那么你可能会遇到麻烦!

因为问题本身很难,所以为此构建了一些特殊的库,而sklearn需要更多的手动工作。其中一个最极端的(很多疯狂的技巧)可能是vowpal_wabbit(其中IO通常是瓶颈!)。当然还有其他流行的库,如pyspark,服务略有不同(分布式计算)。