当前位置: 首页 > 工具软件 > dvc > 使用案例 >

Dvc (Data Control Version) 与 Git 合作关系

孔欣可
2023-12-01

*为什么要使用Dvc ? *
1.做算法或者机器学习的时候,需要使用不同的数据集来验证算法或者模型的效果,也会需要针对同一份数据集,对比不同版本的模型效果。
2.不适用Git管理数据集的原因 : Git 无法单独下载想要的数据集,git来管理大量数据集的话,可能git pull 或者 git push都会耗时很久,将算法模型代码和数据集耦合在一起。

简单来说,Dvc负责管理真正的数据源,Git负责管理dvc的映射文件。

  • 先把真正的数据源传到Dvc指定的存储数据的地方;
  • 然后dvc的映射文件用git push放到github或者gitlab;
  • 当想要使用某一个文件的时候,git pull 所有的dvc文件,再选用需要的数据集映射dvc文件,再用dvc pull,则数据集就会从存储数据的地方过来了

Simple Demo
a. 安装dvc

pip install dvc

b. 对于新项目,分别初始化 dvc 和 git。如果是旧项目,已经有git了,那只需要初始化dvc

git init 
dvc init

c. 因为不把数据源传到github或者gitlab,那么需要有个地儿放数据源。我选择公司的服务器,更多方法见官网(https://dvc.org/doc/command-reference/remote)

#选择ssh的连接方式,地址是172.xx.xx.xx,存储的路径是path_to_store_data
# -d 是 default,认为该路径是默认的数据存储路径
# -f 是 force , 防止之前有其他错误的路径设置后,强制使用本次设置为默认
#这个remote的名称叫做 storage
dvc remote add -d -f storage ssh://172.xx.xx.xx/path_to_store_data
#因为要顺利ssh,需要对远程连接修改 user , port , password
dvc remote modify storage user XXX
dvc remote modify storage port 22
dvc remote modify storage password XXX

d.自己准备好了数据集data.xml,想要使用dvc来管控

dvc add data.xml

e. 执行上一步之后,dvc会主动提示使用git来管理映射文件

git add .gitignore data.xml.dvc

f.因为对于项目来说,git可以管理data.xml.dvc,所以存储一下

 git commit -m "Add raw data"

g.用git管理了轻量级的dvc映射文件之后,把真正的数据源文件传输到服务器

dvc push

h.当你再次修改了模型,或者其他同事需要数据源,则需要先git pull拿到dvc映射文件,再dvc pull
i.当数据源也做了变化,需要上传

dvc add 
dvc push

j.如果你dvc push了新修改的文件,又机车的想要前一版原始数据

dvc checkout

k.当需要执行bash脚本或者脚本,可以使用dvc 的 pipeiline管理,即 dvc rundvc repro
如果是执行python

dvc run -n get_data \
		-d get_data.py \
		-o data_raw.csv \
		--no-exec \ 
		python get_data.py

dvc run结束之后会产生dvc.yaml来记录上述stage,即会记录你的执行输入输出脚本。

  • -n : --name : 要执行的名称
  • -d : dependencies 所依赖的
  • -o : --output 输出的结果叫做 data_raw.csv
  • 当使用dvc run的时候不想马上执行命令,可以用 --no-exec
    更多参数详见官网(https://dvc.org/doc/command-reference/run#run)

如果是bash脚本或者命令行形式

dvc run -n my_stage "./my_script.sh > /dev/null 2>&1"
dvc run -n my_stage './my_script.sh $MYENVVAR'

l.经过dvc run之后,当你修改了数据源或者python脚本或者bash脚本,想要再执行程序

dvc repro
 类似资料: