存储NLP模型的最佳方法是什么?我有多个NLP模型,总共大小约800MB。我的代码会在启动时将模型加载到内存中。但是我想知道存储模型的最佳方法是什么。我应该将它存储在git repo中然后我可以直接从本地系统加载,还是应该存储在像S3这样的外部位置并从那里加载?每个的优点/缺点是什么?或者人们使用其他我没有考虑过的方法?
答案 0 :(得分:0)
您的NLP模型是否需要进行版本控制?你是否需要恢复到以前的NLP模型?如果不是这种情况,将工件存储在S3存储桶中肯定就足够了。如果您计划长期存储许多NLP模型,我还建议AWS Glacier。冰川对于长期储存来说是极具成本效益的。
答案 1 :(得分:0)
非常好的问题,虽然很少有人关注它。
以下是我指出的几个因素:
选项包括:
S3:好处是,如果你有它工作,那就方便了。但问题是,熟悉S3和Amazon AWS的人必须监控系统的故障/付款等。而且它通常很昂贵。您不仅需要支付空间费用,更重要的是您还要为带宽付费。如果您拥有诸如文字嵌入或字典之类的资源(除了您的模型之外),每个资源都需要几GB,那么就不难达到数TB的带宽使用率。 AI2使用S3,他们使用simple Scala system。他们的系统是懒惰的"即,只有在需要时,您的程序才会下载(和缓存)给定资源。
将其保留在回购中当然检查回购中的大二进制文件并不是一个好主意,除非您使用LFS将大文件保留在git之外历史。即便如此,我也不确定您是如何对文件进行编程调用的。就像你必须有用户手动下载文件等的脚本和说明(这是丑陋的)。
我也添加了这两个选项:
Maven依赖:基本上将Jar文件中的所有内容打包,部署它们并将它们作为依赖项添加。我们曾经使用过这个,有些人仍然使用它(例如StanfordNLP ppl,他们要求你添加模型作为maven依赖)。我个人不推荐它,主要是因为maven不是为了处理大资源而设计的(有时它会挂起等)。这种方法并不懒惰,这意味着maven在编译/运行时立即下载所有内容(例如,当第一次尝试StanfordCoreNLP时,您必须下载几千兆字节的文件,您可能永远不需要使用它们,这很头疼)。此外,如果您是Java用户,您知道使用classpath是一个令人头疼的问题。
您自己的服务器:安装文件管理器服务器(如Minio),将文件存储在那里,并在需要时,以所需语言向服务器发送程序化调用({ {3}})。 their APIs are available for different languages in their github page这对你来说可能很方便。这给你带来了懒惰的行为(比如S3),虽然不贵(不像S3)(基本上你可以获得S3的所有好处)。
总结一下我的观点:我过去曾尝试过S3,这很方便,但价格昂贵。由于我们有一台经常闲置的服务器,我们正在使用Minio,我们对此感到高兴。如果您有一个可靠的远程服务器来存储您的文件,我会选择此选项。