【问题标题】:Lots of Machine Learning Models - Saving and Loading大量机器学习模型 - 保存和加载
【发布时间】:2017-06-08 00:21:31
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 您使用的是哪些 Scikit-Learn 模型类型? 500MB pickle 文件的未压缩大小是多少?在 Scikit-Learn 类中,主要有 Numpy 矩阵。你检查过它们是密集矩阵还是稀疏矩阵吗?

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


【解决方案1】:

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

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

另请注意,鉴于您使用的模型类型,我们或许能够为您提供更好和更具体的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2017-09-25
    • 2015-11-18
    相关资源
    最近更新 更多