DVC 使用指南:项目结构

简介: 在您的工作空间中使用 dvc init 将开始一个 DVC 项目,包括内部的 .dvc/ 目录。 从那里开始,您将创建和管理不同的 DVC 文件,并在使用 DVC 并进行数据科学实验时占据缓存。

在您的工作空间中使用 dvc init 将开始一个 DVC 项目,包括内部的 .dvc/ 目录。 从那里开始,您将创建和管理不同的 DVC 文件,并在使用 DVC 并进行数据科学实验时占据缓存。

  • dvc.yaml 流水线文件:定义了构成项目流水线的 Stages。 此处指定了所有基于Stage的功能,例如:dvc paramsdvc metricsdvc plots
  • .dvc 文件:是跟踪数据文件和目录的占位符。
  • .dvcignore 文件(可选):包含 DVC 要忽略的路径列表,这可以显著提高其操作性能。
  • .dvc/ 中的内部文件和目录:包含本地配置文件、默认本地缓存位置以及 DVC 需要运行的其他实用程序。

这些元数据文件使用 Git 进行版本控制。


流水线文件 (dvc.yaml)

您可以通过在一个或多个 dvc.yaml 文件(或流水线文件)中定义各个阶段(Stage)来构建数据科学或机器学习流水线(Pipeline)。 Stage 相互连接时形成 Pipeline (形成依赖关系图,具体请见: dvc dag)。

注意:命令 dvc stage 可用于创建和列出 Stage 。

dvc.yaml 文件可以使用 Git 进行版本控制。

这些文件使用 YAML 1.2 文件格式。 我们鼓励您熟悉它,以便您可以自己修改、编写或生成 Stage 和 Pipeline。


.dvc 文件

您可以使用 dvc add 来跟踪位于当前工作空间中的数据文件或目录。 此外,dvc importdvc import-url 允许您将数据从外部的位置带到您的项目,并开始在本地跟踪它。

.dvc 扩展名结尾的文件由这些命令创建为可以使用 Git 进行版本控制的数据占位符。 它们包含随时间跟踪目标数据所需的信息。

示例如下:

outs:
  - md5: a304afb96060aad90176268345e10355
    path: data.xml
    desc: Cats and dogs dataset
    remote: myremote
# 支持撰写评论和用户元数据信息
meta:
  name: 'Devee Bird'
  email: devee@dvc.org
复制代码


这些文件也是使用 YAML 1.2 文件格式。 我们鼓励您熟悉它,以便您可以自行修改、编写或生成 .dvc 文件。


.dvcignore 文件

.dvcignore 文件标记在遍历 DVC 项目时应排除哪些文件和目录。有时您可能希望 DVC 在处理项目时忽略某些文件。

例如,在工作区目录中处理大量数据文件时,对于dvc status这样简单的操作,您可能会遇到执行时间延长的问题。 在其他情况下,您可能希望省略与项目无关的文件或文件夹(如:macOS 上的 .DS_Store)。 为了解决这些情况,DVC 支持 .dvcignore 文件(可选的)。

.dvcignore 类似于 Git 中的 .gitignore,可以使用我们的辅助命令 dvc check-ignore 进行测试。


.dvc/目录下的内部目录和文件

在项目中初始化后,DVC 将使用 DVC 操作所需的内部目录和文件填充其安装目录(.dvc/)。

  • .dvc/config:这是一个配置文件。可以手动使用 dvc config 命令编辑配置文件。
  • .dvc/config.local:这是一个本地配置文件,它将覆盖 .dvc/config 中的选项。当您需要在配置中指定不想通过 Git 跟踪和共享的私有选项(凭证、私有位置等)时,这很有用。本地配置文件可以手动或使用命令 dvc config --local 进行编辑。
  • .dvc/cache:缓存目录的默认位置。缓存以特殊结构存储项目数据。工作区中的数据文件和目录将仅包含指向缓存中数据文件的链接,相关配置参数请参阅 dvc config cache,包括更改其位置。

注意:DVC 在初始化期间将缓存目录包含在 .gitignore 中。 DVC 跟踪的任何数据都不应该被推送到 Git 存储库,Git 中只有下载或重现该数据所需的DVC 文件

  • .dvc/cache/runs:运行缓存的默认位置。
  • .dvc/plots:图表模板的目录
  • .dvc/tmp:各种临时文件的目录
  • .dvc/tmp/index:用于优化 dvc pushdvc pulldvc fetchdvc status -c 操作的远程索引文件的目录。此位置可能会被 dvc config index.dir 覆盖。
  • .dvc/tmp/md5s:此目录用于优化。它包含一个 SQLite 状态数据库,用于存储在 DVC 项目中跟踪的文件的哈希值。它还保存了相应的时间戳和 inode,以避免不必要的文件哈希计算。此父位置可能会被 dvc config state.dir 覆盖。
  • .dvc/tmp/links:此目录用于在调用 dvc checkout 时清理您的工作区。它包含一个 SQLite 状态数据库,该数据库存储由 DVC 创建的文件链接列表(从缓存到工作区)。此父位置可能会被 dvc config state.dir 覆盖。
  • .dvc/tmp/updater:此文件用于存储 DVC 的最新可用版本。用于在安装的版本落后时提醒用户升级。
  • .dvc/tmp/updater.lock.dvc/tmp/updater 的锁定文件
  • .dvc/tmp/lock:整个DVC项目的锁定文件
  • .dvc/tmp/rwlock:一个包含特定依赖项和输出的读写锁的 JSON 文件,允许安全地并行运行多个 DVC 命令
  • .dvc/tmp/exps:此目录将包含用于临时或并行实验的工作区副本(请参考命令:dvc exp run)。


缓存目录的结构

DVC 缓存是一种内容可寻址存储(默认情况下位于 .dvc/cache 中),它在代码和数据之间添加了一层间接层。

缓存数据有两种方式,具体取决于它是单个文件还是目录(可能包含多个文件)。

注意:文件被重命名,重新组织,目录树在缓存中被展平,缓存总是只有一级深度,包含 2 个字符的目录(基于数据内容的哈希值)。

文件

DVC 计算文件哈希,一个 32 个字符长的字符串(通常是 MD5)。 前两个字符用于命名缓存内的目录,其余字符成为缓存文件的文件名

例如,如果数据文件的哈希值为 ec1d2935f811b77cc49b031b999cbf17,则其在缓存中的路径将为 .dvc/cache/ec/1d2935f811b77cc49b031b999cbf17

注意:文件哈希仅根据文件内容计算。 工作空间中可以存在2个或多个不同名称但内容相同的文件并被DVC跟踪,但缓存中只存储一份。 这有助于避免数据重复。

目录

让我们来添加一个包含 2 个图像的目录:

$ tree data/images/
data/images/
├── cat.jpeg
└── index.jpeg
$ dvc add data/images
复制代码


生成的缓存目录如下所示:

.dvc/cache/
├── 40
│   └── 2e97968614f583ece3b35555971f64
├── 6f
│   └── db5336fce0dbfd669f83065f107551.dir
└── de
    └── 7371b0119f4f75f9de703c7c3bac16
复制代码


其中,目录中的文件正常缓存。目录本身也有一个类似的条目,它带有 .dir 扩展名。 它包含内部文件的映射(作为 JSON 数组),由它们的哈希值进行标识:

$ cat .dvc/cache/6f/db5336fce0dbfd669f83065f107551.dir
[{"md5": "de7371b0119f4f75f9de703c7c3bac16", "relpath": "cat.jpeg"},
{"md5": "402e97968614f583ece3b35555971f64", "relpath": "index.jpeg"}]
复制代码


这就是为什么 DVC 知道其他两个缓存文件属于该目录。

运行缓存

默认情况下,dvc exp rundvc repro 命令会迁移并重新利用项目中已运行的Stage日志。它位于缓存(或远程存储)内的 runs/ 目录中。

运行被标识为确切的依赖内容(或参数值)和要执行的文字命令的组合。这些组合由特殊散列表示,这些散列转换为运行缓存目录中的文件路径:

$ tree .dvc/cache/runs
.dvc/cache/runs
└── 86
    └── 8632e1555283d6e23ec808c9ee1fadc30630c888d5c08695333609ef341508bf
        └── e98a34c44fa6b564ef211e76fb3b265bc67f19e5de2e255217d3900d8f...
复制代码


文件本身是该运行产生的 dvc.lock 文件的备份。

注意:运行的输出是从普通缓存(.dvc/cache/)中存储和检索的。

dvc pushdvc pull(和 dvc fetch)可以从远程存储进行下载运行缓存或将其上传到远程存储,以进行共享和作为备份。

注意:运行缓存假定 Stage 命令是确定性的(请参考 dvc run 命令避免出乎意料的行为)。


相关文章
|
2月前
|
Go
GoLand创建项目过程
GoLand创建项目过程
35 0
|
9月前
|
XML Java 应用服务中间件
安装使用IDEA,修改样式,配置服务,构建Maven项目(超级详细版)
安装使用IDEA,修改样式,配置服务,构建Maven项目(超级详细版)
52 0
|
API iOS开发 开发者
Xcode自动打包和上传蒲公英平台脚本(用python实现)
工作中,特别是所做项目进入测试阶段,肯定会经常打 Ad-hoc 包给测试人员进行测试,但是我们肯定不想每次进行打包的时候都要进行一些工程的设置修改,以及一系列的 next 按钮点击操作,现在就让这些操作都交给脚本化吧!
330 0
|
存储 机器学习/深度学习 缓存
快速入门DVC(三):数据与模型版本管理
数据和模型版本控制是 DVC 的基础层用于管理大型文件、数据集和机器学习模型。使用常规的 Git 工作流程,但不要在 Git 库中存储大文件。 大数据文件单独存储,来实现高效共享。想象一下,让 Git 以与处理小代码文件相同的性能来处理任意大的文件和目录,该有多酷?例
|
机器学习/深度学习 存储 SQL
快速入门DVC(一):简介
简述 DVC的开发者为iterative.ai,成立于2017年。它是一款开源的,针对机器学习项目的版本控制系统,同时也提供企业服务。起初,DVC从数据版本化管理概念切入,之后,提供对机器学习全方位的支持。
|
存储 缓存 开发工具
DVC 使用指南:项目结构中.dvcignore文件详解
.dvcignore 文件标记在遍历 DVC 项目时应排除哪些文件和目录。有时您可能希望 DVC 在处理项目时忽略某些文件。 例如,在工作区目录中处理大量数据文件时,对于dvc status这样简单的操作,您可能会遇到执行时间延长的问题。 在其他情况下,您可能
|
存储 缓存 网络安全
DVC 使用指南:项目结构中.dvc文件详解
您可以使用 dvc add 来跟踪位于当前工作空间中的数据文件或目录。 此外,dvc import 和 dvc import-url 允许您将数据从外部的位置带到您的项目,并开始在本地跟踪它。 以 .dvc 扩展名结尾的文件由这些命令创建为可以使用 Git 进行版本控制的数据占位符。 它们包含随时跟踪目标数据所需的信息。
|
机器学习/深度学习 存储 缓存
DVC 使用指南:项目结构中dvc.yaml文件详解(下)
您可以通过在一个或多个 dvc.yaml 文件(或流水线文件)中定义各个阶段(Stage)来构建数据科学或机器学习流水线(Pipeline)。 Stage 相互连接时形成 Pipeline (形成依赖关系图,具体请见: dvc dag)。
|
机器学习/深度学习 JSON 开发工具
DVC 使用指南:项目结构中dvc.yaml文件详解(上)
您可以通过在一个或多个 dvc.yaml 文件(或流水线文件)中定义各个阶段(Stage)来构建数据科学或机器学习流水线(Pipeline)。 Stage 相互连接时形成 Pipeline (形成依赖关系图,具体请见: dvc dag)。
|
存储 机器学习/深度学习 数据可视化
DVC 使用指南:与相关技术进行比较
DVC 将许多现有的想法结合到一个工具中,目标是将软件工程的最佳实践带入数据科学领域。