Python - 超出 RAM 限制?
Python - go beyond RAM limits?
我正在尝试分析文本,但我的 Mac 的 RAM 只有 8 GB,而 RidgeRegressor 在 Killed: 9
一段时间后就停止了。我认为这是因为它需要更多内存。
有没有办法禁用堆栈大小限制器,以便算法可以使用某种交换内存?
您将需要手动完成。
这里可能有两个不同的核心问题:
- A:持有你的训练数据
- B:训练回归器
对于 A,您可以尝试 numpy 的 memmap 抽象交换。
作为替代方案,请考虑将数据准备到 HDF5 或某些数据库。对于 HDF5,您可以使用 h5py or pytables,两者都允许类似 numpy 的用法。
对于 B:使用一些核外就绪算法是个好主意。在 scikit-learn 中,那些支持 partial_fit.
请记住,此训练过程至少分解为两个新元素:
- 高效的记忆力
- 交换速度慢;你不想在学习期间使用拥有 N^2 辅助内存的东西
- 高效收敛
上面 link 中的那些算法应该都可以。
SGDRegressor 可以参数化以类似于 RidgeRegression。
此外:可能需要手动使用 partial_fit
,遵守算法规则(通常是收敛证明所需的某种随机排序)。 abstraction-away swapping 的问题是:如果你的回归器在每个 epoch 都做一个排列,而不知道它的代价有多大,你可能有麻烦了!
因为这个问题本身比较难,所以有一些专门为此构建的库,而 sklearn 需要更多的手动工作,如说明的那样。最极端的一个(很多疯狂的技巧)可能是 vowpal_wabbit (where IO is often the bottleneck!). Of course there are other popular libs like pyspark,服务于一个稍微不同的目的(分布式计算)。
我正在尝试分析文本,但我的 Mac 的 RAM 只有 8 GB,而 RidgeRegressor 在 Killed: 9
一段时间后就停止了。我认为这是因为它需要更多内存。
有没有办法禁用堆栈大小限制器,以便算法可以使用某种交换内存?
您将需要手动完成。
这里可能有两个不同的核心问题:
- A:持有你的训练数据
- B:训练回归器
对于 A,您可以尝试 numpy 的 memmap 抽象交换。 作为替代方案,请考虑将数据准备到 HDF5 或某些数据库。对于 HDF5,您可以使用 h5py or pytables,两者都允许类似 numpy 的用法。
对于 B:使用一些核外就绪算法是个好主意。在 scikit-learn 中,那些支持 partial_fit.
请记住,此训练过程至少分解为两个新元素:
- 高效的记忆力
- 交换速度慢;你不想在学习期间使用拥有 N^2 辅助内存的东西
- 高效收敛
上面 link 中的那些算法应该都可以。
SGDRegressor 可以参数化以类似于 RidgeRegression。
此外:可能需要手动使用 partial_fit
,遵守算法规则(通常是收敛证明所需的某种随机排序)。 abstraction-away swapping 的问题是:如果你的回归器在每个 epoch 都做一个排列,而不知道它的代价有多大,你可能有麻烦了!
因为这个问题本身比较难,所以有一些专门为此构建的库,而 sklearn 需要更多的手动工作,如说明的那样。最极端的一个(很多疯狂的技巧)可能是 vowpal_wabbit (where IO is often the bottleneck!). Of course there are other popular libs like pyspark,服务于一个稍微不同的目的(分布式计算)。