机器学习模型的版本控制(约250 MB)

时间:2015-10-01 06:59:44

标签: git machine-learning

我们的机器学习模型可以生成大小约为250MB的模型。

将它存储在版本控制中是不错的做法?

我正在考虑存储在HDFS中并在NAS中进行异地备份。

我还尝试将其打包为RPM,然后在HDFS上部署RPM。但是创建rpm所需的时间,推动nexus是有点问题。

围绕此最佳做法是什么?

由于

4 个答案:

答案 0 :(得分:3)

如果您的模型文件可以通过git中的代码和源确定性地再现,那么它不应该放在git中。传统上,你放入git生成工件所需的所有源代码(二进制文件,可执行文件等......)。 现在,如果您无法重现该文件(或者复制它的成本太高)并且您希望将其保留在源代码树中,您可能需要查看git-annex(https://git-annex.branchable.com/

答案 1 :(得分:2)

机器学习模型的版本控制需要跟踪以下实体,

  • 输入快照
    1. 环境
    2. 数据集
    3. 输入配置
    4. 输入文件(传输学习的输入权重文件 - 可选)
  • 输出快照
    1. 权重
    2. 统计文件(表示权重的准确度/其他指标)
    3. 输出文件

这些实体组合在机器学习模型构建过程中是一个快照。

该工具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)。