快速入门DVC(三):数据与模型版本管理

简介: 数据和模型版本控制是 DVC 的基础层用于管理大型文件、数据集和机器学习模型。使用常规的 Git 工作流程,但不要在 Git 库中存储大文件。 大数据文件单独存储,来实现高效共享。想象一下,让 Git 以与处理小代码文件相同的性能来处理任意大的文件和目录,该有多酷?例

数据和模型版本控制是 DVC 的基础层用于管理大型文件、数据集和机器学习模型。使用常规的 Git 工作流程,但不要在 Git 库中存储大文件。 大数据文件单独存储,来实现高效共享。想象一下,让 Git 以与处理小代码文件相同的性能来处理任意大的文件和目录,该有多酷?例如,使用git clone并在工作区查看数据文件和机器学习模型。或者使用 git checkout 在不到一秒的时间内切换到 100Gb 文件的不同版本。

DVC 的基础由一些命令组成,通过与 Git 一起运行以跟踪大文件、目录或 ML 模型文件。 简而言之,DVC 就是“用于管理数据的Git”。

在我的上一篇文章快速入门DVC(二):安装及初始化中创建了一个Git项目,并进行了初始化。现在,我们使用dvc add来跟踪文件或目录。


下载文件(dvc get

跟踪文件之前,我们使用dvc get预先下载数据文件。

# 进入到之前初始化好的项目目录下
$ cd example-get-started
$ dvc get https://github.com/iterative/dataset-registry \
          get-started/data.xml -o data/data.xml
复制代码


跟踪文件(dvc add

接下来,跟踪文件。

dvc add data/data.xml
复制代码


通过以上命令,DVC 将关于添加的文件(或目录)的信息存储在名为 data/data.xml.dvc 的特殊 .dvc 文件中(这是一个人类可读格式的小文本文件)。这个元数据文件是原始数据文件的占位符,这样就可以像使用 Git 的源代码一样轻松地进行版本控制。同时,原始数据文件会被放在 .gitignore 文件中。

$ cat data/.gitignore
/data.xml
复制代码


将元数据文件添加到Git中进行跟踪。

$ git add data/data.xml.dvc data/.gitignore
$ git commit -m "Add raw data"
复制代码


dvc add 会将数据移动到项目的缓存中,并将其链接回工作区。

$ tree .dvc/cache
../.dvc/cache
└── a3
    └── 04afb96060aad90176268345e10355
复制代码


我们刚刚添加的data.xml文件的hash值(a304afb...)决定了上面的缓存路径。

如果你检查 data/data.xml.dvc,你也会在这里发现它:

$ cat data/data.xml.dvc  
outs:
  - md5: a304afb96060aad90176268345e10355
    path: data.xml    
复制代码


存储数据文件到远程存储库(dvc push

您可以使用 dvc push 上传 DVC 跟踪的数据或模型文件,以便安全地远程存储它们。 这也意味着后面您可以使用 dvc pull 在其他环境中恢复它们。

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


首先,我们需要设置一个远程存储库的地址,DVC 支持许多远程存储类型,包括 Amazon S3SSHGoogle DriveAzure Blob StorageHDFS,从上图我们也可以看到,代码与模型和数据文件是分开存储的。

# 配置远程Git仓库
$ git remote add origin https://gitee.com/xxxx/dvc-samples.git
# 配置远程数据存储库(注:简单起见,这里我用的是本地的其他文件夹作为远程存储库,不推荐)
$ mkdir -p /home/lgd/dvc/local_remote_data_register
$ dvc remote add -d local_remote /home/lgd/dvc/local_remote_data_register
# 查看配置
$ cat .dvc/config
[core]
    remote = local_remote
['remote "local_remote"']
    url = /home/lgd/dvc/local_remote_data_register
# 添加dvc配置文件到本地Git仓库
$ git add .dvc/config
$ git commit -m "Configure local remote storage"
# 或者使用以下命令代替上面两条命令
# git commit .dvc/config -m "Configure local remote"
复制代码


DVC 远程可让您将 DVC 跟踪的数据副本存储在本地缓存之外(通常是云存储服务)。

注意: 我这里Demo使用的是“本地远程”,虽然“本地远程”看起来似乎自相矛盾,但其实并非必须如此。 “本地”指的是文件位置为本地文件系统中的另一个文件夹。 “远程”就是我们所说的 DVC 项目的远程存储。 它本质上是一个本地数据备份。

然后,我们使用dvc push 将本地缓存的数据复制到我们之前设置的远程存储中。

$ dvc push
复制代码


您可以使用以下命令检查数据是否已存储在 DVC 远程存储库中:

$ ls -R /home/lgd/dvc/local_remote_data_register
/home/lgd/dvc/local_remote_data_register/:
a3
/home/lgd/dvc/local_remote_data_register/a3:
04afb96060aad90176268345e10355
复制代码


通常,我们也需要 git commitgit push 对应的 .dvc 文件,将.dvc元数据文件提交本地仓库并推送到Git远程仓库,示例如下:

$ git push origin main
复制代码


下载与恢复数据(dvc pull

将 DVC 跟踪的数据和模型文件存储在远程仓库之后,我们可以在需要时使用 dvc pull 将其下载到该项目的其他副本中。 通常,我们在 git clonegit pull 之后运行它。

在其他环境下载项目的数据,示例如下:

$ git clone https://gitee.com/xxxx/dvc-samples.git
$ cd dvc-samples
$ git pull origin main
$ dvc pull
复制代码


在本项目中恢复数据,示例如下:

$ cd example-get-started
# 假设我们删除了本地缓存的数据
$ rm -rf .dvc/cache
$ rm -f data/data.xml
# 恢复数据
$ dvc pull origin main
复制代码


修改数据文件

当您对文件或文件夹进行更改时,再次运行 dvc add 以跟踪最新版本。

# 通过将数据集加倍来模拟修改数据
$ cp data/data.xml /tmp/data.xml
$ cat /tmp/data.xml >> data/data.xm
# 跟踪最新版本
dvc add data/data.xml
复制代码


通常情况下,我们还需要运行 git commitdvc push 来保存更改。

$ git commit data/data.xml.dvc -m "Dataset updates"
$ dvc push
复制代码


在版本之间进行切换(dvc checkout

通常的工作流程是先使用git checkout(切换分支或切换.dvc文件版本),然后运行dvc checkout以同步数据。

# 首先,获取数据集的先前一个版本,让我们回到数据的原始版本
$ git checkout HEAD~1
# 同步数据
$ dvc checkout
复制代码


之后,让我们提交.dvc文件到本地Git仓库(这次不需要做 dvc push,因为这个原始版本的数据集已经保存在本地缓存和远程存储库了)。

$ git commit data/data.xml.dvc -m "Revert dataset updates"
$ git push origin main
复制代码


总结

其实,从技术上来讲,DVC 甚至不是版本控制系统! .dvc 元数据文件内容定义了数据文件的版本,本质上是通过 Git 来提供版本控制。 DVC 反过来创建这些 .dvc 文件,然后更新它们,并有效地同步工作空间中 DVC 跟踪的数据以匹配它们。


相关文章
|
机器学习/深度学习 人工智能 开发工具
人工智能项目的python版本管理工具DVC
dvc即data version control, 是一种针对人工智能项目(机器学习或者深度学习)的数据版本管理工具。DVC的操作和GIT类似,可以认为为GIT的二次开发封装。结合GIT,DVC可以有效的管理人工智能项目的整个流程,包括代码,数据,训练配置,模型【2月更文挑战第12天】
79066 1
|
监控 JavaScript 前端开发
使用Vue.js开发员工上网行为监控的实时数据展示页面
使用Vue.js开发的实时员工上网行为监控页面,展示员工访问的网站、应用和时间等数据。页面响应式设计,适应不同设备。通过Vue组件显示实时数据,如`<li v-for="activity in activities">`循环渲染。数据定时更新,利用Vue的生命周期钩子和axios从服务器获取并自动刷新,确保数据的时效性。该页面有助于管理者即时了解员工网络活动,保障企业网络安全和资源管理。
492 5
|
监控 网络协议 Java
Linux 网络编程从入门到进阶 学习指南
在上一篇文章中,我们探讨了 Linux 系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。
Linux 网络编程从入门到进阶 学习指南
|
8月前
|
存储 缓存 数据处理
71_数据版本控制:Git与DVC在LLM开发中的最佳实践
在2025年的大模型(LLM)开发实践中,数据和模型的版本控制已成为确保项目可重复性和团队协作效率的关键环节。与传统软件开发不同,LLM项目面临着独特的数据版本控制挑战:
864 0
|
存储 数据采集 算法
构建AI数据管道:从数据到洞察的高效之旅最佳实践
本文探讨了大模型从数据处理、模型训练到推理的全流程解决方案,特别强调数据、算法和算力三大要素。在数据处理方面,介绍了多模态数据的高效清洗与存储优化;模型训练中,重点解决了大规模数据集和CheckPoint的高效管理;推理部分则通过P2P分布式加载等技术提升效率。案例展示了如何在云平台上实现高性能、低成本的数据处理与模型训练,确保业务场景下的最优表现。
|
前端开发 JavaScript C++
Marp 教程:实现幻灯片的交互性
Marp 是一个基于 Markdown 的幻灯片制作工具,结合 VSCode 的强大编辑功能,可以让你的 PPT 制作过程更加高效和专业。本教程详细介绍了如何在 Marp 中嵌入 HTML 和 JavaScript,实现幻灯片的交互性,包括基本的按钮点击、动态内容、表单交互、幻灯片导航、动画效果和交互式图表等。通过这些技巧,你可以制作出更加生动、互动性强的演示文稿。
GitHub飙升!京东认证的“Python编程入门三剑客”究竟好在哪?
Python凭借着简单易学、功能强大,已经跃居TIOB编程语言榜首,并且已经开始了它的霸榜之旅。如何选择一套适合自己的Python学习教程,是每个Python爱好者面临的首要问题。 今天给小伙伴们带来的是图灵&京东认证的“Python编程入门三剑客”,先看《Python编程从入门到实践》,打好Python入门的底子;再看《Python编程快速上手》,增强用Python处理工作中实际问题的能力;最后看《Python极客项目编程》,用充满想象力的实战案例,充分理解Python编程的奥秘,完成从小白到大神的进化。
|
存储 NoSQL 关系型数据库
非关系型数据库NOSQL
非关系型数据库NOSQL
459 1