python 版本管理工具 DVC
1. 人工智能项目的版本管理
对于传统的软件工程项目(比如 java, web), git 是一个非常不错的代码版本管理工具。但是人工智能项目,如机器学习或者深度学习,和传统软件工程项目有一定的差别
代码和文件:人工智能项目除了代码以外,还要大量的训练数据,还有文件比较大的模型文件
开发过程:人工智能项目开发过程,存在一定的不确定性,是一个探索调优的过程。需要很多的组合调参(不同的参数,不同的数据等),然后分别做评估,挑选最好的模型。这是一个相对复杂的过程,要匹配参数,数据,代码,模型。
如上所述,这些差别,git 存在一定不足
git 建议的单个文件在 50M,并不擅长管理操作大的文件,如几十 G 的文件
git 因为大数据上管理的不足,就无法管理与之相互关联的一连串的迭代变化
是时候祭出 DVC, data version control,数据版本管理工具。
2. 什么是 DVC
dvc 即 data version control, 是一种针对人工智能项目(机器学习或者深度学习)的数据版本管理工具。DVC 的操作和 GIT 类似,可以认为为 GIT 的二次开发封装。结合 GIT,DVC 可以有效的管理人工智能项目的整个流程,包括代码,数据,训练配置,模型。
GIT 和 DVC 分工如下:
dvc:负责数据和模型等大文件的存储、下载等管理,同时生成元数据(.dvc 文件)描述这些数据和模型, 并且串联整个人工智能项目工作流
git:负责代码和 dvc 生成的元数据文件的版本管理
3. DVC 操作
3.1.安装
3.2.数据版本管理
3.2.1 初始化
3.2.2 添加数据
可以通过dvc add/git add
将数据和模型添加到版本管理中
3.2.3 版本切换管理
可以配合 git 的分支管理,来获取分支下不同的数据和模型。
3.2.3 共享代码(push/pull)
当多人开发时,dvc push
会根据config
中的远程主机配置,将数据 push 到远程主机。远程主机可以是 ssh,http 还有云盘存储等。
如果数据变更,同样 dvc+git 进行版本管理
当其他人想使用共享代码和数据时 git clone
+ dvc pull
3.3 串联工作流
3.2 中已经介绍了 dvc 的最常用的操作,可以看出操作和 git 的操作基本上吻合的,原理上可以和 git 对等。可以通过dvc run
来建立训练和评估过程的依赖关系,即将输入的数据,预训练的模型,配置和输出的模型和训练脚本关联起来,可以很方面追溯执行过程, 每次关联 dvc 都会生成一个 yaml 配置来描述这个关联性。dvc run 的主要参数
-n
操作的名称-p
配置,可以是多个,文件或者文件夹-d
操作依赖的数据,脚本和模型等,可以是多个,文件或者文件夹-o
操作的输出,可以是多个,文件或者文件夹command: 执行操作的命令如 python -u train.py
4. 总结
dvc 把数据、模型、算法脚本和 Metrics 当成一次代码 checkout,配合 git 就可以很方面的管理每一次训练的所有环节,还可以通过dvc metrics show -T
来比较不同版本的模型性能。更多详细的 dvc 功能参见https://dvc.org/doc/start
;欢迎交流讨论。总结如下
dvc add/push/pull 管理数据
dvc run 管理工作流串联
建议一个模型迭代一个分支,该分支囊括代码,数据,模型,配置, 模型评估; 可以完美迭代模型优化,而处乱不惊。
版权声明: 本文为 InfoQ 作者【AIWeker】的原创文章。
原文链接:【http://xie.infoq.cn/article/b1deec87b26146862345b3451】。文章转载请联系作者。
评论