Docker集成的通用Python对象序列化

时间:2015-04-07 18:52:16

标签: python serialization docker pickle jsonpickle

我正在开展一个项目,目的是将机器学习项目中的培训和测试过程分开。我设计了代码来包装使用过的模型,而模型我的意思是分类器,例如,在类Model中。

class Model: def init(self, newModel): self.model = newModel

然后我使用列表传递模型必须提供的函数对象:

def addFunctions(self,functions): for function in functions: self.functions[function.__name_ _] = function

现在该模型可用于分类,例如通过使用分类器对象构造它并将其函数在列表中传递给addFunctions,以便我可以调用它们。然后我将模型和代码打包在docker容器中。为了简化它的功能,它是一个轻量级的虚拟机。

分离的目的是在优化它之后将训练好的模型传递给docker容器,而无需传递整个代码。因此,需要保存/序列化Python模型。

我尝试使用pickle以及jsonpickle,但在序列化某些类型的对象时,它们都有限制。我找不到任何通用的对象存储和检索。还有其他选择吗?

1 个答案:

答案 0 :(得分:2)

dillcloudpickle都是非常强大的序列化程序,并且可以序列化标准python中的几乎任何对象。 (我是dill作者,顺便说一下。)

dill可作为独立包提供: https://github.com/uqfoundation/dill/

虽然cloudpickle几乎已经死亡(它由picloud支持,但它们已经商业化......并且已经将pyspark和其他一些软件包支持在自己的代码库中了: https://github.com/apache/spark/blob/master/python/pyspark/cloudpickle.py

我使用dill作为统计计算和优化中并行和分布式计算的支柱,并使用它来实现并行机器学习技术。但我还没有尝试docker个对象。