我适合并坚持一系列scikit-learn模型,随后我需要部署到生产服务器。
一些生成模型的joblib pickle对象(主要用于袋装估算器)需要大量空间,大约50MB(注意这是压缩数据)。
这些模型的内存消耗限制了我可以上传到单个生产服务器的不同数量。
对于我们的工作流程,在我们的开发机器(具有大量内核和内存)中进行安装,但生产在更严格的环境中运行。因为一旦我们部署了一个模型,我们就不再对拟合感兴趣,只是在预测时,我想知道是否可以在持久化之前修剪python对象,比如用于拟合的特征(假设它们不需要{{1步骤)。
所以,问题是:是否有一种简单的方法可以识别拟合的sklearn估计器的元素,这些元素不需要调用predict
方法并在持久化对象之前从类中删除它们?
其他说明
我不关心磁盘空间,只关心系统内存的使用;确定单个内存使用的内存量是棘手的,所以我使用pickle大小作为代理(内存大小范围大约是pickle大小的3-7倍)。上传到生产系统的估算器原则上可以是任何东西(我们正在构建一个Caruana类型的集合)。最严重的违规者是predict
或MLPClassifier
的实例。问题似乎是对于固定“大小”的估算器(比如我确定了网络的输入和隐藏层神经元的数量),保存的估算器的大小似乎会增长,这取决于我用来训练它的数据集,对我来说,似乎有些训练数据被保存在实例对象中。神经网络或随机森林不需要训练数据来进行预测,所以如果它存在的话我想摆脱它。