文章目录
一:什么是pipeline
dvc实际是专门面向ML项目的,它管理大体积的数据的功能只是冰山一角。除了这个功能,dvc还可以对模型流程版本进行管理,也就是pipeline。
一个ML工程项目一般由四部分组成,数据dataset、众多组成训练模型的脚本script、用来后期微调以测试模型性能的超参数params、用来测试的evalutions。
上述四个部分组成了pipeline,而dvc可以全权管理它们,一条龙运行。当然还有许多别的优势,且看下文。
二:教程
具体可参考DVC官方文档,这里只讲述我的一些理解。
【1】一条龙运行
我们先将工程文件夹进行以下操作:
git init
dvc init
dvc stage add 略
...
workspace中就会生成一个dvc.yaml
文件,里面是人类可读的流程信息,这个文件其实是整个pipeline的核心!!dvc就是根据该文件进行的autonomously running。
随后进行dvc repro
,pipeline正式运行,结束又会生成一个dvc.lock
文件夹,人类不可读,里面都是记录cache中的mdk5的hash值,其实就类似于.dvc
文件。
所以,在运行后其实dvc add
了pipeline中的生成数据(比如-o后面的一些定义文件)。其他的dvc.yaml
、dvc.lock
、params.yaml
文件dvc不跟踪,交给git进行版本管理。最后dvc push
这些生成数据。
【2】Smart
当我们只修改了众多文件中的一个文件中的一个小参数,那么dvc repro
时只会rerun被改动的脚本以及后面的依赖脚本。这一切都依赖于cache缓存,对于没有更改的stage只需要调用存好的数据即可。
对于正在workspace上新创流程的来说,cache肯定是有的,新生成的数据文件肯定也是有的。但是对于一个git clone
的新项目来说,还没有cache和中间文件,那么肯定不能smart,只能从头开始跑。
那怎么办呢?这就是之前dvc push的目的了,直接dvc pull
就行了。中间数据和文件直接完美拷贝,二次利用。
【3】Visualization
dvc还可以可视化不同版本间的metrics,通过dvclive.Live().log_plot
画出的图像,似乎会自动保存文件。dvclive.Live().log
方法似乎是在最后的evaluation.json
中添加内容?(暂待证实)同时,对如下图的evalute进行特别讲解:
cache:false的目的就是不希望它们被dvc跟踪,而是用来被git跟踪。–M和–plots-no-cache其实也都是新输出的文件,和之前stages的-o类似罢了。列出一些可视化命令和版本比较命令:
dvc metrics show
dvc plots modify evaluation/plots/precision_recall.json \
-x recall -y precision #第一次可视化需要配置坐标轴
...
dvc plots show
#比较命令,将当前workspace下的pipeline和last commit的metrics进行比较
#比如修改了params.yaml中的某个参数
dvc repro
dvc params diff
dvc metrics diff
dvc plots diff
(具体效果图见官方文档)