数据版本管理 DVC data version control 和git一起管理你的机器学习实验数据

数据版本管理的目的

每个模型的在训练的时候,所使用的训练数据/测试数据都有可能是变化的,在进行复现实验结果的时候,除了使用同样的代码,config,使用同样的数据也是非常重要的。

如下图,如果要人工记录数据版本以及模型版本,使之匹配是比较麻烦的,因此,数据版本管理是十分必要的。

一、简介

DVC 可以轻松地将数据存储在许多存储系统上,像本地磁盘、SSH 服务器或云系统(S3、GCP 等)。DVC 管理的数据可以很容易地与其他使用此存储系统的用户共享。

The easiest (but not perfect!) analogy to describe it: DVC is Git (or Git-LFS to be precise) & Makefiles made right and tailored specifically for ML and Data Science scenarios.

  • DVC和git结合,对数据、模型、代码进行版本管理。
  • 安装简单,pip install dvc
  • 使用方便,dvc push; dev pull等
  • 速度快,在dvc add之后,会生成一个新的文件,如,dvc add data.sql,会生成data.sql.dvc(kb级别),git会上传data.sql.dvc这个文件,dvc根据。dvc的文件可以pull到对应的文件。如果需要指定版本的data、model、code,只需要git checkout 版本号 ,然后dvc pull就好。

二、Install

官网在这里

  • mac、linux、window的安装方式类似,都可以使用pip/conda  的方式安装。
  • python3.6+  pip install dvc
  •  Python versions 2.7, 3.6, and 3.7 conda install -c conda-forge dvc

三、Tutorials

主要有这些功能,官网在这里, 可以在这里模拟整个流程。

四、dvc 对数据和模型进行版本管理

假设,训练需要使用的代码、数据,训练得到的模型都在 ./test_dvc 的文件夹中,第一版训练结束之后,上传代码、数据、模型。第二版训练结束之后,又上传了代码、数据、模型,git用于push代码和数据模型对应的.dvc文件,dvc用于push数据和模型:

test.py,为模型训练需要使用的代码

data_v1.txt,为模型训练需要使用的第一版数据

model_v1.txt,为训练结束之后得到的第一版模型

data_v2.txt,为模型训练需要使用的第二版数据

model_v2.txt,为训练结束之后得到的第二版模型

需要进行版本管理的时候,和dvc的操作和git类似,主要使用dvc push和dvc pull的功能:

dvc push具体如下:

  • cd ./test_dvc
  • git init
  • dvc init ,会提示初始化完成:

  • dvc add data_v1.txt,会生成一个对应的data_v1.txt.dvc文件
  • dvc add model_v1.txt,会生成一个对应的model_v1.txt.dvc文件
  • 配置dvc的config,对data.txt和model.txt进行share,可以配置share的位置,可以使用s3,ssh.local,http等
    • 以local为例,dvc remote add -d myremote data_path(相对路径!!)
    • 以s3为例,dvc remote add myremote s3://bucket/path
  • 这时候,使用git提交代码和dvc自动生成的一些文件,使用dvc push需要管理的文件
    • git add 需要提交的文件(注意提交gitignore,这样才可以只push .dvc文件,否则原始文件也会push)
    • git commit -m “version description”
    • git push 
    • dvc push

version 2 和version1操作步骤一样

 

dvc pull具体如下:

假设已经push过version1和version2的data、model。

  • git clone之前的代码
  • dvc pull ,便可得到当前版本的data、model
  • 如果需要指定版本的代码和对应的data/model,git checkout 版本号 ,然后dvc pull就好啦

 

五、各种坑

1、dvc add 的时候,只能add自己的目录下的自己的文件!!

否则会出现如下问题:

  • 假设用a的账号 dvc add a的目录,但是a的目录下还有b的文件,这时候b的文件就会被删除(且无提示是否删除!!!)。
  • 假设用a的账号 dvc add b的目录,b的目录下有a的文件和b的文件,会add失败,需要将b的文件删除,才可以成功。

2、dvc add 了哪个路径的文件,dvc pull的时候就会pull到哪个路径,

如果需要pull到当前路径,需要在dvc add的时候使用相对路径,并把需要add的文件放在git 仓库的位置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章