人工智能项目的python版本管理工具DVC

简介: dvc即data version control, 是一种针对人工智能项目(机器学习或者深度学习)的数据版本管理工具。DVC的操作和GIT类似,可以认为为GIT的二次开发封装。结合GIT,DVC可以有效的管理人工智能项目的整个流程,包括代码,数据,训练配置,模型【2月更文挑战第12天】

人工智能项目的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.安装

pip install dvc

3.2.数据版本管理

3.2.1 初始化

# 到git目录下
git config --global user.name "xxxx"
git config --global user.email "xxxx@wedo.com"
git clone ssh://git@101.81.238.21/test/test.git
cd test/

# dvc 初始化
dvc init
# 将dvc 初始化的文件提交 git
git commit -m "Initialize DVC"

# 初始化后会在项目目录下生成.dvc文件夹,存储dvc相关的信息
.dvc
├── config
├── plots
│   ├── confusion.json
│   ├── default.json
│   ├── scatter.json
│   └── smooth.json
└── tmp
    └── index

3.2.2 添加数据

可以通过dvc add/git add将数据和模型添加到版本管理中

# 假设数据在arch_train/model_zoo/nsfw_online_err.zip
dvc add arch_train/model_zoo/nsfw_online_err.zip
git add arch_train/model_zoo/.gitignore arch_train/model_zoo/nsfw_online_err.zip.dvc


# .dvc 后缀为数据的元数据文件,默认为存储路径为.dvc/cache下
cat arch_train/model_zoo/nsfw_online_err.zip.dvc
outs:
- md5: 26eb560df48bf11ddf303135749b0c60
  path: nsfw_online_err.zip

.
├── cache
│   └── 26
│       └── eb560df48bf11ddf303135749b0c60

3.2.3 版本切换管理

可以配合git的分支管理,来获取分支下不同的数据和模型。

# 切换分支
git checkout 分支名

# dvc通过git中的.dvc 文件,切换这个分支下数据
dvc checkout

3.2.3 共享代码(push/pull)

当多人开发时,dvc push会根据config中的远程主机配置,将数据push到远程主机。远程主机可以是ssh,http还有云盘存储等。

# 建立 远程服务 ssh或者http
# 这里以本地的其他目录为例子
mkdir -p /tmp/dvc-storage
dvc remote add -d myremote /tmp/dvc-storage
git commit .dvc/config -m "Configure local remote"
# 新建后 就会在`.dvc/config`存储远程主机访问的方式
vim config 
[core]
    remote = myremote
['remote "myremote"']
    url = /tmp/dvc-storage

# dvc push 上传数据
dvc push

# 远程主机中数据是上传的一个备份
tree /tmp/dvc-storage/
/tmp/dvc-storage/
└── 26
    └── eb560df48bf11ddf303135749b0c60

1 directory, 1 file
ls -l  /tmp/dvc-storage/26
total 93400
-r--r--r-- 1 root root 95640298 Sep  4 13:44 eb560df48bf11ddf303135749b0c60
ls -lh  /tmp/dvc-storage/26
total 92M
-r--r--r-- 1 root root 92M Sep  4 13:44 eb560df48bf11ddf303135749b0c60

如果数据变更,同样dvc+git进行版本管理

# 数据变化
dvc add arch_train/model_zoo/nsfw_online_err.zip
git commit arch_train/model_zoo/.gitignore arch_train/model_zoo/nsfw_online_err.zip.dvc -m "Dataset updates"
dvc push

当其他人想使用共享代码和数据时 git clone + dvc pull

# 下载代码和数据.dvc
git clone ssh://git@101.81.238.21/test/test.git
cd test/

# 根据.dvc和config远程主机配置,下载对应的数据和模型
dvc pull

3.3 串联工作流

3.2中已经介绍了dvc的最常用的操作,可以看出操作和git的操作基本上吻合的,原理上可以和git对等。
可以通过dvc run来建立训练和评估过程的依赖关系,即将输入的数据,预训练的模型,配置和输出的模型和训练脚本关联起来,可以很方面追溯执行过程, 每次关联dvc都会生成一个yaml配置来描述这个关联性。
dvc run的主要参数

  • -n 操作的名称
  • -p 配置,可以是多个,文件或者文件夹
  • -d 操作依赖的数据,脚本和模型等,可以是多个,文件或者文件夹
  • -o 操作的输出,可以是多个,文件或者文件夹
  • command: 执行操作的命令如python -u train.py
dvc run -n prepare \
          -p prepare.seed,prepare.split \
          -d src/prepare.py -d data/data.xml \
          -o data/prepared \
          python src/prepare.py data/data.xml

4. 总结

dvc把数据、模型、算法脚本和Metrics当成一次代码checkout,配合git就可以很方面的管理每一次训练的所有环节,还可以通过dvc metrics show -T来比较不同版本的模型性能。更多详细的dvc功能参见https://dvc.org/doc/start;欢迎交流讨论。
总结如下

  • dvc add/push/pull 管理数据
  • dvc run 管理工作流串联
  • 建议一个模型迭代一个分支,该分支囊括代码,数据,模型,配置, 模型评估; 可以完美迭代模型优化,而处乱不惊。
目录
相关文章
|
11天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
143 55
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
21天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
113 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
23天前
|
机器学习/深度学习 人工智能 自然语言处理
探索未来编程:Python在人工智能领域的深度应用与前景###
本文将深入探讨Python语言在人工智能(AI)领域的广泛应用,从基础原理到前沿实践,揭示其如何成为推动AI技术创新的关键力量。通过分析Python的简洁性、灵活性以及丰富的库支持,展现其在机器学习、深度学习、自然语言处理等子领域的卓越贡献,并展望Python在未来AI发展中的核心地位与潜在变革。 ###
|
1月前
|
存储 数据可视化 数据挖掘
Python数据分析项目:抖音短视频达人粉丝增长趋势
Python数据分析项目:抖音短视频达人粉丝增长趋势
|
1月前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
32 4
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
84 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
1月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
93 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
95 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
弹性计算 Linux iOS开发
Python 虚拟环境全解:轻松管理项目依赖
本文详细介绍了 Python 虚拟环境的概念、创建和使用方法,包括 `virtualenv` 和 `venv` 的使用,以及最佳实践和注意事项。通过虚拟环境,你可以轻松管理不同项目的依赖关系,避免版本冲突,提升开发效率。
101 3