Machine learning 许多机器学习模型-保存和加载

Machine learning 许多机器学习模型-保存和加载,machine-learning,scikit-learn,out-of-memory,persistence,Machine Learning,Scikit Learn,Out Of Memory,Persistence,目前,在训练我们的ML模型(通过sci工具包)在运行时使用它们之后,我将它们保存为“.pkl”文件,并在服务器启动时将其加载到内存中。我的问题有两个方面: 有没有更好的方法来做同样的事情?一个.pkl文件在使用最高压缩后达到500MB大小。我可以用其他更好的格式保存我的模型吗 我如何衡量这一点?我有很多这样的.pkl文件(例如,一个任务有20个不同语言的模型,类似地,我有5个这样的任务,即~5*20个模型)。若我同时加载所有此类.pkl文件,服务将停止运行。如果我根据请求加载/卸载每个.pkl文

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

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

  • 我如何衡量这一点?我有很多这样的.pkl文件(例如,一个任务有20个不同语言的模型,类似地,我有5个这样的任务,即~5*20个模型)。若我同时加载所有此类.pkl文件,服务将停止运行。如果我根据请求加载/卸载每个.pkl文件,API会变得很慢,这是不可接受的。我如何扩大规模,还是选择性加载是唯一可能的解决方案


  • 谢谢

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

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


    另外请注意,根据您使用的模型类型,我们可能会为您提供更好、更具体的建议。

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

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


    另外请注意,鉴于您使用的模型类型,我们可能会为您提供更好、更具体的建议。

    您使用的Scikit Learn模型类型是什么?500MB pickle文件的未压缩大小是多少?在Scikit学习课程中,大部分是Numpy矩阵。您是否检查过它们是密集矩阵还是稀疏矩阵?您使用的是什么Scikit学习模型类型?500MB pickle文件的未压缩大小是多少?在Scikit学习课程中,大部分是Numpy矩阵。你检查过它们是密集矩阵还是稀疏矩阵了吗?