Author: 曾令泽
创建dvc本地仓库
先创建git仓库,再创建dvc仓库
$ git init
$ dvc init
此时键入会得到如下信息
#追踪 dvc配置文件
$ git add .dvc
$ git status
Changes to be committed:
new file: .dvc/.gitignore
new file: .dvc/config
...
$ git commit -m "Initialize DVC"
此时git已经开始追踪dvc信息了。
使用dvc追终文件信息
假设此时文件目录如下, model.txt 代表模型参数, model.py代表模型结构的源代码
---
| --- model.txt
| --- model.py
命令行窗口输入
# 追踪model.py文件
$ git add model.py
# 使用dvc追踪 model.txt
$ dvc add model.txt
键入dvc add model.txt
后,会得到一个后缀 .dvc
的文件,该文件可以看作一个 model.txt 文件的 index,我们需要用git来追踪该文件。
命令行窗口输入
$ git add model.txt.dvc .gitignore
$ git commit -m "First Model, traind"
为提交版本打上易于辨识的标签
$ git tag -a "v1.0" -m "Model v1.0, Detail Information"
将dvc关联远端数据仓库
dvc支持S3,google driver等云端数据仓库,也可以用ssh,sftp连接远程服务器
更多云端仓库操作指南链接
下文以ssh连接远端服务器为例
Example:
ssh 服务器ip地址 : 192.168.1.151
存储地址: /home/user/data_center
Note: DVC现在支持的存储地址为绝对路径
增加远程仓库
$ dvc remote add -d myremote ssh://user@192.168.1.151/home/user/data_center
# myremote 云端仓库的名字
# -d default config
此时我们添加的是一个默认配置,配置用户名和密码
$ dvc remote modify --local myremote user Lingze
$ dvc remote modify --local myremote password mypassword
# 注意 用户名和密码包含隐私信息,一定要加上--local选项
# 他会生成conf.local文件,git追踪时会自动忽略掉此文件,但是本地应用不会受到影响
数据传输到远端仓库
$ dvc push test.txt
# 单独推test.txt文件
$ dvc push
# 全部文件都推到远端
$ dvc status --cloud
# 可以查看本地dvc文件与远端文件dvc文件差别
现在我们进行第二个版本的提交,随意改动 model.txt
model.py
代表进行了模型代码和模型参数的改变
$ dvc add model.txt
$ dvc push
# 生成.dvc文件, 将文件共享到云端
$ git add model.py model.txt.dvc
$ git commit -m "Second Model, train"
$ git tag -a "v2.0" -m "model v2.0,changed model"
#提交2.0版本,打上 v2.0的标签
回溯到之前版本
$ git checkout v1.0
$ dvc checkout
如果我们需要现在的代码,但是想使用之前的模型参数,我们可以单独进行指定
$ git checkout v1.0 model.txt.dvc
$ dvc checkout model.txt.dvc
其他
- 打开dvc文件,可以看到其实dvc文件记录了数据的路径和md5加密解密的密钥,换句话说dvc文件是一种key文件,因此相对data来说内存很小,使用git进行track没有负担。
- 云端文件的存储是加密的,只能通过本地data生成的dvc文件中密钥进行解密得到正确文件
- 在版本的回溯过程中,dvc对文件增删改进行了优化,并不是简单的复制,因此在内存利用率和效率上有大大提高