*为什么要使用Dvc ? *
1.做算法或者机器学习的时候,需要使用不同的数据集来验证算法或者模型的效果,也会需要针对同一份数据集,对比不同版本的模型效果。
2.不适用Git管理数据集的原因 : Git 无法单独下载想要的数据集,git来管理大量数据集的话,可能git pull 或者 git push都会耗时很久,将算法模型代码和数据集耦合在一起。
简单来说,Dvc负责管理真正的数据源,Git负责管理dvc的映射文件。
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 run
和 dvc 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,即会记录你的执行输入输出脚本。
如果是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