在 GitHub 上编辑

什么是 DVC?

数据版本控制 是一款免费、开源的工具,用于数据管理机器学习流程自动化以及实验管理。它帮助数据科学和机器学习团队管理大型数据集,使项目具备可复现性,并实现更高效的协作

DVC 充分利用了团队已熟悉的现有软件工程工具集(Git、IDE、CI/CD、云存储等)。其设计遵循以下原则:

  1. 代码化:以人类可读的元文件形式定义机器学习项目的各个方面(数据与模型版本、机器学习流程和实验)。这使得可以采用最佳实践和成熟的工程工具,缩小数据科学与传统软件工程之间的差距。
  2. 版本控制:使用 Git(或任何源码管理系统)对整个机器学习项目进行版本管理和共享,包括源代码和配置、参数与指标,以及数据资产和处理流程,只需提交 DVC 元文件(作为占位符)即可。
  3. 安全协作:控制对项目各个方面的访问权限,并与您选择的人员和团队共享。

特性

  • DVC 提供 VS Code 扩展命令行接口以及Python API 三种形式。这些选项为广泛的用户提供了熟悉且直观的用户体验

  • 易于使用:DVC 安装迅速,开箱即用。无需特殊基础设施,也不依赖于 API 或外部服务。

    支持与现有解决方案和平台(如 Git 托管服务、SSH 和云存储提供商等)进行可选集成。

  • 基于 Git 仓库运行,操作体验和流程与 Git 类似。继续使用常规的 Git 工作流(提交、分支、拉取请求等),无需重新发明轮子!

    DVC 也可以独立运行,但将不具备版本控制功能。

  • 自带资源:可在本地或云端使用已有的资源,包括存储、计算资源、CI 工作节点等,并在其上运行 DVC。您不会被锁定在任何单一供应商!

  • DVC 具备平台无关性:可在所有主流操作系统(Linux、macOS 和 Windows)上运行,且不依赖特定编程语言(Python、R、Julia、Shell 脚本等)或机器学习库(Keras、TensorFlow、PyTorch、Scipy 等)。

DVC 将多种现有理念整合到一个工具中,旨在将软件工程的最佳实践引入数据科学领域。

DVC 基于 Git 构建,引入了“数据版本控制”的概念——即那些不应直接存入 Git 仓库的大文件,但仍需被追踪和版本化。它利用 Git 的功能来管理不同版本的数据、数据流水线和实验。

DVC 并不强制依赖 Git,也可以在无 Git 环境下运行(但会缺失与版本控制相关的功能)。

DVC 并不能替代 Git! DVC 的元文件(如 dvc.yaml.dvc 文件)用于作为数据和机器学习流程的版本占位符。这些文件会随着你的数据变化而变化,你可以使用 Git 将它们纳入版本控制,以代理实际存储在缓存中(不在 Git 中)的数据。

不过,DVC 确实提供了一些类似于 Git 的命令,例如 dvc initdvc adddvc checkoutdvc push,这些命令会与底层的 Git 仓库进行交互(如果存在 Git 仓库的话,但这不是必需的)。

  • DVC 不需要像 Git-LFS 那样特殊的服务器。任何云存储服务,如 S3、Google Cloud Storage,甚至 SSH 服务器,都可以用作远程存储。无需额外的数据库、服务器或基础设施。

  • 默认情况下,DVC 不会在 Git 仓库中添加任何钩子(尽管这些钩子是可用的)。

  • Git-LFS 在设计时并未考虑数据科学的需求,因此不提供相关功能(例如 机器学习流程指标等)。

  • GitHub(常见的 Git 托管服务)对每个仓库限制为 2 GB。

  • DVC 可以根据系统情况使用 reflinks* 或硬链接代替符号链接,以提升性能和用户体验。

  • Git-annex 是以数据文件为中心的系统,而 DVC 则专注于为机器学习和可复现实验提供工作流。当通过 git clone 克隆 DVC 或 Git-annex 仓库时,数据文件不会被复制到本地机器,因为文件内容存储在独立的远程位置。然而,DVC 的 .dvc 文件始终包含在 Git 仓库中,这些文件提供了可复现的工作流,因此可以轻松地在本地执行。

  • DVC 对文件哈希计算进行了优化。

* (写时复制) 链接或reflinks是现代文件系统中支持的一种文件链接类型。与硬链接或符号链接不同,编辑 reflinks 始终是安全的,因为原始缓存中的数据将保持不变。

  • DVC 支持一种新的实验方法,能够轻松集成标准的 Git 工作流。例如,可以为每个实验创建单独的分支,若实验成功,则可将该分支合并回去。

  • DVC 的创新之处在于,用户可以轻松浏览过往实验,而无需每次都重新计算。

用于管理数据流水线和依赖图的系统,例如 AirflowLuigi 等。

  • DVC 专注于数据科学和建模。因此,DVC 的流水线轻量且易于创建和修改。但 DVC 缺少高级流水线执行功能,如执行监控、错误处理和恢复机制。

  • dvc 是一个纯粹的命令行工具,没有图形用户界面(GUI),也不会运行任何守护进程或服务器。不过,DVC 可以生成流水线和实验工作流的可视化图像。

  • 另请参阅我们的姊妹项目 CML,它有助于弥补其中一些不足。

另请参阅实验管理指南。

  • DVC 使用 Git 作为数据、流水线和实验的底层版本控制层。数据版本以元数据形式存在于 Git 中,而不是依赖外部数据库或 API,因此无需额外的服务。

  • DVC 无需运行任何服务。因此没有内置的图形用户界面,但我们有姊妹项目 DVC Studio 来弥补这一空白。

  • DVC 可以生成包含实验工作流可视化内容的图像。

  • DVC 具有透明的设计。DVC 文件采用人类可读的格式,外部工具可以轻松复用。

Make 等工具。

  • 文件追踪:

    • DVC 基于文件的哈希值(MD5)而非时间戳来追踪文件。这有助于避免在检出项目早期版本时触发耗时的操作(例如模型重新训练),而 Make 工具则会重新训练模型。

    • DVC 使用文件的时间戳和 inodes* 进行优化。这使得 DVC 能够避免重新计算所有依赖文件的哈希值,从而在处理大文件(数 GB 以上)时避免严重性能问题。

  • DVC 使用了 有向无环图(DAG):

    • 依赖关系图通过各个 阶段之间的连接隐式定义,依据是它们的 依赖项输出项

    • 每个阶段在 DAG 中定义一个节点,dvc.yaml 文件包含这些阶段的定义(类似于 Makefile)。所有阶段(及其对应的过程)通过输入和输出隐式关联,从而简化合并时的冲突解决。

    • DVC 阶段可以手动编写在直观的 dvc.yaml 文件中,也可以通过辅助命令 dvc stage add 根据终端命令及其输入和输出自动生成。

* Inode 是用于定位实际文件内容并存储权限信息的元数据记录。技术细节请参阅 本文档 中的“文件链接”部分(Linux)。

内容

🐛 发现问题?告诉我们!或者修复它:

在 GitHub 上编辑

有疑问?加入我们的聊天,我们会为您提供帮助:

Discord 聊天