我正在做一个python包,主要功能是使用我训练过的模型。我希望最终用户能够尽可能容易地访问模型,这样他们就可以使用主要功能,而不需要单独查找和下载模型。
我最初以为我只会在包中包含模型文件,但它很大(~ 95 MB),Github警告我,所以我的感觉是我应该尝试找到一种替代方法。
我尝试过压缩模型,但这并没有对文件大小产生太大影响。模型本身是固定的,所以我不能通过使用不同的超参数训练替代版本来减小文件大小。
我目前的解决方案是不包含模型,而是在使用相关类时从s3下载它。(这是一个内部包,所以假设每个使用它的人都可以访问s3存储桶)。然而,我真的不喜欢这个解决方案,因为它需要用户设置一些东西来访问具有特定角色的AWS,即使我在错误消息中包含了examples / documentation / hints,我也可以想象这种体验并不理想。如果他们将模型保存在某个地方,他们也可以选择传递文件路径,但这同样需要一些初始设置。
我尝试过研究访问/打包模型的方法,但没有找到太多。
所以我的问题是:
- 是否有办法将此模型包含在软件包中?
- 是否有其他方法可以访问模型,而我没有考虑过?
2条答案
按热度按时间n6lpvg4x1#
在包中包含如此大的模型文件可能会导致一些问题,包括更长的安装时间、更大的包大小和更高的存储需求。因此,最好探索替代解决方案。
一种可能的解决方案是将模型文件托管在单独的服务器上,例如Amazon S3或其他云存储服务,并在第一次使用包时在运行时下载模型。这样,用户就不必在安装包时下载大型模型文件。
但是,正如您提到的,这种方法需要用户具有必要的访问权限和凭据才能从存储服务下载模型。您可以通过提供有关如何设置必要的凭据和访问权限的明确说明沿着错误消息来解决此问题,以便在出现任何问题时指导用户。
另一种选择是使用像
pickle
或joblib
这样的包来序列化模型,并将序列化的版本包含在包中。这种方法可以显著减少模型文件的大小,但序列化过程可能需要时间,并且可能不适合所有类型的模型。您还可以考虑使用基于云的机器学习平台,如AWS SageMaker,它提供托管的Jupyter笔记本和培训环境,模型托管和部署。这种方法允许用户使用API与您的模型交互,无需下载模型文件或访问底层基础设施。
最终,最佳解决方案将取决于项目的具体要求和限制。仔细考虑每种方法的利弊并选择最适合您需求的方法非常重要。
lokaqttq2#
是否有办法将此模型包含在软件包中?
是的,您可以在Python包中包含任何文件(无论大小)。
是否有其他方法可以访问模型,而我没有考虑过?
如果用户无论如何都要下载它,为什么不在包中下载呢?一个原因:如果模型很少改变,但是围绕它的代码改变了,用户将不得不重复地下载一个大的包。
你可以有两个Python包吗?一个是模型,另一个是代码?这样,如果有新版本可用,用户只需要再次下载模型。