DVC 使用指南:外部依赖

简介: 在某些情况下,数据太大,或者其处理的组织方式使其无法在本地机器磁盘中处理,最好避免将其从当前的外部位置移动。 例如,NAS 上的数据、在 HDFS 上处理数据、通过 SSH 运行 Dask,或者用于从 S3 流式传输数据以对其进行处理的脚本。

在某些情况下,数据太大,或者其处理的组织方式使其无法在本地机器磁盘中处理,最好避免将其从当前的外部位置移动。 例如,NAS 上的数据、在 HDFS 上处理数据、通过 SSH 运行 Dask,或者用于从 S3 流式传输数据以对其进行处理的脚本。

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


外部依赖如何工作


DVC 将跟踪外部依赖项,检测它们何时发生变化(例如,在 dvc repro 上触发 Stage 执行)。

要将外部位置中的文件或目录定义为 stage 依赖,请在 dvc.yamldeps 字段)。 使用与某些 dvc remote 类型的 url 相同的格式。 目前, dvc remote 命令支持的类型/协议如下:

  • Amazon S3
  • Microsoft Azure Blob Storage
  • Google Cloud Storage
  • SSH
  • HDFS
  • HTTP
  • 工作空间外的本地文件和目录

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

示例

我们定义和运行一个download_file Stage,它只是从外部位置下载文件,在所有受支持的位置类型上。

关于使用远程位置需要手动身份验证设置。更多信息,请参阅远程别名示例

Amazon S3 示例

$ dvc run -n download_file \
          -d s3://mybucket/data.txt \
          -o data.txt \
          aws s3 cp s3://mybucket/data.txt data.txt
复制代码


Microsoft Azure Blob Storage 示例

$ dvc run -n download_file \
          -d azure://mycontainer/data.txt \
          -o data.txt \
          az storage copy \
                     -d data.json \
                     --source-account-name my-account \
                     --source-container mycontainer \
                     --source-blob data.txt
复制代码


Google Cloud Storage 示例

$ dvc run -n download_file \
          -d gs://mybucket/data.txt \
          -o data.txt \
          gsutil cp gs://mybucket/data.txt data.txt
复制代码


SSH 示例

$ dvc run -n download_file \
          -d ssh://user@example.com/path/to/data.txt \
          -o data.txt \
          scp user@example.com:/path/to/data.txt data.txt
复制代码


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

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

HDFS 示例

$ dvc run -n download_file \
          -d hdfs://user@example.com/data.txt \
          -o data.txt \
          hdfs fs -copyToLocal \
                  hdfs://user@example.com/data.txt data.txt
复制代码


HTTP/HTTPS 示例

$ dvc run -n download_file \
          -d https://example.com/data.txt \
          -o data.txt \
          wget https://example.com/data.txt -O data.txt
复制代码


本地文件系统路径 示例

$ dvc run -n download_file \
          -d /home/shared/data.txt \
          -o data.txt \
          cp /home/shared/data.txt data.txt
复制代码


示例:使用 DVC 远程别名

您可能希望将外部位置封装为可独立管理的可配置实体。如果连接需要身份验证,如果多个依赖项(或  Stage )重复使用同一位置,或者如果URL将来可能会更改,这将非常有用。

DVC remotes 可以做到这一点。 您可以使用 dvc remote add 来定义它们,然后使用格式为 remote://{remote_name}/ 的特殊 URL {path}(远程别名)来定义外部依赖。

让我们看一个使用 SSH 的示例。 首先,注册并配置远程存储路径:

$ dvc remote add myssh ssh://user@example.com
$ dvc remote modify --local myssh password 'mypassword'
复制代码


请参阅 dvc remote modify 了解更多详细信息,例如:为不同的远程存储类型设置访问凭据。

现在,在定义 Stage 时使用此远程存储的别名:

$ dvc run -n download_file \
          -d remote://myssh/path/to/data.txt \
          -o data.txt \
          wget https://example.com/data.txt -O data.txt
复制代码


示例:import-url 命令

在前面的示例中,使用了特殊的下载工具:scpaws s3 cp等。dvc import-url 简化所有支持的外部路径或 URL 类型的下载。

$ dvc import-url https://data.dvc.org/get-started/data.xml
Importing 'https://data.dvc.org/get-started/data.xml' -> 'data.xml'
复制代码



上面的命令会创建导入 .dvc 文件 data.xml.dvc,其中包含一个外部依赖项(在本例中为 HTTPS URL)。

生成的 .dvc 文件如下:

# ...
deps:
  - etag: '"f432e270cd634c51296ecd2bc2f5e752-5"'
    path: https://data.dvc.org/get-started/data.xml
outs:
  - md5: a304afb96060aad90176268345e10355
    path: data.xml
    cache: true
    persist: false
复制代码


DVC 检查服务器返回的标头(Header),查找 HTTP ETagContent-MD5 标头,并使用它来确定源是否已更改,同时,我们需要重新下载文件。

示例:import 命令

dvc import 可以从任何 DVC 项目或 Git 存储库下载文件或目录。 它还在其导入 .dvc 文件中创建了一个外部依赖项。

$ dvc import git@github.com:iterative/example-get-started model.pkl
Importing 'model.pkl (git@github.com:iterative/example-get-started)'
-> 'model.pkl'
复制代码


上面的命令创建了 model.pkl.dvc,其中指定了外部依赖项(使用 repo 字段)。

生成的 .dvc 文件如下:

# ...
deps:
  - path: model.pkl
    repo:
      url: git@github.com:iterative/example-get-started
      rev_lock: 6c73875a5f5b522f90b5afa9ab12585f64327ca7
outs:
  - md5: 3863d0e317dee0a55c4e59d2ec0eef33
    path: model.pkl
    cache: true
复制代码

repo 下的 urlrev_lock 子字段分别用于保存依赖的来源和 版本


相关文章
|
JSON 搜索推荐 Java
做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)
更新的功能具体使用示例已经更新到博文中,请在目录中找到对应位置查看
|
24天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
2月前
|
前端开发 JavaScript API
自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南
117 0
|
7月前
|
Java Maven
【亮剑】Java项目开发中常遇到Jar 包依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起
【4月更文挑战第30天】Java项目开发中常遇到依赖冲突问题,主要由不同版本库、循环依赖、传递依赖和依赖范围不当引起。解决冲突需分析依赖树、定位冲突源、调整类加载顺序等。方法包括排除冲突依赖、统一管理版本、限定依赖范围、合并冲突类、升级降级库版本及拆分模块。关注依赖关系,及时解决冲突,保障项目稳定运行。
472 0
|
7月前
|
Java Maven
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
71 0
|
Cloud Native Java Go
解决Maven依赖下载问题:从阿里云公共仓库入手
解决Maven依赖下载问题:从阿里云公共仓库入手
1242 0
|
Java Maven
springboot依赖分离,本地代码和第三方依赖包分开,减少部署服务时的上传时间
在pom.xml中的<build>标签中的<plugins>标签中添加下面这个插件
|
PHP 开发工具 git
如何将自己的扩展发布到Composer包仓库?具体步骤是怎样的?底层原理是什么?
如何将自己的扩展发布到Composer包仓库?具体步骤是怎样的?底层原理是什么?
281 0
|
Java Maven
Maven:第二章:去中央仓库下载包到本地引入依赖到项目中
Maven:第二章:去中央仓库下载包到本地引入依赖到项目中
291 0
Maven:第二章:去中央仓库下载包到本地引入依赖到项目中
|
存储 SQL 缓存
DVC 使用指南:管理外部数据
⚠️ 这是针对特定情况的高级功能,除非绝对没有其他选择,否则不推荐使用。 在大多数情况下,dvc add 和 dvc import-url 的 to-cache 或 to-remote 策略更方便。