我们的机器学习模型可以生成大小约为250MB的模型。
将它存储在版本控制中是不错的做法?
我正在考虑存储在HDFS中并在NAS中进行异地备份。
我还尝试将其打包为RPM,然后在HDFS上部署RPM。但是创建rpm所需的时间,推动nexus是有点问题。
围绕此最佳做法是什么?
由于
答案 0 :(得分:3)
如果您的模型文件可以通过git中的代码和源确定性地再现,那么它不应该放在git中。传统上,你放入git生成工件所需的所有源代码(二进制文件,可执行文件等......)。 现在,如果您无法重现该文件(或者复制它的成本太高)并且您希望将其保留在源代码树中,您可能需要查看git-annex(https://git-annex.branchable.com/)
答案 1 :(得分:2)
机器学习模型的版本控制需要跟踪以下实体,
这些实体组合在机器学习模型构建过程中是一个快照。
该工具Datmo处理环境设置,跟踪进度,与其他社区成员共享工作以及部署模型。它通过将数据集/模型保存到云存储系统而不是将其推送到GitHub来处理数据集/模型。
答案 2 :(得分:0)
我同意@david点 - 您的建模代码应该是可重现的,然后您不需要将模型(二进制)存储到git。
其次,即使您的建模代码是可重现的,通常也需要花费很多时间(有时候会有特殊的计算资源,如GPU或100GB +内存)。很容易将模型存储在某个地方,以便您可以轻松地重复使用它。
开源工具http://dataversioncontrol.com解决了这两个问题。它像ML项目的make文件一样,通过跟踪依赖关系并重现ML工作流的正确部分,并将数据同步到S3或GCP。存储在云中的模型(二进制文件)可以很容易地重用。
答案 3 :(得分:0)
如果您真的想将模型存储在 git 中,您可能需要使用 git-lfs。然而,将它存储在 git 中的主要缺点是它在生产环境中变得更难访问,并且您无法从更广泛的版本控制中获得任何好处(例如,查看哪些代码行已更改)。< /p>
我见过的更常见的做法是将模型工件(joblib 转储、ONNX 转换)存储在文件系统、AWS 存储桶或类似设备中。 modelstore
open source library 旨在实现这一点:
from modelstore import ModelStore
modelstore = ModelStore.from_aws_s3(os.environ["AWS_BUCKET_NAME"])
modelstore.sklearn.upload("my-model-domain", model=model)
截至撰写此答案时,该库支持九种不同的机器学习框架(完整文档为 here)。