machine-learning - 许多机器学习模型 - 保存和加载

标签 machine-learning scikit-learn out-of-memory persistence

目前,在训练我们的 ML 模型(通过 sci-kit)以在运行时使用它们之后,我将它们保存为“.pkl”文件,并在服务器启动时将其加载到内存中。我的问题有两个:

  1. 有更好的方法来做同样的事情吗?使用最高压缩后,一个 .pkl 文件的大小达到 500MB。我可以将我的模型保存为其他更好的格式吗?

  2. 我该如何扩展它?我有很多这样的 .pkl 文件(例如,一项任务有 20 个不同语言的模型,类似地,我有 5 个这样的任务,即 ~5*20 个模型)。如果我同时加载所有此类 .pkl 文件,服务将出现 OOM。如果我根据请求加载/卸载每个 .pkl 文件,API 会变得很慢,这是 Not Acceptable 。我如何扩大规模或者选择性加载是唯一可能的解决方案?

谢谢!

最佳答案

有多种类型的模型可以在不影响性能的情况下减小其大小,例如随机森林的修剪。除此之外,在不更改模型本身(即降低其复杂性)的情况下,您可以对内存中模型的大小做很多事情。

我建议尝试 joblib 库而不是 pickle 库,在那里你可以使用“compress”参数来控制压缩的强度(代价是加载时间更长)。

另请注意,考虑到您使用的模型类型,我们也许能够为您提供更好、更具体的建议。

关于machine-learning - 许多机器学习模型 - 保存和加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41807232/

相关文章:

machine-learning - 用 sklearn 对目标进行 PCA?

python - MemoryError 将两个数据帧与 pandas 和 dasks 合并——我该怎么做?

python - Tensorflow:tf.case 参数化可调用,案例列表在 for 循环中定义

python - 我是否在 pytorch 中使用多项式回归?

python-2.7 - 使用 sklearn 中的 OneVsRestClassifier 将定制的二元分类调整为多类分类

Elasticsearch 内存不足错误

python - 在 Python 中从大型数据帧创建稀疏矩阵

python - 如何在附加数据上训练 (k-NN) 模型(为了绘制学习曲线)

machine-learning - 使用 tflearn 进行回归的神经网络

python - 为什么我使用 python sklearn 从看似非随机的代码中得到随机结果?