DVC 使用手册

本文最后更新于:2021年11月1日 中午

dvc是将大文件以类似git的形式进行管理的工具,结合git可以做到无痛管理项目文件,虽然眼下开发还不够成熟,不过已经为开发带来了很大方便。本文介绍dvc常用命令的使用方法。

本手册提供基本的DVC使用方法。
更详细的DVC使用方法请参考DVC官方文档

0. DVC安装

各个平台下都可以用 pip 安装

1
2
pip install dvc
pip install dvc[s3]

在Win平台下可能会报错:

1
ERROR: Cannot uninstall 'ruamel-yaml'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

此时需要进入python 的lib/site-packages 中删除 ‘ruamel-yaml’ 相关的文件

注意: dvc 2.3.0 版本与之后的hash计算方法不同,不能混用

1. DVC基本用法

初始化

使用dvc init命令初始化一个项目。注意,初始化DVC之前需要先初始化Git。
example:

1
2
3
4
mkdir example-get-started
cd example-get-started
git init
dvc init

dvc init命令会自动创建.dvc目录。

Track文件或目录

使用dvc add命令track文件或目录。

example:

1
dvc add data.xml

DVC将文件或目录的信息存储在.dvc文件中,如data.xml.dvc。DVC还会自动修改.gitignore文件。需要在Git中add这两个文件并提交。

1
2
git add data.xml.dvc .gitignore
git commit -m "Add xml data"

设置remote storage

使用dvc remote add命令可以设置DVC的remote。DI使用兼容亚马逊S3 API的对象存储做为DVC的remote storage。

设置方法如下:

1
2
dvc remote add -d myremote s3://dvc
dvc remote modify myremote endpointurl http://ceph01

其中myremote是DVC remote的名字,s3://dvc是bucket的位置,http://ceph01是对象存储的endpoint。

同时还需要配置如下环境变量:

1
2
export AWS_ACCESS_KEY_ID="<my-access-key>"
export AWS_SECRET_ACCESS_KEY="<my-secret-key>"

AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY无效时,请联系管理员获取新的key。

推送到remote

设置remote storage之后,可以使用dvc push命令推送数据到remote。

example:

1
dvc push

拉取数据

DVC-tracked data被存储到remote之后,可以通过dvc pull拉取远端的数据到本地。通常,在git clonegit pull之后运行dvc pull

example:

1
dvc pull

2. 创建基于DVC的Git项目

准备工作

  • 安装dvc

    pip install dvc

  • ceph对象存储服务配置

    设置环境变量

    export AWS_ACCESS_KEY_ID=18M4BI7CGWKWSYELOXC3

    配置hosts文件,在hosts文件中增加以下内容
    192.168.10.91 ceph01

初始化项目

假设项目名称为demo,数据位于demo/data目录。

1
2
3
cd demo
git init
dvc init

设置DVC的remote

1
2
dvc remote add -d myremote s3://dvc
dvc remote modify myremote endpointurl http://ceph01

track data

1
2
dvc add data
dvc push

提交Git

1
2
git add .
git commit -m "track data"

3. Data Registry

data registry用于数据和代码相分离的情况,即代码和数据不在同一目录。同时,data registry使得数据和模型可以在不同的项目间共享。DVC提供了dvc importdvc get命令来拉取data registry中的数据。

构建registry

与一般DVC项目一样,data registry使用git initdvc init进行初始化。
将数据集添加到data registry中很简单,只需要将相关数据放置在workspace中,然后用dvc addtrack它们。例如:

1
2
3
mkdir -p music/songs
cp ~/Downloads/millionsongsubset_full music/songs
dvc add music/songs/

然后使用常规的Git workflow管理产生的.dvc文件。

1
2
git add music/songs.dvc music/.gitignore
git commit -m "Track 1.8 GB 10,000 song dataset in music/"

实际的数据存储在项目的cache中,可以通过dvc push推送到remote storage以便其人能够访问。

1
2
dvc remote add -d myremote s3://dvc
dvc push

使用registry

列出数据

使用dvc list命令可以列出registry中的内容:

1
dvc list -R https://github.com/iterative/dataset-registry

直接下载

从registry中直接下载数据可以使用dvc get命令:

1
dvc get https://github.com/example/registry music/songs

import workflow

dvc import命令可以下载registry中的数据,同时会创建对应的.dvc文件,该文件包含了元数据。注意,dvc import必须在初始化过的dvc workspace中才能运行。

1
dvc import https://github.com/example/registry music/songs

更新数据

若项目引用的registry中的数据发送了更新,可以使用dvc update同步此数据:

1
dvc update dataset.dvc

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!