在上一篇文章 快速入门DVC(三):数据与模型版本管理 中,讲述了如何使用 DVC 跟踪数据和模型,以及如何将它们的版本中的元数据(.dvc
)文件提交到 Git,通过 Git 来进行版本控制。
你可能会有如下的问题:
- 我们如何在项目之外使用这些制品?
- 我们如何下载模型来部署它?
- 我们如何下载特定版本的模型?
- 我们如何在不同的项目中重用数据集?
相信您已经迫不及待想知道答案了吧,那就让我们进入今天的主题:如何下载数据集与模型文件?
当您浏览 DVC 保存到远程存储的文件时,往往会遇到如下问题。比如:看到的文件路径为s3://dvc-public/remote/get-started/fb/89904ef053f04d64eafcc3d70db673
,而不是原来的文件名,如model.pkl
或 data.xml
。
那我们应该如何使用 DVC 查找和访问模型和数据集呢?
还记得 dvc add
生成的那些 .dvc
文件吗? 这些文件在 Git 中有它们的历史记录。Git 中包含访问和下载任何版本的数据集、文件和模型所需的所有信息,并且 DVC 的远程存储配置也保存在 Git 中。 这意味着带有 DVC 元数据文件的 Git 存储库成为入口点,可以代替直接访问文件使用。
查找文件或目录(dvc list
)
您可以使用 dvc list
查询托管在任何 Git 服务器上的 DVC 存储库。 例如,让我们看看 dataset-registry
存储库的 get-started/
目录中的内容:
$ dvc list https://github.com/iterative/dataset-registry get-started
.gitignore
data.xml
data.xml.dvc
与浏览 Git 托管网站(如:GitHub)相比,此命令的好处在于该列表包含 Git 和 DVC 跟踪的文件和目录(您在 GitHub 上面是看不到 data.xml
文件的)。
下载数据集或模型(dvc get
)
最简单的方法是使用 dvc get
下载数据。这在 DVC 项目环境之外工作时很有用,例如,在自动的进行机器学习模型部署的任务中。
dvc get https://github.com/iterative/dataset-registry \
use-cases/cats-dogs
如果在另一个 DVC 项目中工作时,这种方式并不是最佳策略,因为项目之间的连接丢失了(其他人不知道数据来自哪里或是否有新版本数据可用)。
导入文件或目录(dvc import
)
dvc import
也可以下载任何文件或目录,同时还会创建一个 .dvc
文件(这个文件保存在项目中):
dvc import https://github.com/iterative/dataset-registry \
get-started/data.xml -o data/data.xml
这条命令类似于 dvc get
+ dvc add
,同时,生成的 .dvc
文件包含用于跟踪源存储库中更改的元数据。 这允许您稍后使用 dvc update
从数据源引入最新的更改。
注意:
dataset registry 远程Git存储库实际上并不包含
get-started/data.xml
文件。 与dvc get
一样,dvc 从DVC远程数据存储库下载get-started/data.xml
文件。
dvc import
创建的 .dvc
文件具有特殊的字段,例如,在 deps
下存在数据源Git库信息(repo) 和 数据源路径(path),repo
下的 url
和 rev_lock
子字段分别用于保存依赖的来源(远程Git仓库URL)和版本(对应的Commit ID
)。
+deps:
+- path: get-started/data.xml
+ repo:
+ url: https://github.com/iterative/dataset-registry
+ rev_lock: f31f5c4cdae787b4bdeb97a717687d44667d9e62
outs:
- md5: a304afb96060aad90176268345e10355
path: data.xml
使用 Python API 下载文件
除了上面的几种方式之外,我们还可以使用 DVC 的 Python API
将您的数据或模型直接集成到源代码中。这使您可以在运行时,直接从应用程序内部访问数据内容。
示例代码如下:
import dvc.api
with dvc.api.open(
'get-started/data.xml',
repo='https://github.com/iterative/dataset-registry'
) as fd:
# 其中,fd是可以进行正常处理的文件描述符
总结
好了,今天讲述了如何使用dvc list
查看数据,以及使用dvc get
、dvc import
或Python API
来下载数据集或模型。快将其运用到我们的ML项目中来提升团队的开发效率吧。