DVC 使用指南:管理外部数据

简介: ⚠️ 这是针对特定情况的高级功能,除非绝对没有其他选择,否则不推荐使用。 在大多数情况下,dvc add 和 dvc import-url 的 to-cache 或 to-remote 策略更方便。

⚠️ 这是针对特定情况的高级功能,除非绝对没有其他选择,否则不推荐使用。 在大多数情况下,dvc adddvc import-urlto-cacheto-remote 策略更方便。

注意:外部输出不会从 远程存储pushpull

在某些情况下,数据如此之大,或者其处理的组织方式使其无法在本地机器磁盘中处理。 例如,对 NAS 上的现有数据进行版本控制、在 HDFS 上处理数据、通过 SSH 运行 Dask ,或任何直接生成大量文件到云端的代码。

外部输出(和 外部依赖 提供了在项目外部跟踪和版本化数据的方法。


外部输出如何工作


DVC 将跟踪外部输出以进行版本控制,检测它们何时发生变化(由 dvc status 报告)。

要将外部位置中的现有文件或目录用作输出,请将其远程 URL 或外部路径提供给 dvc add,或将它们放入 dvc.yaml中的 deps 字段。

对于以下 dvc remote 命令支持的类型/协议,使用相同的格式作为url

  • Amazon S3
  • SSH
  • HDFS
  • 工作空间外的本地文件和目录

避免将用于 dvc pushdvc pull 等命令的 DVC 远程存储 用作外部缓存,因为这可能会导致数据冲突:外部输出的哈希值可能与具有不同内容的本地文件的哈希值发生冲突。

注意:远程存储 是一项不同的功能。


设置外部缓存

DVC 需要将项目的缓存配置在与将要跟踪的数据(外部输出)相同的外部位置。 这样可以避免将文件传输到本地环境,并在外部存储中启用 文件链接

例如,让我们在工作区外部创建一个目录并将其设置为缓存:

$ mkdir -p /home/shared/dvcstore
$ dvc cache dir /home/shared/dvcstore
复制代码


请参阅 dvc cache dirdvc config cache 了解更多信息。

注意: 在现实生活场景中,目录通常位于远程位置,例如:s3://mybucket/cachessh://user@example.com/cache(请参见下面的示例)。

可以在 DVC 项目的副本之间共享外部缓存。 但不要在这种情况下使用外部输出,因为任何项目中使用 dvc checkout  都会覆盖所有项目的工作数据。

样例


对所有支持的远程存储类型的操作如下:

  1. 使用 dvc config 在与外部数据相同的位置配置一个外部缓存目录(需要先添加一个 dvc remote*)。
  2. 使用 dvc add(需要--external 选项)跟踪外部位置的现有数据。这会生成一个 .dvc 文件,其 outs 字段中有一个外部 URL 或路径。
  3. 使用 dvc run (需要--external 选项)创建一个简单的 Stage ,将本地文件移动到外部位置。 这会在 dvc.yaml 中产生一个外部输出。

注意: 对于某些远程存储身份验证方法,需要额外的配置步骤(有关的详细信息,请参阅 dvc remote modify)。 一旦设置访问权限后,请在第 2 步中使用特殊的 remote:// URL 格式。例如:dvc add --external remote://myxcache/existing-data

Amazon S3 示例

$ dvc remote add s3cache s3://mybucket/cache
$ dvc config cache.s3 s3cache
$ dvc add --external s3://mybucket/existing-data
$ dvc run -d data.txt \
          --external \
          -o s3://mybucket/data.txt \
          aws s3 cp data.txt s3://mybucket/data.txt
复制代码


SSH 示例

$ dvc remote add sshcache ssh://user@example.com/cache
$ dvc config cache.ssh sshcache
$ dvc add --external ssh://user@example.com/existing-data
$ dvc run -d data.txt \
          --external \
          -o ssh://user@example.com/data.txt \
          scp data.txt user@example.com:/data.txt
复制代码


DVC 需要 SSH 和 SFTP 可访问才能使用远程 SSH 位置。 请检查您是否能够使用 sshsftp (GNU/Linux) 等工具进行双向连接。

注意: 您服务器的 SFTP 根目录可能与其物理根目录 (/) 不同。

HDFS 示例

$ dvc remote add hdfscache hdfs://user@example.com/cache
$ dvc config cache.hdfs hdfscache
$ dvc add --external hdfs://user@example.com/existing-data
$ dvc run -d data.txt \
          --external \
          -o hdfs://user@example.com/data.txt \
          hdfs fs -copyFromLocal \
                  data.txt \
                  hdfs://user@example.com/data.txt
复制代码


注意: 只要您的数据有一个hdfs://... URL,DVC 就可以处理它。 因此,支持像 Hadoop、Hive 和 HBase 等系统!

WebHDFS 示例

$ dvc remote add webhdfscache webhdfs://user@example.com/cache
$ dvc config cache.webhdfs webhdfscache
$ dvc add --external webhdfs://user@example.com/existing-data
$ dvc run -d data.txt \
          --external \
          -o webhdfs://user@example.com/data.txt \
          curl --upload-file data.txt \
              "http://user@example.com:50075/webhdfs/v1/data.txt?op=CREATE"
复制代码


本地文件系统路径示例

默认情况,缓存位于 .dvc/cache 中,因此无需为项目之外的本地路径设置自定义缓存位置。

不同存储设备或安装在同一文件系统上的分区(例如,/mnt/raid/data)上的外部数据除外。 在这种情况下,请在同一驱动器中设置外部缓存以启用 文件链接 并避免复制数据。

$ dvc add --external /home/shared/existing-data
$ dvc run -d data.txt \
          --external \
          -o /home/shared/data.txt \
          cp data.txt /home/shared/data.txt


相关文章
|
3月前
|
存储 缓存 数据处理
71_数据版本控制:Git与DVC在LLM开发中的最佳实践
在2025年的大模型(LLM)开发实践中,数据和模型的版本控制已成为确保项目可重复性和团队协作效率的关键环节。与传统软件开发不同,LLM项目面临着独特的数据版本控制挑战:
|
存储 监控 C++
11 个必备 Docker 工具
11 个必备 Docker 工具
2671 11
11 个必备 Docker 工具
|
存储 物联网 数据安全/隐私保护
Docker安装Mosquitto
这篇文章详细介绍了如何在Docker中安装和配置Mosquitto消息代理服务,包括拉取镜像、创建容器以及配置持久化存储等步骤。
1898 0
Docker安装Mosquitto
|
自然语言处理 搜索推荐 机器人
大语言模型及其应用场景
大语言模型(如通义千问)凭借强大的自然语言处理能力,在内容创作、对话系统、翻译、信息抽取、代码生成、智能搜索、教育、企业管理和法律等领域展现巨大潜力,助力提升各行业智能化水平。
2679 0
|
Ubuntu 安全 网络协议
|
存储 机器学习/深度学习 缓存
快速入门DVC(三):数据与模型版本管理
数据和模型版本控制是 DVC 的基础层用于管理大型文件、数据集和机器学习模型。使用常规的 Git 工作流程,但不要在 Git 库中存储大文件。 大数据文件单独存储,来实现高效共享。想象一下,让 Git 以与处理小代码文件相同的性能来处理任意大的文件和目录,该有多酷?例
|
缓存 关系型数据库 MySQL
MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES)无法打开的解决方法
MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES)无法打开的解决方法
26957 0
|
前端开发 JavaScript Java
Swagger-UI 介绍及基本使用指南
Swagger-UI 介绍及基本使用指南
16147 2
Swagger-UI 介绍及基本使用指南