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


24

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

在Python中,我们通常使用pickle或joblib存储模型的二进制表示形式。在我的情况下,模型可以大到100Mo。此外,除非您设置compress=1/programming/33497314/sklearn-dumping-model-using-joblib-dumps-multiple-files-which-one-is-the- corre)。

但是,然后,如果您想控制对模型的访问权限,并能够使用来自不同计算机的模型,最好的存储方法是什么?

我有几种选择:


您有有效的方法来做到这一点吗?
iNet

Answers:



2

我面临这个问题很多年了(今天仍然面临)。我真的很想,如果您不提供详细的要求,您将无法期待一个认真的答案。我以工作示例来说明自己:

  • 我定期尝试使用同一模型的多个变体,以找出最合适的参数。训练一个模型会花费几天的时间,该模型会产生一些输出,随后将其用于评估。为此,我对模型进行了简单的NumPy转储,因为在服务器或同事之间共享它很容易。您应该避免pickle,因为pickle存储的不仅仅是模型学习的参数(类,库的实例等)。如果python环境略有不同,则无法在另一台计算机上导入模型。

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

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


1

我想建议另外2种方法。

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

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

祝好运!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.