存储 Python 机器学习模型的最佳实践

数据挖掘 Python 数据库 二进制
2021-10-02 21:20:20

保存、存储和共享机器学习模型的最佳实践是什么?

在 Python 中,我们通常使用 pickle 或 joblib 存储模型的二进制表示。在我的情况下,模型可以是 ~100Mo 大。compress=1此外,除非您设置(https://stackoverflow.com/questions/33497314/sklearn-dumping-model-using-joblib-dumps-multiple-files-which-one-is-the-,否则 joblib 可以将一个模型保存到多个文件中正确)。

但是,如果您想控制对模型的访问权限,并且能够使用来自不同机器的模型,那么存储它们的最佳方式是什么?

我有几个选择:

4个回答

您可以查看nexusdvcdatmo

最近在柏林的聚会上,zalandos AI 数据工程聚会有一个演讲

我想建议另外两种方法。

  1. 将它们存储在文档存储中(例如 mongoDB) - 当您的模型文件小于 16Mb(或 joblib 分片)时,建议使用此方法,然后您可以将模型存储为二进制数据。此外,一些 ML 库支持 json 中的模型导出和导入(例如 LightGBM),这使其成为存储在文档存储中的理想选择。优点:易于跟踪模型生成和易于访问,缺点:如果模型对象太大,事情会变得混乱。

  2. 将您的模型存储在对象存储(例如 Amazon S3)上- 如果您的模型非常大,这种方法很好,在这种情况下,您可以获得无限的存储空间和相当简单的 API,您需要支付更多费用,这是肯定的。优点:无限空间和存储任意文件格式的能力。缺点:成本,以及要做到这一点,您需要开发自己的跟踪系统。

祝你好运!

我多年来一直面临这个问题(今天仍然面临)。我真的认为,如果你不提供详细的要求,你就不能期待一个严肃的答案。我用我的工作例子来解释自己:

  • 我经常尝试同一模型的多种变体,以找出最有效的参数。训练一个模型需要几天的时间,该模型会产生一些输出,然后用于评估。为此,我对模型进行了简单的 NumPy 转储,因为它很容易在服务器或同事之间共享。您应该避免使用 pickle,因为它存储的内容(类实例、库...)不仅仅是模型学习的参数。如果 python 环境稍有不同,在另一台机器上导入模型可能不起作用。

  • 在生产中推送模型时,我需要 1) 一个可以在服务器故障时快速加载的模型版本(通常是二进制格式,仅存储必要的内容,例如神经网络的权重)和 2)将模型保存在 RAM 中以快速处理 API 请求的方法。

出于两个不同的目的,我需要三种不同的格式。然后,更一般地说,格式的选择取决于您使用的工具。例如,如果您使用 TensorFlow,您可能会对他们的TensorFlow Serving系统 感兴趣

作为数据科学家或 ML 工程师,我多年来一直面临这个问题。在得出结论之前,我们必须创建大量模型。如果您有多个笔记本,有效地存储所有模型的配置文件、参数和使用的特征是一件痛苦的事。

modellogger 是一个 python 包,可以帮助您组织内容并创建一个完整的摘要,其中包含函数调用的动态统计信息。

点安装模型记录器

按照简单文档的 3 个步骤进行操作,瞧,您就拥有了。