DVC 使用案例(六):数据注册表

简介: DVC 存储库的主要用途之一是数据和模型文件的版本控制。DVC 还支持这些数据制品跨项目复用。这意味着您的项目可以依赖于来自其他 DVC 存储库的数据,就像一个用于数据科学的包管理系统一样。

DVC 存储库的主要用途之一是数据和模型文件的版本控制。DVC 还支持这些数据制品跨项目复用。这意味着您的项目可以依赖于来自其他 DVC 存储库的数据,就像一个用于数据科学的包管理系统一样。


网络异常,图片无法展示
|


我们可以构建一个专用于数据集(或数据特征、ML 模型等)版本控制的 DVC 项目。

GIT 远程仓库中具有它跟踪的数据的所有元数据和更改历史记录。我们可以看到谁在何时更改了什么,并使用pull请求来更新数据,就像我们使用代码一样。这就是我们所说的数据注册表——机器学习项目和云存储之间的数据管理中间件。

数据注册表的优势:

  • 可重用性:使用简单的 CLI(dvc getdvc import 命令,类似于 pip 等软件包管理系统)重现和组织特征仓库(Feature Store)。
  • 持久性:由 DVC 注册表跟踪的远程存储(例如:S3 存储桶)提高了数据安全性。 例如,某人删除或改写 ML 模型的可能性较小。
  • 存储优化:将多个项目共享的数据集中在一个位置。 这简化了数据管理并优化了空间需求。
  • 数据即代码(管理数据就像管理代码一样):为您的数据和模型生命周期利用 Git 工作流,例如,提交、分支、拉取请求、审查(review),甚至 CI/CD。
  • 安全性:注册表可以设置使用只读远程存储(例如:HTTP 服务器)。


建立数据注册表

向注册表添加数据集非常简单,只需将数据文件或目录放在工作区内,并使用dvc add跟踪即可。 可以使用替换实际数据的 .dvc 文件(例如,下面的 music/songs.dvc文件)遵循常规的 Git 工作流程。 这使得团队可以在与源代码相同的级别上进行数据协作:

这个样本数据集真实存在,请预先下载,下载完成之后,执行如下操作:

$ mkdir -p music/songs
$ cp ~/Downloads/millionsongsubset_full music/songs
$ dvc add music/songs/
$ git add music/songs.dvc music/.gitignore
$ git commit -m "Track 1.8 GB 10,000 song dataset in music/"
复制代码


实际数据存储在项目的缓存中,并且可以推送到一个或多个远程存储位置,以便其他人可以从其他位置访问注册表。

$ dvc remote add -d myremote s3://mybucket/dvcstore
$ dvc push
复制代码


将 DVC 存储库组织到数据注册表中的一种好方法是使用目录对类似数据进行分组,例如:images/, natural-language/

比如,我们的数据集注册表具有 get-started/use-cases/ 等目录,与该网站的部分内容相匹配。


使用数据注册表

使用数据注册表中的制品的主要方法是 dvc importdvc get 命令,以及 Python API dvc.api。 首先,我们可能想探索它的内容。


列出数据

要探索 DVC 存储库的内容以搜索合适的数据,请使用 dvc list 命令(类似于 ls 命令和第三方工具,如:aws s3 ls):

$ dvc list -R https://github.com/iterative/dataset-registry
.gitignore
README.md
get-started/.gitignore
get-started/data.xml
get-started/data.xml.dvc
images/.gitignore
images/dvc-logo-outlines.png
...
复制代码


上面的命令列出了 Git 跟踪的文件和 DVC 跟踪的数据(或模型等)。


数据下载到工作目录

dvc get 类似于使用 wget (HTTP)、aws s3 cp (S3) 等直接下载工具。要从 DVC 存储库中获取数据集,我们可以运行以下命令:

$ dvc get https://github.com/example/registry music/songs
复制代码


这将从项目的默认远程数据存储仓库下载music/songs,并将其放置在当前工作目录

中。


数据导入到工作流程

dvc import 使用与 dvc get相同的语法:

$ dvc import https://github.com/example/registry images/faces
复制代码


该命令除了下载数据外,导入还会保存本地项目对数据源(注册表存储仓库)的依赖关系的信息。 这是通过生成特殊的导入 .dvc 文件(包含元数据信息)来实现的。

每当注册表中的数据集发生更改时,我们都可以使用 dvc update 更新数据:

dvc update faces.dvc
复制代码


这会根据源代码库中最新的提交下载新的和更改的文件,并删除已删除的文件;同时,它也会相应地更新 .dvc 文件。

注意:

dvc getdvc importdvc update 有一个 --rev 参数选项,用于从源存储库的特定的提交下载数据。

使用 Python 代码下载 DVC 数据

我们的 Python API 包含在与 DVC 一起安装的 dvc 包中,包括从外部 DVC 项目加载和直接流式传输数据的开放函数:

import dvc.api.open
model_path = 'model.pkl'
repo_url = 'https://github.com/example/registry'
with dvc.api.open(model_path, repo_url) as fd:
    model = pickle.load(fd)
    # ... Use the model!
复制代码


这会将 model.pkl 作为文件描述符打开。 此示例演示了一种简单的 ML 模型部署方法,但它可以扩展到更高级的场景,例如:一个model zoo


除此之外,也可以参考 dvc.api.read()dvc.api.get_url() 函数。


更新数据注册表

数据集会不断更新,DVC 很容易应对它。只需更改注册表中的数据。通过再次运行 dvc add 来应用更新即可。

$ cp 1000/more/images/* music/songs/
$ dvc add music/songs/
复制代码


DVC 修改相应的 .dvc 文件以体现更改,这会被 Git 收集:

$ git status
...
  modified:   music/songs.dvc
$ git commit -am "Add 1,000 more songs to music/ dataset."
复制代码


对多个数据集重复这个过程可以形成一个健壮的注册表。结果基本上是一个库版本化一组元文件。

我们来看一个例子:

$ tree --filelimit=10
.
├── images
│   ├── .gitignore
│   ├── cats-dogs [2800 entries]  # Listed in .gitignore
│   ├── faces [10000 entries]     # Listed in .gitignore
│   ├── cats-dogs.dvc
│   └── faces.dvc
├── music
│   ├── .gitignore
│   ├── songs [11000 entries]     # Listed in .gitignore
│   └── songs.dvc
├── text
...
复制代码


不要忘了使用dvc push将数据更改推送到远程存储 ,这样其他人就可以获得这些更改了!

$ dvc push



相关文章
|
消息中间件 物联网 网络性能优化
MQTT常见问题之mqtt 连接一直显示 Not authorized to connect如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
5月前
|
消息中间件 缓存 安全
电商API数据接口深度分析
电商 API 是连接平台、商家与用户的核心枢纽,其设计直接影响数据流通效率与系统稳定性。本文从技术架构、性能优化、安全防护、合规治理等维度深度解析,结合淘宝、京东等头部平台实践,提供高并发场景下的多级缓存、异步处理、智能限流等落地解决方案,助力企业构建高效、安全、合规的 API 体系,推动电商系统智能化演进。
|
1月前
|
API 开发者
流量突然提升 100 倍,LLM Agent 和 Workflow,到底怎么选?
大模型从“聪明接口”走向“自主思考者”。Workflow是固定流水线,高效但僵化;Agent则能理解意图、规划步骤、动态决策,像会思考的员工。流程稳定用Workflow,复杂任务选Agent,二者结合更强大。核心在于:让机器从执行迈向思考。
|
7月前
|
人工智能 OLAP 数据处理
解锁数仓内AI流水线,AnalyticDB Ray基于多模ETL+ML提效开发与运维
AnalyticDB Ray 是AnalyticDB MySQL 推出的全托管Ray服务,基于开源 Ray 的丰富生态,经过多模态处理、具身智能、搜索推荐、金融风控等场景的锤炼,对Ray内核和服务能力进行了全栈增强。
|
数据采集 数据可视化 数据处理
利用 Jupyter 实现自动化报告生成
【8月更文第29天】自动化报告生成是在数据分析领域非常有用的一项技能。它可以帮助我们节省大量的手动工作时间,并确保每次生成的报告都是一致且准确的。本文将介绍如何使用 Jupyter Notebook 结合 Python 库(如 Pandas 和 Matplotlib)来实现自动化报告生成。
1226 0
|
域名解析 弹性计算 Linux
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
本文为大家介绍了2024年购买阿里云服务器和注册域名,绑定以及备案的教程,适合需要在阿里云购买云服务器、注册域名并备案的用户参考,新手用户可通过此文您了解在从购买云服务器到完成备案的流程。
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
|
网络安全
Discuz全站切换https,强制Discuz站点所有链接为https
Discuz全站切换https,强制Discuz站点所有链接为https
497 0
|
Java 数据库连接 mybatis
MapStruct-Java实体转换利器
本文介绍了MapStruct这一Java实体转换工具,通过定义mapper接口和使用注解,自动生成实现类以简化不同Java对象之间的转换过程,并提供了一个简单的使用示例,包括定义DTO、Entity类和映射接口,以及在Service层中的使用方式。
MapStruct-Java实体转换利器
|
安全 网络安全 iOS开发
macOS系统安装NMAP扫描工具
macOS系统安装NMAP扫描工具
812 1
mo-quarter-picker:基于 Vue2 和 ElementUI 的季度范围选择器
mo-quarter-picker:基于 Vue2 和 ElementUI 的季度范围选择器
1133 0
mo-quarter-picker:基于 Vue2 和 ElementUI 的季度范围选择器

热门文章

最新文章